Files
2026-07-14 11:11:36 +08:00

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,
);
});
});
}