Initial commit
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
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 → fvp(MediaCodec 不解 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,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user