// Copyright (c) 2012, 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.

// Dart test program for testing that errors thrown from isolates are
// processed correctly and don't result in crashes.

library Isolate3NegativeTest;
import 'dart:isolate';
import '../../pkg/unittest/lib/unittest.dart';

class TestClass {
  TestClass.named(num this.fld1) : fld2=fld1 {
    TestClass.i = 0;  // Should cause a compilation error.
  }
  num fld1;
  num fld2;
}

void entry(SendPort replyTo) {
  var tmp = new TestClass.named(10);
  replyTo.send(tmp);
}

main() {
  test("child isolate compilation errors propagate correctly. ", () {
    void msg_callback(var message) {
      // This test is a negative test and should not complete successfully.
    }
    ReceivePort response = new ReceivePort();
    Isolate.spawn(entry, response.sendPort);
    response.first.then(expectAsync1(msg_callback));
  });
}
