diff --git a/pkg/dartdev/test/native_assets/build_test.dart b/pkg/dartdev/test/native_assets/build_test.dart index 25a4c7d6e56..cee2cc55e1d 100644 --- a/pkg/dartdev/test/native_assets/build_test.dart +++ b/pkg/dartdev/test/native_assets/build_test.dart @@ -21,11 +21,13 @@ String crossOSNotAllowedError(String format) => final String hostOSMessage = 'Host OS: ${Platform.operatingSystem}'; String targetOSMessage(String targetOS) => 'Target OS: $targetOS'; -void main(List args) async { +void main([List args = const []]) async { if (!nativeAssetsExperimentAvailableOnCurrentChannel) { return; } + final dartDevEntryScriptUri = resolveDartDevUri('bin/dartdev.dart'); + final bool fromDartdevSource = args.contains('--source'); final hostOS = Platform.operatingSystem; final crossOS = Platform.isLinux ? 'macos' : 'linux'; @@ -48,8 +50,7 @@ void main(List args) async { final result = await runDart( arguments: [ '--enable-experiment=native-assets', - if (fromDartdevSource) - Platform.script.resolve('../../bin/dartdev.dart').toFilePath(), + if (fromDartdevSource) dartDevEntryScriptUri.toFilePath(), 'build', if (targetOS != null) ...[ '--target-os', @@ -219,8 +220,7 @@ void main(List args) { final result = await runDart( arguments: [ '--enable-experiment=native-assets', - if (fromDartdevSource) - Platform.script.resolve('../../bin/dartdev.dart').toFilePath(), + if (fromDartdevSource) dartDevEntryScriptUri.toFilePath(), 'build', 'bin/dart_app.dart', '.' diff --git a/pkg/dartdev/test/native_assets/helpers.dart b/pkg/dartdev/test/native_assets/helpers.dart index e915644ef20..d5e1ca4a9cb 100644 --- a/pkg/dartdev/test/native_assets/helpers.dart +++ b/pkg/dartdev/test/native_assets/helpers.dart @@ -15,6 +15,8 @@ import 'package:test/test.dart'; import 'package:yaml/yaml.dart'; import 'package:yaml_edit/yaml_edit.dart'; +import '../utils.dart'; + extension UriExtension on Uri { Uri get parent { return File(toFilePath()).parent.uri; @@ -243,9 +245,8 @@ Future nativeAssetsTest( 'treeshaking_native_libs', 'user_defines', ], - Platform.script.resolve( - '../../../../third_party/pkg/native/pkgs/native_assets_builder/'), - Platform.script.resolve('../../../../'), + sdkRootUri.resolve('third_party/pkg/native/pkgs/native_assets_builder/'), + sdkRootUri, usePubWorkspace, ); @@ -259,8 +260,8 @@ Future recordUseTest( skipPubGet, fun, const ['drop_dylib_recording'], - Platform.script.resolve('../../../record_use/'), - Platform.script.resolve('../../../../'), + sdkRootUri.resolve('pkg/record_use/'), + sdkRootUri, false, ); diff --git a/pkg/dartdev/test/native_assets/run_test.dart b/pkg/dartdev/test/native_assets/run_test.dart index b74e23790ea..d0edbc21217 100644 --- a/pkg/dartdev/test/native_assets/run_test.dart +++ b/pkg/dartdev/test/native_assets/run_test.dart @@ -9,7 +9,7 @@ import 'package:test/test.dart'; import '../utils.dart'; import 'helpers.dart'; -void main(List args) async { +void main([List args = const []]) async { if (!nativeAssetsExperimentAvailableOnCurrentChannel) { test('dart run', timeout: longTimeout, () async { await nativeAssetsTest('dart_app', (dartAppUri) async { diff --git a/pkg/dartdev/test/native_assets/test_test.dart b/pkg/dartdev/test/native_assets/test_test.dart index 1222eccdc5c..d2513bada35 100644 --- a/pkg/dartdev/test/native_assets/test_test.dart +++ b/pkg/dartdev/test/native_assets/test_test.dart @@ -9,7 +9,7 @@ import 'package:test/test.dart'; import '../utils.dart'; import 'helpers.dart'; -void main(List args) async { +void main([List args = const []]) async { if (!nativeAssetsExperimentAvailableOnCurrentChannel) { return; } diff --git a/pkg/dartdev/test/regress_46364_test.dart b/pkg/dartdev/test/regress_46364_test.dart index 0e831f5a3b1..bf85d595497 100644 --- a/pkg/dartdev/test/regress_46364_test.dart +++ b/pkg/dartdev/test/regress_46364_test.dart @@ -6,6 +6,7 @@ import 'dart:io'; import 'package:expect/expect.dart'; import 'package:path/path.dart' as p; +import 'package:test/test.dart'; import 'utils.dart'; @@ -25,20 +26,23 @@ Future copyPath(String from, String to) async { } Future main() async { - ensureRunFromSdkBinDart(); + test('Regression test for https://github.com/dart-lang/sdk/issues/46364', + () async { + ensureRunFromSdkBinDart(); - final exePath = Platform.resolvedExecutable; - final sdkDir = p.dirname(p.dirname(exePath)); - // Try to run the VM located on a path with % encoded characters. The VM - // should not try and resolve the path as a URI for SDK artifacts (e.g., - // dartdev.dart.snapshot). - final d = Directory.systemTemp.createTempSync('dart_symlink%3A'); - try { - await copyPath(sdkDir, d.path); - final path = '${d.path}/bin/dart'; - final result = await Process.run(path, ['help']); - Expect.equals(result.exitCode, 0); - } finally { - await d.delete(recursive: true); - } + final exePath = Platform.resolvedExecutable; + final sdkDir = p.dirname(p.dirname(exePath)); + // Try to run the VM located on a path with % encoded characters. The VM + // should not try and resolve the path as a URI for SDK artifacts (e.g., + // dartdev.dart.snapshot). + final d = Directory.systemTemp.createTempSync('dart_symlink%3A'); + try { + await copyPath(sdkDir, d.path); + final path = '${d.path}/bin/dart'; + final result = await Process.run(path, ['help']); + Expect.equals(result.exitCode, 0); + } finally { + await d.delete(recursive: true); + } + }); } diff --git a/pkg/dartdev/test/regress_56592_test.dart b/pkg/dartdev/test/regress_56592_test.dart index 42ae54d7a58..9a66f5a64f3 100644 --- a/pkg/dartdev/test/regress_56592_test.dart +++ b/pkg/dartdev/test/regress_56592_test.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:expect/expect.dart'; +import 'package:test/test.dart'; // Passing --disable-dart-dev after a DartDev command should cause the VM to // exit with an error, not cause a segfault. @@ -12,15 +13,18 @@ import 'package:expect/expect.dart'; // See https://github.com/dart-lang/sdk/issues/56592 for details. Future main() async { - final result = await Process.run( - Platform.resolvedExecutable, - [ - 'test', - '--disable-dart-dev', - ], - ); - Expect.contains( - 'Attempted to use --disable-dart-dev with a Dart CLI command.', - result.stderr, - ); + test('Regression test for https://github.com/dart-lang/sdk/issues/56592', + () async { + final result = await Process.run( + Platform.resolvedExecutable, + [ + 'test', + '--disable-dart-dev', + ], + ); + Expect.contains( + 'Attempted to use --disable-dart-dev with a Dart CLI command.', + result.stderr, + ); + }); } diff --git a/pkg/dartdev/test/sdk_from_path_test.dart b/pkg/dartdev/test/sdk_from_path_test.dart index 6366b5cd8d7..adb8961e2ac 100644 --- a/pkg/dartdev/test/sdk_from_path_test.dart +++ b/pkg/dartdev/test/sdk_from_path_test.dart @@ -8,6 +8,8 @@ import 'dart:io'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; +import 'utils.dart'; + // Regression test for https://github.com/dart-lang/sdk/issues/56080 void main() { @@ -18,13 +20,11 @@ void main() { }); test('sdk_test.dart passes when run with dart from PATH', () async { - final script = path.join( - path.dirname(Platform.script.toString()), - 'sdk_test.dart', - ); + final sdkTestUri = resolveDartDevUri('test/sdk_test.dart'); + process = await Process.start( 'dart', - [script], + [sdkTestUri.toFilePath()], environment: {'PATH': path.dirname(Platform.resolvedExecutable)}, ); diff --git a/pkg/dartdev/test/smoke/invalid_smoke_test.dart b/pkg/dartdev/test/smoke/invalid_smoke_test.dart index 3c2d61c93c3..5e891639d9f 100644 --- a/pkg/dartdev/test/smoke/invalid_smoke_test.dart +++ b/pkg/dartdev/test/smoke/invalid_smoke_test.dart @@ -7,7 +7,6 @@ import 'dart:io'; import 'package:test/test.dart'; const numRuns = 10; -final script = Platform.script.resolve('smoke.dart').toString(); void main() { group( diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart index 5960bbb4e80..795d3160104 100644 --- a/pkg/dartdev/test/utils.dart +++ b/pkg/dartdev/test/utils.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'dart:isolate'; import 'package:cli_util/cli_logging.dart'; import 'package:dartdev/dartdev.dart'; @@ -27,6 +28,9 @@ const String dartVersionFilePrefix2_9 = ''' // @dart = 2.9 '''; +/// Return the root URI of the SDK by walking up from the pkg/dartdev folder. +final sdkRootUri = resolveDartDevUri('../../'); + void initGlobalState() { log = Logger.standard(); } @@ -273,29 +277,8 @@ class TestProject { ); } - String? _sdkRootPath; - - /// Return the root of the SDK. - String get sdkRootPath { - if (_sdkRootPath == null) { - // Assumes the script importing this one is somewhere under the SDK. - String current = path.canonicalize(Platform.script.toFilePath()); - do { - String tryDir = path.dirname(current); - if (File(path.join(tryDir, 'pkg', 'dartdev', 'bin', 'dartdev.dart')) - .existsSync()) { - _sdkRootPath = tryDir; - return _sdkRootPath!; - } - current = tryDir; - } while (path.dirname(current) != current); - throw StateError('can not find SDK repository root'); - } - return _sdkRootPath!; - } - String get absolutePathToDartdevFile => - path.join(sdkRootPath, 'pkg', 'dartdev', 'bin', 'dartdev.dart'); + sdkRootUri.resolve('pkg/dartdev/bin/dartdev.dart').toFilePath(); Directory? findDirectory(String name) { var directory = Directory(path.join(dir.path, name)); @@ -356,3 +339,10 @@ String replacePathsWithMatchingCase(String input, {required String filePath}) { filePath, ); } + +/// Resolves a relative URI from the pkg/dartdev folder. +Uri resolveDartDevUri(String path) { + final dartDevLibUri = + Isolate.resolvePackageUriSync(Uri.parse('package:dartdev/')); + return dartDevLibUri!.resolve('../$path'); +}