| // Copyright (c) 2020, 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. |
| |
| import 'dart:io'; |
| |
| import 'package:path/path.dart' as path; |
| |
| import 'spawn_uri__package_uri__test.dart'; |
| |
| final executable = Platform.executable; |
| |
| main() async { |
| // Make a folder structure that has both ".dart_tool/package_config.json" and |
| // ".packages" and ensure VM prefers to use ".packages". |
| await withTempDir((String tempDir) async { |
| // Setup bogus ".packages" with "foo -> ..." with invalid mapping. |
| final dotPackagesPath = path.join(tempDir, '.packages'); |
| final dotPackagesFile = File(dotPackagesPath); |
| await dotPackagesFile.writeAsString(buildDotPackages('invalid')); |
| |
| // Setup ".dart_tool/package_config.json". |
| final dotDartToolDir = path.join(tempDir, '.dart_tool'); |
| await Directory(dotDartToolDir).create(); |
| final packageConfigJsonPath = |
| path.join(dotDartToolDir, 'package_config.json'); |
| final packageConfigJsonFile = File(packageConfigJsonPath); |
| await packageConfigJsonFile.writeAsString(buildPackageConfig('foo', true)); |
| |
| final mainFile = path.join(tempDir, 'main.dart'); |
| await File(mainFile).writeAsString(''' |
| import 'dart:io' as io; |
| import 'dart:isolate'; |
| |
| main() async { |
| final uri = await Isolate.packageConfig; |
| final expectedUri = Uri.parse('${packageConfigJsonFile.uri}'); |
| if (uri != expectedUri) { |
| throw 'VM should use .packages file (but used \$uri).'; |
| } |
| } |
| '''); |
| |
| await run(executable, [mainFile]); |
| }); |
| } |