Files

237 lines
5.9 KiB
Dart
Raw Permalink Normal View History

2026-07-14 11:11:36 +08:00
import 'package:flutter_test/flutter_test.dart';
import 'package:smplayer/features/player/session/player_engine_resolution.dart';
import 'package:smplayer/providers/player_engine_override_provider.dart';
void main() {
group('resolvePlayerEngineKind - media3 override', () {
test('Android + 非 DV/ProRes → media3', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.media3,
isDolbyVision: false,
videoCodec: 'h264',
isAndroid: true,
),
PlayerEngineKind.media3,
);
});
test('桌面 → mpv(不论 DV / codec', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.media3,
isDolbyVision: false,
videoCodec: 'h264',
isAndroid: false,
),
PlayerEngineKind.mpv,
);
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.media3,
isDolbyVision: true,
videoCodec: 'prores',
isAndroid: false,
),
PlayerEngineKind.mpv,
);
});
test('Android + DV → media3(用户显式选 media3 时直通 DV)', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.media3,
isDolbyVision: true,
videoCodec: 'hevc',
isAndroid: true,
),
PlayerEngineKind.media3,
);
});
test('Android + ProRes → fvpMediaCodec 不解 ProRes', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.media3,
isDolbyVision: false,
videoCodec: 'prores',
isAndroid: true,
),
PlayerEngineKind.fvp,
);
});
});
group('resolvePlayerEngineKind - auto behavior', () {
test('auto + Android + 非 DV/ProRes → media3', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.auto,
isDolbyVision: false,
videoCodec: 'h264',
isAndroid: true,
),
PlayerEngineKind.media3,
);
});
test('auto + Android + DV → media3', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.auto,
isDolbyVision: true,
videoCodec: 'hevc',
isAndroid: true,
),
PlayerEngineKind.media3,
);
});
test('auto + Android + ProRes → fvp', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.auto,
isDolbyVision: false,
videoCodec: 'prores',
isAndroid: true,
),
PlayerEngineKind.fvp,
);
});
test('auto + 桌面 → mpv', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.auto,
isDolbyVision: false,
videoCodec: 'h264',
isAndroid: false,
),
PlayerEngineKind.mpv,
);
});
test('auto + 桌面 DV → fvp', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.auto,
isDolbyVision: true,
videoCodec: 'hevc',
isAndroid: false,
),
PlayerEngineKind.fvp,
);
});
test('fvp override → 总是 fvp', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.fvp,
isDolbyVision: false,
videoCodec: 'h264',
isAndroid: false,
),
PlayerEngineKind.fvp,
);
});
test('mpv override → 总是 mpv(即便 DV', () {
expect(
resolvePlayerEngineKind(
PlayerEngineOverride.mpv,
isDolbyVision: true,
videoCodec: 'hevc',
isAndroid: true,
),
PlayerEngineKind.mpv,
);
});
});
group('playerEngineKindFromDisplayName', () {
test('media3 → PlayerEngineKind.media3', () {
expect(
playerEngineKindFromDisplayName('media3'),
PlayerEngineKind.media3,
);
});
test('fvp / mpv 仍可反查', () {
expect(playerEngineKindFromDisplayName('fvp'), PlayerEngineKind.fvp);
expect(playerEngineKindFromDisplayName('mpv'), PlayerEngineKind.mpv);
});
test('未知 displayName → null', () {
expect(playerEngineKindFromDisplayName('unknown'), isNull);
});
});
group('nextAutoFallbackEngine', () {
test('auto + media3 失败(非 DV)→ mpv', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.auto,
failedEngineKind: PlayerEngineKind.media3,
isDolbyVision: false,
),
PlayerEngineKind.mpv,
);
});
test('auto + media3 失败(DV)→ 跳过 mpv 直达 fvp', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.auto,
failedEngineKind: PlayerEngineKind.media3,
isDolbyVision: true,
),
PlayerEngineKind.fvp,
);
});
test('auto + mpv 失败 → fvp', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.auto,
failedEngineKind: PlayerEngineKind.mpv,
isDolbyVision: false,
),
PlayerEngineKind.fvp,
);
});
test('auto + fvp 失败 → 无回退', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.auto,
failedEngineKind: PlayerEngineKind.fvp,
isDolbyVision: true,
),
isNull,
);
});
test('非 auto 不自动回退', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.media3,
failedEngineKind: PlayerEngineKind.media3,
isDolbyVision: true,
),
isNull,
);
});
test('未知失败引擎不自动回退', () {
expect(
nextAutoFallbackEngine(
override: PlayerEngineOverride.auto,
failedEngineKind: null,
isDolbyVision: false,
),
isNull,
);
});
});
}