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

// VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit
// VMOptions=--no-enable-isolate-groups

/// Tests that Isolate.spawnUri completes with an error when the given URI
/// doesn't resolve to an existing resource.
///
/// This test is similar to spawn_uri_missing_test.dart, but tests what happens
/// when Isolate.spawnUri is called from an a spawned isolate.  In dart2js,
/// these two situations are different.
library test.isolate.spawn_uri_missing_from_isolate_test;

import 'dart:isolate';

import 'dart:async';

import 'package:async_helper/async_helper.dart';

import 'spawn_uri_missing_test.dart';

const String SUCCESS = 'Test worked.';

void isolate(SendPort port) {
  doTest().then((_) => port.send(SUCCESS),
      onError: (error, stack) => port.send('Test failed: $error\n$stack'));
}

main() {
  ReceivePort port = new ReceivePort();
  Isolate.spawn(isolate, port.sendPort);
  Completer completer = new Completer();
  port.first.then((message) {
    if (message == SUCCESS) {
      completer.complete(null);
    } else {
      completer.completeError(message);
    }
  });

  asyncTest(() => completer.future);
}
