blob: b1093f5ded8d40662af0b6122f97524b4f69d1e4 [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 'package:expect/expect.dart';
import 'dart:async';
import 'dart:isolate';
runTest() {
IsolateSink mainIsolate;
stream.listen((msg) {
mainIsolate = msg;
throw new UnsupportedError("ignore exception");
}, onDone: () {
mainIsolate.add("received done");
bool globalErrorHandler(IsolateUnhandledException e) {
var source = e.source;
return source is UnsupportedError && source.message == "ignore exception";
main() {
var keepRunningBox = new MessageBox();
// Make sure this test doesn't last longer than 2 seconds.
var timer = new Timer(const Duration(seconds: 2), () { throw "failed"; });
var box = new MessageBox();
IsolateSink otherIsolate = streamSpawnFunction(runTest, globalErrorHandler);
// The previous event should have been handled entirely, but the current
// implementations don't guarantee that and might mix the done event with
// the handling of the previous event. We therefore delay the closing.
// Note: if the done is sent too early it won't lead to failing tests, but
// just won't make sure that the globalErrorHandler works.
new Timer(const Duration(milliseconds: 10), otherIsolate.close); {
Expect.equals("received done", msg);