56 lines
1.8 KiB
Dart
56 lines
1.8 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:smplayer/core/contracts/playback.dart';
|
|
import 'package:smplayer/features/player/session/initial_subtitle_resolver.dart';
|
|
import 'package:smplayer/providers/subtitle_settings_provider.dart';
|
|
|
|
RememberedSubtitleTrack _remembered({
|
|
int streamIndex = 3,
|
|
String? language,
|
|
String? title,
|
|
}) {
|
|
return RememberedSubtitleTrack(
|
|
streamIndex: streamIndex,
|
|
language: language,
|
|
title: title,
|
|
updatedAt: DateTime(2026),
|
|
);
|
|
}
|
|
|
|
void main() {
|
|
const embedded = [
|
|
EmbySubtitleTrack(index: 2, language: 'chi', title: '简体中文'),
|
|
EmbySubtitleTrack(index: 3, language: 'chi', title: '繁體中文'),
|
|
EmbySubtitleTrack(index: 4, language: 'eng', title: 'English'),
|
|
EmbySubtitleTrack(index: 5, title: 'Signs & Songs'),
|
|
];
|
|
|
|
test('lang + title 精确命中(大小写不敏感)', () {
|
|
final r = _remembered(language: 'CHI', title: '繁體中文');
|
|
expect(matchRememberedSubtitle(r, embedded), 3);
|
|
});
|
|
|
|
test('language 为 null 时按 title 命中', () {
|
|
final r = _remembered(streamIndex: 99, title: 'signs & songs');
|
|
expect(matchRememberedSubtitle(r, embedded), 5);
|
|
});
|
|
|
|
test('title 不匹配时回落仅 lang 宽松匹配', () {
|
|
final r = _remembered(language: 'chi', title: '不存在的标题');
|
|
expect(matchRememberedSubtitle(r, embedded), 2);
|
|
});
|
|
|
|
test('lang/title 全空时按 streamIndex 直配', () {
|
|
final r = _remembered(streamIndex: 4);
|
|
expect(matchRememberedSubtitle(r, embedded), 4);
|
|
});
|
|
|
|
test('全部 miss 返回 null', () {
|
|
final r = _remembered(streamIndex: 99, language: 'jpn', title: '日本語');
|
|
expect(matchRememberedSubtitle(r, embedded), isNull);
|
|
});
|
|
|
|
test('空轨道列表返回 null', () {
|
|
expect(matchRememberedSubtitle(_remembered(), const []), isNull);
|
|
});
|
|
}
|