| Index: sdk/lib/_internal/pub/test/test_pub.dart
|
| diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
|
| index 6729e0d3b25317894c82083966ac3de1b98351b3..5b499e340aec084550c6962a498bbc94bc8c5720 100644
|
| --- a/sdk/lib/_internal/pub/test/test_pub.dart
|
| +++ b/sdk/lib/_internal/pub/test/test_pub.dart
|
| @@ -74,9 +74,12 @@ Matcher isMinifiedDart2JSOutput =
|
| Matcher isUnminifiedDart2JSOutput =
|
| contains("// The code supports the following hooks");
|
|
|
| -/// The directory containing the version of barback that should be used for this
|
| -/// test.
|
| -String _barbackDir;
|
| +/// A map from package names to paths from which those packages should be loaded
|
| +/// for [createLockFile].
|
| +///
|
| +/// This allows older versions of dependencies than those that exist in the repo
|
| +/// to be used when testing pub.
|
| +Map<String, String> _packageOverrides;
|
|
|
| /// A map from barback versions to the paths of directories in the repo
|
| /// containing them.
|
| @@ -85,6 +88,18 @@ String _barbackDir;
|
| /// versions of barback in third_party.
|
| final _barbackVersions = _findBarbackVersions();
|
|
|
| +/// Some older barback versions require older versions of barback's dependencies
|
| +/// than those that are in the repo.
|
| +///
|
| +/// This is a map from barback version ranges to the dependencies for those
|
| +/// barback versions. Each dependency version listed here should be included in
|
| +/// third_party/pkg.
|
| +final _barbackDeps = {
|
| + new VersionConstraint.parse("<0.15.0"): {
|
| + "source_maps": "0.9.4"
|
| + }
|
| +};
|
| +
|
| /// Populates [_barbackVersions].
|
| Map<Version, String> _findBarbackVersions() {
|
| var versions = {};
|
| @@ -119,7 +134,19 @@ void withBarbackVersions(String versionConstraint, void callback()) {
|
| for (var version in validVersions) {
|
| group("with barback $version", () {
|
| setUp(() {
|
| - _barbackDir = _barbackVersions[version];
|
| + _packageOverrides = {};
|
| + _packageOverrides['barback'] = _barbackVersions[version];
|
| + _barbackDeps.forEach((constraint, deps) {
|
| + if (!constraint.allows(version)) return;
|
| + deps.forEach((packageName, version) {
|
| + _packageOverrides[packageName] = path.join(
|
| + repoRoot, 'third_party', 'pkg', '$packageName-$version');
|
| + });
|
| + });
|
| +
|
| + currentSchedule.onComplete.schedule(() {
|
| + _packageOverrides = null;
|
| + });
|
| });
|
|
|
| callback();
|
| @@ -789,13 +816,14 @@ Iterable<String> pkg, Map<String, String> hosted}) {
|
| if (dependencies.containsKey(package)) return;
|
|
|
| var packagePath;
|
| - if (package == 'barback') {
|
| - if (_barbackDir == null) {
|
| - throw new StateError("createLockFile() can only create a lock file "
|
| - "with a barback dependency within a withBarbackVersions() "
|
| - "block.");
|
| - }
|
| - packagePath = _barbackDir;
|
| + if (package == 'barback' && _packageOverrides == null) {
|
| + throw new StateError("createLockFile() can only create a lock file "
|
| + "with a barback dependency within a withBarbackVersions() "
|
| + "block.");
|
| + }
|
| +
|
| + if (_packageOverrides.containsKey(package)) {
|
| + packagePath = _packageOverrides[package];
|
| } else {
|
| packagePath = path.join(pkgPath, package);
|
| }
|
|
|