| Index: tests/isolate/global_error_handler_test.dart
|
| diff --git a/tests/isolate/global_error_handler_test.dart b/tests/isolate/global_error_handler_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cbb659a2becab5df1518b4c40bccd462170e1b0b
|
| --- /dev/null
|
| +++ b/tests/isolate/global_error_handler_test.dart
|
| @@ -0,0 +1,41 @@
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +import 'dart:async';
|
| +import 'dart:isolate';
|
| +
|
| +var firstFunction;
|
| +var finishFunction;
|
| +
|
| +void runFunctions() {
|
| + try {
|
| + firstFunction();
|
| + } catch (e) {
|
| + new Timer(Duration.ZERO, finishFunction);
|
| + throw;
|
| + }
|
| +}
|
| +
|
| +void startTest(SendPort finishPort, replyPort) {
|
| + firstFunction = () { throw new RuntimeError("ignore exception"); };
|
| + finishFunction = () { finishPort.send("done"); };
|
| + new Timer(Duration.ZERO, runFunctions);
|
| +}
|
| +
|
| +runTest() {
|
| + port.receive(startTest);
|
| +}
|
| +
|
| +bool globalErrorHandler(IsolateUnhandledException e) {
|
| + return e.source is RuntimeError && e.source.message == "ignore exception";
|
| +}
|
| +
|
| +main() {
|
| + var port = new ReceivePort();
|
| + var timer;
|
| + SendPort otherIsolate = spawnFunction(runTest, globalErrorHandler);
|
| + otherIsolate.send(port.toSendPort());
|
| + port.receive((msg, replyPort) { port.close(); timer.cancel(); });
|
| + timer = new Timer(const Duration(seconds: 2), () { throw "failed"; });
|
| +}
|
|
|