| Index: utils/tests/pub/version_solver_test.dart
|
| diff --git a/utils/tests/pub/version_solver_test.dart b/utils/tests/pub/version_solver_test.dart
|
| index 5ea2b75ab889ec8100d1e5c61de5baef6177155f..6c0626f6573bc06350de06d7bc79f4b27e61a834 100644
|
| --- a/utils/tests/pub/version_solver_test.dart
|
| +++ b/utils/tests/pub/version_solver_test.dart
|
| @@ -19,11 +19,52 @@ import '../../pub/version.dart';
|
| import '../../pub/version_solver.dart';
|
| import '../../../pkg/unittest/lib/unittest.dart';
|
|
|
| -final noVersion = 'no version';
|
| -final disjointConstraint = 'disjoint';
|
| -final sourceMismatch = 'source mismatch';
|
| -final descriptionMismatch = 'description mismatch';
|
| -final couldNotSolve = 'unsolved';
|
| +Matcher noVersion(List<String> packages) {
|
| + return predicate((x) {
|
| + if (x is! NoVersionException) return false;
|
| +
|
| + // Make sure the error string mentions the conflicting dependers.
|
| + var message = x.toString();
|
| + return packages.every((package) => message.contains(package));
|
| + }, "is a NoVersionException");
|
| +}
|
| +
|
| +Matcher disjointConstraint(List<String> packages) {
|
| + return predicate((x) {
|
| + if (x is! DisjointConstraintException) return false;
|
| +
|
| + // Make sure the error string mentions the conflicting dependers.
|
| + var message = x.toString();
|
| + return packages.every((package) => message.contains(package));
|
| + }, "is a DisjointConstraintException");
|
| +}
|
| +
|
| +Matcher descriptionMismatch(String package1, String package2) {
|
| + return predicate((x) {
|
| + if (x is! DescriptionMismatchException) return false;
|
| +
|
| + // Make sure the error string mentions the conflicting dependers.
|
| + if (!x.toString().contains(package1)) return false;
|
| + if (!x.toString().contains(package2)) return false;
|
| +
|
| + return true;
|
| + }, "is a DescriptionMismatchException");
|
| +}
|
| +
|
| +final couldNotSolve = predicate((x) => x is CouldNotSolveException,
|
| + "is a CouldNotSolveException");
|
| +
|
| +Matcher sourceMismatch(String package1, String package2) {
|
| + return predicate((x) {
|
| + if (x is! SourceMismatchException) return false;
|
| +
|
| + // Make sure the error string mentions the conflicting dependers.
|
| + if (!x.toString().contains(package1)) return false;
|
| + if (!x.toString().contains(package2)) return false;
|
| +
|
| + return true;
|
| + }, "is a SourceMismatchException");
|
| +}
|
|
|
| MockSource source1;
|
| MockSource source2;
|
| @@ -238,7 +279,7 @@ main() {
|
| 'bar 1.0.0': {
|
| 'myapp from mock2': '>=1.0.0'
|
| }
|
| - }, error: sourceMismatch);
|
| + }, error: sourceMismatch('foo', 'bar'));
|
|
|
| testResolve('dependency back onto root package with wrong version', {
|
| 'myapp 1.0.0': {
|
| @@ -247,7 +288,7 @@ main() {
|
| 'foo 1.0.0': {
|
| 'myapp': '<1.0.0'
|
| }
|
| - }, error: disjointConstraint);
|
| + }, error: disjointConstraint(['foo']));
|
|
|
| testResolve('no version that matches requirement', {
|
| 'myapp 0.0.0': {
|
| @@ -255,7 +296,7 @@ main() {
|
| },
|
| 'foo 2.0.0': {},
|
| 'foo 2.1.3': {}
|
| - }, error: noVersion);
|
| + }, error: noVersion(['myapp']));
|
|
|
| testResolve('no version that matches combined constraint', {
|
| 'myapp 0.0.0': {
|
| @@ -270,7 +311,7 @@ main() {
|
| },
|
| 'shared 2.5.0': {},
|
| 'shared 3.5.0': {}
|
| - }, error: noVersion);
|
| + }, error: noVersion(['foo', 'bar']));
|
|
|
| testResolve('disjoint constraints', {
|
| 'myapp 0.0.0': {
|
| @@ -285,7 +326,7 @@ main() {
|
| },
|
| 'shared 2.0.0': {},
|
| 'shared 4.0.0': {}
|
| - }, error: disjointConstraint);
|
| + }, error: disjointConstraint(['foo', 'bar']));
|
|
|
| testResolve('mismatched descriptions', {
|
| 'myapp 0.0.0': {
|
| @@ -300,7 +341,7 @@ main() {
|
| },
|
| 'shared-x 1.0.0': {},
|
| 'shared-y 1.0.0': {}
|
| - }, error: descriptionMismatch);
|
| + }, error: descriptionMismatch('foo', 'bar'));
|
|
|
| testResolve('mismatched sources', {
|
| 'myapp 0.0.0': {
|
| @@ -315,7 +356,7 @@ main() {
|
| },
|
| 'shared 1.0.0': {},
|
| 'shared 1.0.0 from mock2': {}
|
| - }, error: sourceMismatch);
|
| + }, error: sourceMismatch('foo', 'bar'));
|
|
|
| testResolve('unstable dependency graph', {
|
| 'myapp 0.0.0': {
|
| @@ -331,29 +372,13 @@ main() {
|
| }, error: couldNotSolve);
|
|
|
| // TODO(rnystrom): More stuff to test:
|
| -// - Two packages depend on the same package, but from different sources. Should
|
| -// fail.
|
| // - Depending on a non-existent package.
|
| // - Test that only a certain number requests are sent to the mock source so we
|
| // can keep track of server traffic.
|
| }
|
|
|
| -testResolve(description, packages, {lockfile, result, error}) {
|
| +testResolve(description, packages, {lockfile, result, Matcher error}) {
|
| test(description, () {
|
| - var isNoVersionException = predicate((x)=> x is NoVersionException,
|
| - "is a NoVersionException");
|
| - var isDisjointConstraintException =
|
| - predicate((x)=> x is DisjointConstraintException,
|
| - " is a DisjointConstraintException");
|
| - var isSourceMismatchException =
|
| - predicate((x)=> x is SourceMismatchException,
|
| - "is a SourceMismatchException");
|
| - var isDescriptionMismatchException =
|
| - predicate((x)=> x is DescriptionMismatchException,
|
| - "is a DescriptionMismatchException");
|
| - var isCouldNotSolveException = predicate((x)=> x is CouldNotSolveException,
|
| - "is a CouldNotSolveException");
|
| -
|
| var cache = new SystemCache('.');
|
| source1 = new MockSource('mock1');
|
| source2 = new MockSource('mock2');
|
| @@ -421,17 +446,7 @@ testResolve(description, packages, {lockfile, result, error}) {
|
| }
|
| return result.isEmpty;
|
| }, 'packages to match $result')));
|
| - } else if (error == noVersion) {
|
| - expect(future, throwsA(isNoVersionException));
|
| - } else if (error == disjointConstraint) {
|
| - expect(future, throwsA(isDisjointConstraintException));
|
| - } else if (error == sourceMismatch) {
|
| - expect(future, throwsA(isSourceMismatchException));
|
| - } else if (error == descriptionMismatch) {
|
| - expect(future, throwsA(isDescriptionMismatchException));
|
| - } else if (error == couldNotSolve) {
|
| - expect(future, throwsA(isCouldNotSolveException));
|
| - } else {
|
| + } else if (error != null) {
|
| expect(future, throwsA(error));
|
| }
|
|
|
|
|