Skip to content

Commit adb9107

Browse files
committed
Add test.
1 parent 09e7691 commit adb9107

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

packages/flutter_test/test/widget_tester_test.dart

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,82 @@ void main() {
406406
expect(result, isNull);
407407
expect(tester.takeException(), isNotNull);
408408
});
409+
410+
testWidgets('runs in original zone', (WidgetTester tester) async {
411+
final Zone testZone = Zone.current;
412+
Zone? runAsyncZone;
413+
Zone? timerZone;
414+
Zone? periodicTimerZone;
415+
Zone? microtaskZone;
416+
417+
Zone? innerZone;
418+
Zone? innerTimerZone;
419+
Zone? innerPeriodicTimerZone;
420+
Zone? innerMicrotaskZone;
421+
422+
await tester.binding.runAsync<void>(() async {
423+
final Zone currentZone = Zone.current;
424+
runAsyncZone = currentZone;
425+
426+
// Complete a future when all callbacks have completed.
427+
int pendingCallbacks = 6;
428+
final Completer<void> callbacksDone = Completer<void>();
429+
void onCallback() {
430+
if (--pendingCallbacks == 0) {
431+
testZone.run(() {
432+
callbacksDone.complete(null);
433+
});
434+
}
435+
}
436+
437+
// On the runAsync zone itself.
438+
currentZone.createTimer(Duration.zero, () {
439+
timerZone = Zone.current;
440+
onCallback();
441+
});
442+
currentZone.createPeriodicTimer(Duration.zero, (Timer timer) {
443+
timer.cancel();
444+
periodicTimerZone = Zone.current;
445+
onCallback();
446+
});
447+
currentZone.scheduleMicrotask(() {
448+
microtaskZone = Zone.current;
449+
onCallback();
450+
});
451+
452+
// On a nested user-created zone.
453+
final Zone inner = runZoned(() => Zone.current);
454+
innerZone = inner;
455+
inner.createTimer(Duration.zero, () {
456+
innerTimerZone = Zone.current;
457+
onCallback();
458+
});
459+
inner.createPeriodicTimer(Duration.zero, (Timer timer) {
460+
timer.cancel();
461+
innerPeriodicTimerZone = Zone.current;
462+
onCallback();
463+
});
464+
inner.scheduleMicrotask(() {
465+
innerMicrotaskZone = Zone.current;
466+
onCallback();
467+
});
468+
469+
await callbacksDone.future;
470+
});
471+
expect(runAsyncZone, isNotNull);
472+
expect(timerZone, same(runAsyncZone));
473+
expect(periodicTimerZone, same(runAsyncZone));
474+
expect(microtaskZone, same(runAsyncZone));
475+
476+
expect(innerZone, isNotNull);
477+
expect(innerTimerZone, same(innerZone));
478+
expect(innerPeriodicTimerZone, same(innerZone));
479+
expect(innerMicrotaskZone, same(innerZone));
480+
481+
expect(runAsyncZone, isNot(same(testZone)));
482+
expect(runAsyncZone, isNot(same(innerZone)));
483+
expect(innerZone, isNot(same(testZone)));
484+
});
409485
});
410486

411487
group('showKeyboard', () {

0 commit comments

Comments
 (0)