// 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.

// @dart = 2.9

/// 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);
}
