Skip to content

Commit e0b5882

Browse files
committed
add and use flag accuratePump
1 parent 2e2e486 commit e0b5882

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

packages/flutter_test/lib/src/binding.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,10 @@ class AutomatedTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding {
10771077
@override
10781078
int get microtaskCount => _currentFakeAsync!.microtaskCount;
10791079

1080+
/// In order to let animation get accurate time information during [pump],
1081+
/// set the [accurate] flag to true. Default is false for compatibility.
1082+
bool accuratePump = false;
1083+
10801084
@override
10811085
Future<void> pump([ Duration? duration, EnginePhase newPhase = EnginePhase.sendSemanticsUpdate ]) {
10821086
return TestAsyncUtils.guard<void>(() {
@@ -1089,9 +1093,11 @@ class AutomatedTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding {
10891093
if (hasScheduledFrame) {
10901094
addTime(const Duration(milliseconds: 500));
10911095
_currentFakeAsync!.flushMicrotasks();
1092-
handleBeginFrame(Duration(
1093-
microseconds: _clock!.now().microsecondsSinceEpoch,
1094-
));
1096+
handleBeginFrame(
1097+
accuratePump
1098+
? Duration(microseconds: _clock!.now().microsecondsSinceEpoch)
1099+
: Duration(milliseconds: _clock!.now().millisecondsSinceEpoch)
1100+
);
10951101
_currentFakeAsync!.flushMicrotasks();
10961102
handleDrawFrame();
10971103
}

packages/flutter_test/test/bindings_test.dart

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,41 @@ void main() {
5757
order += 1;
5858
});
5959

60-
testWidgets('timeStamp should be accurate', (WidgetTester tester) async {
61-
final WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
60+
group('"accurate" argument in pump', () {
61+
testWidgets(
62+
'when accurate=true, timeStamp should be truncated for compatibility',
63+
(WidgetTester tester) async {
64+
final WidgetsBinding widgetsBinding =
65+
WidgetsFlutterBinding.ensureInitialized();
66+
67+
await tester.pumpWidget(const CircularProgressIndicator());
68+
69+
final Duration timeStampBefore =
70+
widgetsBinding.currentSystemFrameTimeStamp;
71+
await tester.pump(const Duration(microseconds: 12345));
72+
final Duration timeStampAfter =
73+
widgetsBinding.currentSystemFrameTimeStamp;
74+
75+
expect(timeStampAfter - timeStampBefore,
76+
const Duration(microseconds: 12000));
77+
});
78+
79+
testWidgets('when accurate=true, timeStamp should be accurate',
80+
(WidgetTester tester) async {
81+
final AutomatedTestWidgetsFlutterBinding widgetsBinding =
82+
AutomatedTestWidgetsFlutterBinding.ensureInitialized();
83+
widgetsBinding.accuratePump = true;
6284

63-
await tester.pumpWidget(const CircularProgressIndicator());
85+
await tester.pumpWidget(const CircularProgressIndicator());
6486

65-
final Duration timeStampBefore = widgetsBinding.currentSystemFrameTimeStamp;
66-
await tester.pump(const Duration(microseconds: 12345));
67-
final Duration timeStampAfter = widgetsBinding.currentSystemFrameTimeStamp;
87+
final Duration timeStampBefore =
88+
widgetsBinding.currentSystemFrameTimeStamp;
89+
await tester.pump(const Duration(microseconds: 12345));
90+
final Duration timeStampAfter =
91+
widgetsBinding.currentSystemFrameTimeStamp;
6892

69-
expect(timeStampAfter - timeStampBefore, const Duration(microseconds: 12345));
93+
expect(timeStampAfter - timeStampBefore,
94+
const Duration(microseconds: 12345));
95+
});
7096
});
7197
}

0 commit comments

Comments
 (0)