Chromium Code Reviews| Index: tests/html/async_test.dart |
| diff --git a/tests/html/async_test.dart b/tests/html/async_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..95d61f5e418263041e05e1e6e559c89870d2c582 |
| --- /dev/null |
| +++ b/tests/html/async_test.dart |
| @@ -0,0 +1,77 @@ |
| +library async_test; |
| + |
| +import '../../pkg/unittest/lib/unittest.dart'; |
| +import '../../pkg/unittest/lib/html_config.dart'; |
| + |
| +import 'dart:async'; |
| +import 'dart:isolate'; |
| +import 'dart:html'; |
| + |
| +oneshotTimerIsolate() { |
| + port.receive((msg, replyTo) { |
| + expect(msg, 'START'); |
| + new Timer(const Duration(milliseconds: 10), () { |
| + replyTo.send('DONE'); |
| + }); |
| + }); |
| +} |
| + |
| +periodicTimerIsolate() { |
| + port.receive((msg, replyTo) { |
| + expect(msg, 'START'); |
| + int counter = 0; |
| + new Timer.periodic(const Duration(milliseconds: 10), (timer) { |
| + if (counter == 3) { |
| + counter = 1024; |
| + timer.cancel(); |
| + // Wait some more time to be sure callback won't be invoked any |
| + // more. |
| + new Timer(const Duration(milliseconds: 30), () { |
| + replyTo.send('DONE'); |
| + }); |
| + } |
| + assert(counter < 3); |
| + counter++; |
| + }); |
| + }); |
| +} |
| + |
| +cancellingIsolate() { |
| + port.receive((msg, replyTo) { |
| + expect(msg, 'START'); |
| + final oneshot = new Timer(const Duration(milliseconds: 30), () { |
| + fail('Should never be invoked'); |
| + }); |
| + bool shot = false; |
| + 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'); |
| + }); |
| + }); |
| + }); |
| +} |
| + |
| +main() { |
| + useHtmlConfiguration(); |
| + |
| + test('one shot timer in pure isolate', () { |
| + expect(spawnFunction(oneshotTimerIsolate).call('START'), |
| + completion('DONE')); |
| + }); |
| + test('periodic timer in pure isolate', () { |
| + expect(spawnFunction(oneshotTimerIsolate).call('START'), |
|
vsm
2013/04/01 15:27:32
Looks like you lost this fix (should be periodicTi
Anton Muhin
2013/04/02 11:51:22
Thank you, bad merge.
|
| + completion('DONE')); |
| + }); |
| + test('cancellation in pure isolate', () { |
| + expect(spawnFunction(cancellingIsolate).call('START'), |
| + completion('DONE')); |
| + }); |
| +} |