130 lines
3.8 KiB
Dart
130 lines
3.8 KiB
Dart
|
|
import 'package:flutter_test/flutter_test.dart';
|
||
|
|
import 'package:smplayer/features/player/session/stall_detector.dart';
|
||
|
|
|
||
|
|
void main() {
|
||
|
|
group('StallDetector', () {
|
||
|
|
test('有字节统计时下载继续便不判定停滞', () {
|
||
|
|
final detector = StallDetector(threshold: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: 100,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: Duration.zero,
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: 200,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 12),
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('无字节统计时缓冲终点继续前进便不判定停滞', () {
|
||
|
|
final detector = StallDetector(threshold: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: Duration.zero,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 8),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 12),
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('累计字节首次变为可用时视为传输进展', () {
|
||
|
|
final detector = StallDetector(threshold: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: Duration.zero,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: 100,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 12),
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('无字节统计且仍有明显缓冲余量时不重连', () {
|
||
|
|
final detector = StallDetector(threshold: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 20),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: Duration.zero,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 20),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 12),
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('所有可用进展信号停止到阈值后只触发一次', () {
|
||
|
|
final detector = StallDetector(threshold: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: Duration.zero,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 10),
|
||
|
|
),
|
||
|
|
isTrue,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
detector.update(
|
||
|
|
position: const Duration(seconds: 5),
|
||
|
|
bufferedPosition: const Duration(seconds: 5),
|
||
|
|
bytesDownloaded: null,
|
||
|
|
isActivelyPlaying: true,
|
||
|
|
now: const Duration(seconds: 20),
|
||
|
|
),
|
||
|
|
isFalse,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|