Index: sdk/lib/_internal/pub/test/validator/dependency_test.dart |
diff --git a/sdk/lib/_internal/pub/test/validator/dependency_test.dart b/sdk/lib/_internal/pub/test/validator/dependency_test.dart |
index 53dfff98294307f7ef7b857bd48341266a2fcb9e..8c53c744c9ef64482df360a1ac31579661b12f85 100644 |
--- a/sdk/lib/_internal/pub/test/validator/dependency_test.dart |
+++ b/sdk/lib/_internal/pub/test/validator/dependency_test.dart |
@@ -84,7 +84,7 @@ main() { |
"pre-1.0.0", () { |
setUpDependency({'git': 'git://github.com/dart-lang/foo'}, |
hostedVersions: ["0.0.1", "0.0.2"]); |
- expectDependencyValidationWarning(' foo: ">=0.0.2 <0.0.3"'); |
+ expectDependencyValidationWarning(' foo: ">=0.0.2 <0.1.0"'); |
}); |
}); |
@@ -127,7 +127,7 @@ main() { |
"pre-1.0.0", () { |
setUpDependency({'path': path.join(sandboxDir, 'foo')}, |
hostedVersions: ["0.0.1", "0.0.2"]); |
- expectDependencyValidationError(' foo: ">=0.0.2 <0.0.3"'); |
+ expectDependencyValidationError(' foo: ">=0.0.2 <0.1.0"'); |
}); |
}); |
@@ -233,9 +233,152 @@ main() { |
})) |
]).create(); |
- expectDependencyValidationWarning(' foo: ">=0.1.2 <0.1.3"'); |
+ expectDependencyValidationWarning(' foo: ">=0.1.2 <0.2.0"'); |
}); |
}); |
}); |
+ |
+ integration('with a single-version dependency and it should suggest a ' |
+ 'constraint based on the version', () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "1.2.3" |
+ }) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">=1.2.3 <2.0.0"'); |
+ }); |
+ |
+ group('has a dependency without a lower bound', () { |
+ group('and it should not suggest a version', () { |
+ integration("if there's no lockfile", () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "<3.0.0" |
+ }) |
+ ]).create(); |
+ |
+ expect(schedulePackageValidation(dependency), completion( |
+ pairOf(isEmpty, everyElement(isNot(contains("\n foo:")))))); |
+ }); |
+ |
+ integration("if the lockfile doesn't have an entry for the " |
+ "dependency", () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "<3.0.0" |
+ }), |
+ d.file("pubspec.lock", JSON.encode({ |
+ 'packages': { |
+ 'bar': { |
+ 'version': '1.2.3', |
+ 'source': 'hosted', |
+ 'description': { |
+ 'name': 'bar', |
+ 'url': 'http://pub.dartlang.org' |
+ } |
+ } |
+ } |
+ })) |
+ ]).create(); |
+ |
+ expect(schedulePackageValidation(dependency), completion( |
+ pairOf(isEmpty, everyElement(isNot(contains("\n foo:")))))); |
+ }); |
+ }); |
+ |
+ group('with a lockfile', () { |
+ integration('and it should suggest a constraint based on the locked ' |
+ 'version', () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "<3.0.0" |
+ }), |
+ d.file("pubspec.lock", JSON.encode({ |
+ 'packages': { |
+ 'foo': { |
+ 'version': '1.2.3', |
+ 'source': 'hosted', |
+ 'description': { |
+ 'name': 'foo', |
+ 'url': 'http://pub.dartlang.org' |
+ } |
+ } |
+ } |
+ })) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">=1.2.3 <3.0.0"'); |
+ }); |
+ |
+ integration('and it should preserve the upper-bound operator', () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "<=3.0.0" |
+ }), |
+ d.file("pubspec.lock", JSON.encode({ |
+ 'packages': { |
+ 'foo': { |
+ 'version': '1.2.3', |
+ 'source': 'hosted', |
+ 'description': { |
+ 'name': 'foo', |
+ 'url': 'http://pub.dartlang.org' |
+ } |
+ } |
+ } |
+ })) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">=1.2.3 <=3.0.0"'); |
+ }); |
+ |
+ integration('and it should expand the suggested constraint if the ' |
+ 'locked version matches the upper bound', () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": "<=1.2.3" |
+ }), |
+ d.file("pubspec.lock", JSON.encode({ |
+ 'packages': { |
+ 'foo': { |
+ 'version': '1.2.3', |
+ 'source': 'hosted', |
+ 'description': { |
+ 'name': 'foo', |
+ 'url': 'http://pub.dartlang.org' |
+ } |
+ } |
+ } |
+ })) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">=1.2.3 <2.0.0"'); |
+ }); |
+ }); |
+ }); |
+ |
+ group('with a dependency without an upper bound', () { |
+ integration('and it should suggest a constraint based on the lower bound', |
+ () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": ">=1.2.3" |
+ }) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">=1.2.3 <2.0.0"'); |
+ }); |
+ |
+ integration('and it should preserve the lower-bound operator', () { |
+ d.dir(appPath, [ |
+ d.libPubspec("test_pkg", "1.0.0", deps: { |
+ "foo": ">1.2.3" |
+ }) |
+ ]).create(); |
+ |
+ expectDependencyValidationWarning(' foo: ">1.2.3 <2.0.0"'); |
+ }); |
+ }); |
}); |
} |