Chromium Code Reviews| Index: tests/html/async_cancellingisolate.dart |
| diff --git a/tests/html/async_cancellingisolate.dart b/tests/html/async_cancellingisolate.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2465097f47c094aed936af443ca86df396319ce8 |
| --- /dev/null |
| +++ b/tests/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[0]; |
|
terry
2015/03/04 15:26:48
Should this be message.first (similar to other tes
|
| + expect(command, 'START'); |
| + bool shot = false; |
|
terry
2015/03/04 15:26:48
NIT: probably don't need bool because of l-value.
|
| + 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'); |
| + }); |
| +} |