blob: c1d8ce867ad081ec6e65a4adc6892460004da6be [file] [log] [blame]
// 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.
library test;
import 'dart:async';
import 'dart:isolate';
var firstFunction;
var finishFunction;
void runFunctions() {
try {
firstFunction();
} catch (e) {
new Timer(Duration.ZERO, finishFunction);
rethrow;
}
}
void startTest(EventSink finishSink) {
firstFunction = () { throw new UnsupportedError("ignore exception"); };
finishFunction = () { finishSink.add("done"); finishSink.close(); };
new Timer(Duration.ZERO, runFunctions);
}
runTest() {
stream.single.then(startTest);
}
bool globalErrorHandler(IsolateUnhandledException e) {
return e.source is UnsupportedError && e.source.message == "ignore exception";
}
main() {
var box = new MessageBox();
var timer;
EventSink otherIsolate = streamSpawnFunction(runTest, globalErrorHandler);
otherIsolate.add(box.sink);
otherIsolate.close();
box.stream.single.then((msg) {
box.stream.close();
timer.cancel();
});
timer = new Timer(const Duration(seconds: 2), () { throw "failed"; });
}