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

import "dart:io";
import "dart:isolate";
import "package:expect/expect.dart";

main() async {
  var pkgRoot = Uri.parse("file:///no/such/directory/");
  var pkgConfig = Uri.parse("file:///no/such/.packages");
  try {
    var i = await Isolate.spawnUri(Platform.script, [], null,
        packageRoot: pkgRoot, packageConfig: pkgConfig);
  } catch (e) {
    print(e);
    Expect.isTrue(e is ArgumentError);
  }
  try {
    var i = await Isolate.spawnUri(Platform.script, [], null,
        packageRoot: pkgRoot, automaticPackageResolution: true);
  } catch (e) {
    print(e);
    Expect.isTrue(e is ArgumentError);
  }
  try {
    var i = await Isolate.spawnUri(Platform.script, [], null,
        packageConfig: pkgConfig, automaticPackageResolution: true);
  } catch (e) {
    print(e);
    Expect.isTrue(e is ArgumentError);
  }
  try {
    var i = await Isolate.spawnUri(Platform.script, [], null,
        packageRoot: pkgRoot,
        packageConfig: pkgConfig,
        automaticPackageResolution: true);
  } catch (e) {
    print(e);
    Expect.isTrue(e is ArgumentError);
  }
}
