// test/position_guard_test.dart import 'package:flutter_test/flutter_test.dart'; import 'package:qingting_player/utils/position_guard.dart'; void main() { group('shouldIgnorePositionRegression', () { test('正常播放推进:不拦截', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 77), incoming: const Duration(seconds: 78), isChangingTrack: false, isRecovering: false, ), isFalse, ); }); test('77s 突然归零:拦截(这就是"从头重播"的元凶)', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 77), incoming: Duration.zero, isChangingTrack: false, isRecovering: false, ), isTrue, ); }); test('用户切歌:允许回退', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 200), incoming: Duration.zero, isChangingTrack: true, isRecovering: false, ), isFalse, ); }); test('自动恢复中:允许回退(我们自己重开的)', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 200), incoming: Duration.zero, isChangingTrack: false, isRecovering: true, ), isFalse, ); }); test('刚开始播放(最后位置 <10s):不拦截,避免误伤起播', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 8), incoming: Duration.zero, isChangingTrack: false, isRecovering: false, ), isFalse, ); }); test('小幅回退(77s -> 73s):不拦截', () { expect( shouldIgnorePositionRegression( lastKnown: const Duration(seconds: 77), incoming: const Duration(seconds: 73), isChangingTrack: false, isRecovering: false, ), isFalse, ); }); }); }