// 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'; final packageUriToResolve = "package:foo/bar.dart"; final packageResolvedUri = "file:///no/such/directory/lib/bar.dart"; final dotPackages = """ # This is the content of a .packages file. foo:file:///no/such/directory/lib/ """; final packageConfigJson = """ { "configVersion": 2, "packages": [ { "name": "foo", "rootUri": "file:///no/such/directory", "packageUri": "lib/", "languageVersion": "2.7" } ] } """; main([args, port]) async { if (port != null) { testPackageResolution(port); return; } await runTest(dotPackages); await runTest(packageConfigJson); } Future runTest(String packageConfig) async { final data = Uri.dataFromString(packageConfig); final port = ReceivePort(); await Isolate.spawnUri(Platform.script, [], port.sendPort, packageConfig: data); final msg = await port.first; if (msg is! List) { print(msg.runtimeType); throw "Failure return from spawned isolate:\n\n$msg"; } if (msg[0] != data.toString()) { throw "Bad package config in child isolate: ${msg[0]}\n" "Expected: $data"; } if (msg[1] != packageResolvedUri) { throw "Package path not matching: ${msg[1]}"; } print("SUCCESS"); } testPackageResolution(port) async { try { var packageConfigStr = Platform.packageConfig; var packageConfig = await Isolate.packageConfig; var resolvedPkg = await Isolate.resolvePackageUri(Uri.parse(packageUriToResolve)); print("Spawned isolate's package config flag: $packageConfigStr"); print("Spawned isolate's loaded package config: $packageConfig"); print("Spawned isolate's resolved package path: $resolvedPkg"); port.send([packageConfig?.toString(), resolvedPkg?.toString()]); } catch (e, s) { port.send("$e\n$s\n"); } }