Files
sm-emby-share/test/features/player/session/player_engine_resolution_test.dart
T
2026-07-14 11:11:36 +08:00

237 lines
5.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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,
);
});
});
}