Drop package resolver from test_core and test, use package_config from test (#1181)
Also updates to the latest stack_trace_mapper
diff --git a/.travis.yml b/.travis.yml
index 2880345..eb82324 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,8 +13,8 @@
jobs:
include:
- stage: analyze_and_format
- name: "SDK: 2.4.0; PKGS: pkgs/test, pkgs/test_api, pkgs/test_core; TASKS: `dartanalyzer --fatal-warnings .`"
- dart: "2.4.0"
+ name: "SDK: 2.7.0; PKGS: pkgs/test, pkgs/test_api, pkgs/test_core; TASKS: `dartanalyzer --fatal-warnings .`"
+ dart: "2.7.0"
os: linux
env: PKGS="pkgs/test pkgs/test_api pkgs/test_core"
script: ./tool/travis.sh dartanalyzer_1
diff --git a/pkgs/test/CHANGELOG.md b/pkgs/test/CHANGELOG.md
index 8483e77..4bd7b5f 100644
--- a/pkgs/test/CHANGELOG.md
+++ b/pkgs/test/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 1.14.0
+
+* Drop the `package_resolver` dependency for the `package_config` dependency
+ which is lower level.
+
## 1.13.0
* Enable asserts in code running through `spawnHybrid` APIs.
diff --git a/pkgs/test/lib/src/runner/browser/platform.dart b/pkgs/test/lib/src/runner/browser/platform.dart
index 0fff1ed..75c8eb0 100644
--- a/pkgs/test/lib/src/runner/browser/platform.dart
+++ b/pkgs/test/lib/src/runner/browser/platform.dart
@@ -9,7 +9,6 @@
import 'package:async/async.dart';
import 'package:http_multi_server/http_multi_server.dart';
-import 'package:package_resolver/package_resolver.dart';
import 'package:path/path.dart' as p;
import 'package:pool/pool.dart';
import 'package:shelf/shelf.dart' as shelf;
@@ -37,6 +36,7 @@
import 'package:test_core/src/runner/plugin/customizable_platform.dart'; // ignore: implementation_imports
import '../executable_settings.dart';
+import '../../util/package_map.dart';
import '../../util/path_handler.dart';
import '../../util/one_off_handler.dart';
import 'browser_manager.dart';
@@ -348,8 +348,9 @@
if (getSourceMap && !suiteConfig.jsTrace) {
_mappers[path] = JSStackTraceMapper(await utf8.decodeStream(response),
mapUrl: url,
- packageResolver: SyncPackageResolver.root('packages'),
- sdkRoot: p.toUri('packages/\$sdk'));
+ sdkRoot: p.toUri('packages/\$sdk'),
+ packageMap:
+ (await currentPackageConfig).toPackagesDirPackageMap());
return;
}
@@ -410,8 +411,8 @@
var mapPath = jsPath + '.map';
_mappers[dartPath] = JSStackTraceMapper(File(mapPath).readAsStringSync(),
mapUrl: p.toUri(mapPath),
- packageResolver: await PackageResolver.current.asSync,
- sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'));
+ sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'),
+ packageMap: (await currentPackageConfig).toPackageMap());
});
}
diff --git a/pkgs/test/lib/src/runner/node/platform.dart b/pkgs/test/lib/src/runner/node/platform.dart
index e8ba74c..bea9aa9 100644
--- a/pkgs/test/lib/src/runner/node/platform.dart
+++ b/pkgs/test/lib/src/runner/node/platform.dart
@@ -7,9 +7,9 @@
import 'dart:convert';
import 'package:async/async.dart';
+import 'package:package_config/package_config.dart';
import 'package:multi_server_socket/multi_server_socket.dart';
import 'package:node_preamble/preamble.dart' as preamble;
-import 'package:package_resolver/package_resolver.dart';
import 'package:path/path.dart' as p;
import 'package:stream_channel/stream_channel.dart';
import 'package:yaml/yaml.dart';
@@ -32,6 +32,7 @@
import 'package:test_core/src/runner/plugin/platform_helpers.dart'; // ignore: implementation_imports
import '../executable_settings.dart';
+import '../../util/package_map.dart';
/// A platform that loads tests in Node.js processes.
class NodePlatform extends PlatformPlugin
@@ -172,8 +173,8 @@
var mapPath = jsPath + '.map';
mapper = JSStackTraceMapper(await File(mapPath).readAsString(),
mapUrl: p.toUri(mapPath),
- packageResolver: await PackageResolver.current.asSync,
- sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'));
+ sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'),
+ packageMap: (await currentPackageConfig).toPackageMap());
}
return Pair(await _startProcess(runtime, jsPath, socketPort), mapper);
@@ -191,12 +192,11 @@
var jsPath = p.join(precompiledPath, '$testPath.node_test.dart.js');
if (!suiteConfig.jsTrace) {
var mapPath = jsPath + '.map';
- var resolver = await SyncPackageResolver.loadConfig(
- p.toUri(p.join(precompiledPath, '.packages')));
mapper = JSStackTraceMapper(await File(mapPath).readAsString(),
mapUrl: p.toUri(mapPath),
- packageResolver: resolver,
- sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'));
+ sdkRoot: Uri.parse('org-dartlang-sdk:///sdk'),
+ packageMap: (await findPackageConfig(Directory(precompiledPath)))
+ .toPackageMap());
}
return Pair(await _startProcess(runtime, jsPath, socketPort), mapper);
@@ -220,8 +220,8 @@
var mapUrl = url.replace(path: url.path + '.map');
mapper = JSStackTraceMapper(await _get(mapUrl, testPath),
mapUrl: mapUrl,
- packageResolver: SyncPackageResolver.root('packages'),
- sdkRoot: p.toUri('packages/\$sdk'));
+ sdkRoot: p.toUri('packages/\$sdk'),
+ packageMap: (await currentPackageConfig).toPackagesDirPackageMap());
}
return Pair(await _startProcess(runtime, jsPath, socketPort), mapper);
diff --git a/pkgs/test/lib/src/util/package_map.dart b/pkgs/test/lib/src/util/package_map.dart
new file mode 100644
index 0000000..948b6a6
--- /dev/null
+++ b/pkgs/test/lib/src/util/package_map.dart
@@ -0,0 +1,26 @@
+// 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:isolate';
+
+import 'package:package_config/package_config.dart';
+
+/// The [PackageConfig] parsed from the current isolates package config file.
+final Future<PackageConfig> currentPackageConfig = () async {
+ return loadPackageConfigUri(await Isolate.packageConfig);
+}();
+
+/// Adds methods to convert to a package map on [PackageConfig].
+extension PackageMap on PackageConfig {
+ /// A package map exactly matching the current package config
+ Map<String, Uri> toPackageMap() =>
+ {for (var package in packages) package.name: package.packageUriRoot};
+
+ /// A package map with all the current packages but where the uris are all
+ /// of the form 'packages/${package.name}'.
+ Map<String, Uri> toPackagesDirPackageMap() => {
+ for (var package in packages)
+ package.name: Uri.parse('packages/${package.name}')
+ };
+}
diff --git a/pkgs/test/mono_pkg.yaml b/pkgs/test/mono_pkg.yaml
index 1848903..ef401af 100644
--- a/pkgs/test/mono_pkg.yaml
+++ b/pkgs/test/mono_pkg.yaml
@@ -9,7 +9,7 @@
dart: dev
- group:
- dartanalyzer: --fatal-warnings .
- dart: 2.4.0
+ dart: 2.7.0
- unit_test:
- command: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis -x phantomjs --total-shards 5 --shard-index 0
- command: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis -x phantomjs --total-shards 5 --shard-index 1
diff --git a/pkgs/test/pubspec.yaml b/pkgs/test/pubspec.yaml
index 9ae588e..548edca 100644
--- a/pkgs/test/pubspec.yaml
+++ b/pkgs/test/pubspec.yaml
@@ -1,15 +1,15 @@
name: test
-version: 1.13.0
+version: 1.14.0
description: A full featured library for writing and running Dart tests.
homepage: https://github.com/dart-lang/test/blob/master/pkgs/test
environment:
- sdk: '>=2.4.0 <3.0.0'
+ sdk: '>=2.7.0 <3.0.0'
dependencies:
- analyzer: ">=0.36.0 <0.40.0"
+ analyzer: '>=0.36.0 <0.40.0'
async: ^2.0.0
- boolean_selector: ">=1.0.0 <3.0.0"
+ boolean_selector: '>=1.0.0 <3.0.0'
coverage: ^0.13.4
http: ^0.12.0
http_multi_server: ^2.0.0
@@ -17,7 +17,7 @@
js: ^0.6.0
multi_server_socket: ^1.0.0
node_preamble: ^1.3.0
- package_resolver: ^1.0.0
+ package_config: ^1.9.0
path: ^1.2.0
pedantic: ^1.1.0
pool: ^1.3.0
@@ -27,14 +27,14 @@
shelf_web_socket: ^0.2.0
source_span: ^1.4.0
stack_trace: ^1.9.0
- stream_channel: ">=1.7.0 <3.0.0"
+ stream_channel: '>=1.7.0 <3.0.0'
typed_data: ^1.0.0
web_socket_channel: ^1.0.0
webkit_inspection_protocol: ^0.5.0
yaml: ^2.0.0
# Use an exact version until the test_api and test_core package are stable.
test_api: 0.2.15
- test_core: 0.3.1
+ test_core: 0.3.2
dev_dependencies:
fake_async: ^1.0.0
diff --git a/pkgs/test/test/io.dart b/pkgs/test/test/io.dart
index 0d92192..abbb690 100644
--- a/pkgs/test/test/io.dart
+++ b/pkgs/test/test/io.dart
@@ -4,8 +4,8 @@
import 'dart:async';
import 'dart:io';
+import 'dart:isolate';
-import 'package:package_resolver/package_resolver.dart';
import 'package:path/path.dart' as p;
import 'package:test_descriptor/test_descriptor.dart' as d;
import 'package:test_process/test_process.dart';
@@ -13,7 +13,9 @@
import 'package:test/test.dart';
/// The path to the root directory of the `test` package.
-final Future<String> packageDir = PackageResolver.current.packagePath('test');
+final Future<String> packageDir =
+ Isolate.resolvePackageUri(Uri(scheme: 'package', path: 'test/'))
+ .then((uri) => p.dirname(uri.path));
/// The path to the `pub` executable in the current Dart SDK.
final _pubPath = p.absolute(p.join(p.dirname(Platform.resolvedExecutable),
@@ -95,7 +97,7 @@
var allArgs = <String>[
...Platform.executableArguments.where((arg) =>
!arg.startsWith('--package-root=') && !arg.startsWith('--packages=')),
- await PackageResolver.current.processArgument,
+ '--packages=${await Isolate.packageConfig}',
...args
];
diff --git a/pkgs/test/test/runner/precompiled_test.dart b/pkgs/test/test/runner/precompiled_test.dart
index 6401195..b324e2d 100644
--- a/pkgs/test/test/runner/precompiled_test.dart
+++ b/pkgs/test/test/runner/precompiled_test.dart
@@ -5,15 +5,17 @@
@TestOn('vm')
import 'dart:async';
import 'dart:io';
+import 'dart:isolate';
import 'package:node_preamble/preamble.dart' as preamble;
-import 'package:package_resolver/package_resolver.dart';
+import 'package:package_config/package_config.dart';
import 'package:path/path.dart' as p;
import 'package:test_descriptor/test_descriptor.dart' as d;
import 'package:test_process/test_process.dart';
import 'package:test_core/src/util/io.dart';
import 'package:test/test.dart';
+import 'package:test/src/util/package_map.dart';
import '../io.dart';
@@ -50,7 +52,7 @@
var dart2js = await TestProcess.start(
p.join(sdkDir, 'bin', 'dart2js'),
[
- await PackageResolver.current.processArgument,
+ '--packages=${await Isolate.packageConfig}',
'to_precompile.dart',
'--out=precompiled/test.dart.browser_test.dart.js'
],
@@ -107,7 +109,7 @@
var dart2js = await TestProcess.start(
p.join(sdkDir, 'bin', 'dart2js'),
[
- await PackageResolver.current.processArgument,
+ '--packages=${await Isolate.packageConfig}',
p.join('test', 'test.dart'),
'--out=$jsPath',
],
@@ -232,10 +234,18 @@
}
Future<Null> _writePackagesFile() async {
- var currentPackages = await PackageResolver.current.packageConfigMap;
- var packagesFileContent = StringBuffer();
- currentPackages.forEach((package, location) {
- packagesFileContent.writeln('$package:$location');
- });
- await d.file('.packages', packagesFileContent.toString()).create();
+ var config = await findPackageConfig(Directory.current);
+ // TODO: remove try/catch when this issue is resolved:
+ // https://github.com/dart-lang/package_config/issues/66
+ try {
+ await savePackageConfig(config, Directory(d.sandbox));
+ } catch (_) {
+ // If it fails, just write a `.packages` file.
+ var packageMap = config.toPackageMap();
+ var packagesFileContent = StringBuffer();
+ packageMap.forEach((package, location) {
+ packagesFileContent.writeln('$package:$location');
+ });
+ await d.file('.packages', '$packagesFileContent').create();
+ }
}
diff --git a/pkgs/test_api/mono_pkg.yaml b/pkgs/test_api/mono_pkg.yaml
index 5f08191..4a2bb76 100644
--- a/pkgs/test_api/mono_pkg.yaml
+++ b/pkgs/test_api/mono_pkg.yaml
@@ -1,13 +1,13 @@
stages:
- - analyze_and_format:
- - group:
- - dartfmt: sdk
- - dartanalyzer: --fatal-infos --fatal-warnings .
- dart: dev
- - group:
- - dartanalyzer: --fatal-warnings .
- dart: 2.4.0
- - unit_test:
- - group:
- - test: --preset travis
- dart: dev
+ - analyze_and_format:
+ - group:
+ - dartfmt: sdk
+ - dartanalyzer: --fatal-infos --fatal-warnings .
+ dart: dev
+ - group:
+ - dartanalyzer: --fatal-warnings .
+ dart: 2.7.0
+ - unit_test:
+ - group:
+ - test: --preset travis
+ dart: dev
diff --git a/pkgs/test_api/pubspec.yaml b/pkgs/test_api/pubspec.yaml
index 8b34a9c..bd724e7 100644
--- a/pkgs/test_api/pubspec.yaml
+++ b/pkgs/test_api/pubspec.yaml
@@ -4,7 +4,7 @@
homepage: https://github.com/dart-lang/test/blob/master/pkgs/test_api
environment:
- sdk: ">=2.4.0 <3.0.0"
+ sdk: ">=2.7.0 <3.0.0"
dependencies:
async: ^2.0.0
diff --git a/pkgs/test_core/CHANGELOG.md b/pkgs/test_core/CHANGELOG.md
index 8bff6c2..dcb572a 100644
--- a/pkgs/test_core/CHANGELOG.md
+++ b/pkgs/test_core/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.2
+
+* Drop the `package_resolver` dependency.
+
## 0.3.1
* Support latest `package:vm_service`.
diff --git a/pkgs/test_core/lib/src/runner/compiler_pool.dart b/pkgs/test_core/lib/src/runner/compiler_pool.dart
index 7da937a..7556ab5 100644
--- a/pkgs/test_core/lib/src/runner/compiler_pool.dart
+++ b/pkgs/test_core/lib/src/runner/compiler_pool.dart
@@ -5,9 +5,9 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
+import 'dart:isolate';
import 'package:async/async.dart';
-import 'package:package_resolver/package_resolver.dart';
import 'package:path/path.dart' as p;
import 'package:pool/pool.dart';
@@ -67,7 +67,7 @@
'--enable-asserts',
wrapperPath,
'--out=$jsPath',
- await PackageResolver.current.processArgument,
+ '--packages=${await Isolate.packageConfig}',
..._extraArgs,
...suiteConfig.dart2jsArgs
];
diff --git a/pkgs/test_core/lib/src/util/stack_trace_mapper.dart b/pkgs/test_core/lib/src/util/stack_trace_mapper.dart
index 2d2b0bf..4f4a821 100644
--- a/pkgs/test_core/lib/src/util/stack_trace_mapper.dart
+++ b/pkgs/test_core/lib/src/util/stack_trace_mapper.dart
@@ -2,7 +2,6 @@
// 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 'package:package_resolver/package_resolver.dart';
import 'package:source_map_stack_trace/source_map_stack_trace.dart' as mapper;
import 'package:source_maps/source_maps.dart';
import 'package:test_api/src/util/stack_trace_mapper.dart'; // ignore: implementation_imports
@@ -14,8 +13,8 @@
/// This is initialized lazily in `mapStackTrace()`.
Mapping _mapping;
- /// The package resolution information passed to dart2js.
- final SyncPackageResolver _packageResolver;
+ /// The same package resolution information as was passed to dart2js.
+ final Map<String, Uri> _packageMap;
/// The URL of the SDK root from which dart2js loaded its sources.
final Uri _sdkRoot;
@@ -27,9 +26,9 @@
final Uri _mapUrl;
JSStackTraceMapper(this._mapContents,
- {Uri mapUrl, SyncPackageResolver packageResolver, Uri sdkRoot})
+ {Uri mapUrl, Map<String, Uri> packageMap, Uri sdkRoot})
: _mapUrl = mapUrl,
- _packageResolver = packageResolver,
+ _packageMap = packageMap,
_sdkRoot = sdkRoot;
/// Converts [trace] into a Dart stack trace.
@@ -37,7 +36,7 @@
StackTrace mapStackTrace(StackTrace trace) {
_mapping ??= parseExtended(_mapContents, mapUrl: _mapUrl);
return mapper.mapStackTrace(_mapping, trace,
- packageResolver: _packageResolver, sdkRoot: _sdkRoot);
+ packageMap: _packageMap, sdkRoot: _sdkRoot);
}
/// Returns a Map representation which is suitable for JSON serialization.
@@ -46,9 +45,7 @@
return {
'mapContents': _mapContents,
'sdkRoot': _sdkRoot?.toString(),
- 'packageConfigMap':
- _serializePackageConfigMap(_packageResolver.packageConfigMap),
- 'packageRoot': _packageResolver.packageRoot?.toString(),
+ 'packageConfigMap': _serializePackageConfigMap(_packageMap),
'mapUrl': _mapUrl?.toString(),
};
}
@@ -57,15 +54,12 @@
/// representation.
static StackTraceMapper deserialize(Map serialized) {
if (serialized == null) return null;
- var packageRoot = serialized['packageRoot'] as String ?? '';
+ var deserialized = _deserializePackageConfigMap(
+ (serialized['packageConfigMap'] as Map).cast<String, String>());
+
return JSStackTraceMapper(serialized['mapContents'] as String,
sdkRoot: Uri.parse(serialized['sdkRoot'] as String),
- packageResolver: packageRoot.isNotEmpty
- ? SyncPackageResolver.root(
- Uri.parse(serialized['packageRoot'] as String))
- : SyncPackageResolver.config(_deserializePackageConfigMap(
- (serialized['packageConfigMap'] as Map)
- .cast<String, String>())),
+ packageMap: deserialized,
mapUrl: Uri.parse(serialized['mapUrl'] as String));
}
diff --git a/pkgs/test_core/mono_pkg.yaml b/pkgs/test_core/mono_pkg.yaml
index 203675b..f6da98d 100644
--- a/pkgs/test_core/mono_pkg.yaml
+++ b/pkgs/test_core/mono_pkg.yaml
@@ -6,4 +6,4 @@
dart: dev
- group:
- dartanalyzer: --fatal-warnings .
- dart: 2.4.0
+ dart: 2.7.0
diff --git a/pkgs/test_core/pubspec.yaml b/pkgs/test_core/pubspec.yaml
index f98905f..6646ea8 100644
--- a/pkgs/test_core/pubspec.yaml
+++ b/pkgs/test_core/pubspec.yaml
@@ -1,10 +1,10 @@
name: test_core
-version: 0.3.1
+version: 0.3.2
description: A basic library for writing tests and running them on the VM.
homepage: https://github.com/dart-lang/test/blob/master/pkgs/test_core
environment:
- sdk: ">=2.4.0 <3.0.0"
+ sdk: ">=2.7.0 <3.0.0"
dependencies:
analyzer: ">=0.36.0 <0.40.0"
@@ -16,11 +16,10 @@
glob: ^1.0.0
io: ^0.3.0
meta: ^1.1.5
- package_resolver: ^1.0.0
path: ^1.2.0
pedantic: ^1.0.0
pool: ^1.3.0
- source_map_stack_trace: ^1.1.4
+ source_map_stack_trace: ^2.0.0
source_maps: ^0.10.2
source_span: ^1.4.0
stack_trace: ^1.9.0