48 lines
1.3 KiB
Dart
48 lines
1.3 KiB
Dart
|
|
import 'package:fake_async/fake_async.dart';
|
||
|
|
import 'package:flutter_test/flutter_test.dart';
|
||
|
|
|
||
|
|
import 'package:smplayer/features/player/session/relink_scheduler.dart';
|
||
|
|
|
||
|
|
void main() {
|
||
|
|
group('RelinkScheduler', () {
|
||
|
|
test('schedule cancels pending sustain timer (attempts must accumulate)',
|
||
|
|
() {
|
||
|
|
fakeAsync((async) {
|
||
|
|
final s = RelinkScheduler();
|
||
|
|
var gaveUp = false;
|
||
|
|
|
||
|
|
void failOnce() {
|
||
|
|
s.schedule(onRelink: (_) {}, onGiveUp: () => gaveUp = true);
|
||
|
|
|
||
|
|
async.flushTimers(flushPeriodicTimers: false);
|
||
|
|
s.armSustain(sustain: const Duration(seconds: 10));
|
||
|
|
|
||
|
|
async.elapse(const Duration(seconds: 5));
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
failOnce();
|
||
|
|
failOnce();
|
||
|
|
failOnce();
|
||
|
|
expect(gaveUp, isFalse);
|
||
|
|
s.schedule(onRelink: (_) {}, onGiveUp: () => gaveUp = true);
|
||
|
|
expect(gaveUp, isTrue);
|
||
|
|
s.dispose();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
test('sustained playback resets attempts', () {
|
||
|
|
fakeAsync((async) {
|
||
|
|
final s = RelinkScheduler();
|
||
|
|
s.schedule(onRelink: (_) {}, onGiveUp: () {});
|
||
|
|
async.flushTimers(flushPeriodicTimers: false);
|
||
|
|
expect(s.attempts, 1);
|
||
|
|
s.armSustain(sustain: const Duration(seconds: 10));
|
||
|
|
async.elapse(const Duration(seconds: 11));
|
||
|
|
expect(s.attempts, 0);
|
||
|
|
s.dispose();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|