Index: test/codegen/lib/html/async_cancellingisolate.dart |
diff --git a/test/codegen/lib/html/async_cancellingisolate.dart b/test/codegen/lib/html/async_cancellingisolate.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6278ebc2585f783dc510b43fc7e00bc600f5fe03 |
--- /dev/null |
+++ b/test/codegen/lib/html/async_cancellingisolate.dart |
@@ -0,0 +1,31 @@ |
+library async_cancellingisolate; |
+ |
+import 'dart:async'; |
+import 'package:unittest/unittest.dart'; |
+ |
+main(message, replyTo) { |
+ var command = message.first; |
+ expect(command, 'START'); |
+ var shot = false; |
+ var oneshot; |
+ var periodic; |
+ periodic = new Timer.periodic(const Duration(milliseconds: 10), (timer) { |
+ expect(shot, isFalse); |
+ shot = true; |
+ expect(timer, same(periodic)); |
+ periodic.cancel(); |
+ oneshot.cancel(); |
+ // Wait some more time to be sure callbacks won't be invoked any |
+ // more. |
+ new Timer(const Duration(milliseconds: 50), () { |
+ replyTo.send('DONE'); |
+ }); |
+ }); |
+ // We launch the oneshot timer after the periodic timer. Otherwise a |
+ // (very long) context switch could make this test flaky: assume the |
+ // oneshot timer is created first and then there is a 30ms context switch. |
+ // when the periodic timer is scheduled it would execute after the oneshot. |
+ oneshot = new Timer(const Duration(milliseconds: 30), () { |
+ fail('Should never be invoked'); |
+ }); |
+} |