Index: sdk/lib/_internal/pub/test/version_solver_test.dart |
diff --git a/sdk/lib/_internal/pub/test/version_solver_test.dart b/sdk/lib/_internal/pub/test/version_solver_test.dart |
index ae2a8a9ba8771c22d3114ba3e9145d4f448fffca..f3a4d9214cff63c4101a74614b7d7e54c036d697 100644 |
--- a/sdk/lib/_internal/pub/test/version_solver_test.dart |
+++ b/sdk/lib/_internal/pub/test/version_solver_test.dart |
@@ -40,6 +40,7 @@ main() { |
group('bad source', badSource); |
group('backtracking', backtracking); |
group('SDK constraint', sdkConstraint); |
+ group('pre-release', prerelease); |
} |
void basicGraph() { |
@@ -800,6 +801,60 @@ sdkConstraint() { |
}, useBleedingEdgeSdkVersion: true); |
} |
+void prerelease() { |
+ testResolve('prefer stable versions over unstable', { |
+ 'myapp 0.0.0': { |
+ 'a': 'any' |
+ }, |
+ 'a 1.0.0': {}, |
+ 'a 1.1.0-dev': {}, |
+ 'a 2.0.0-dev': {}, |
+ 'a 3.0.0-dev': {} |
+ }, result: { |
+ 'myapp from root': '0.0.0', |
+ 'a': '1.0.0' |
+ }); |
+ |
+ testResolve('use latest allowed prerelease if no stable versions match', { |
+ 'myapp 0.0.0': { |
+ 'a': '<2.0.0' |
+ }, |
+ 'a 1.0.0-dev': {}, |
+ 'a 1.1.0-dev': {}, |
+ 'a 2.0.0-dev': {}, |
+ 'a 3.0.0': {} |
+ }, result: { |
+ 'myapp from root': '0.0.0', |
+ 'a': '2.0.0-dev' |
+ }); |
+ |
+ testResolve('use an earlier stable version on a < constraint', { |
+ 'myapp 0.0.0': { |
+ 'a': '<2.0.0' |
+ }, |
+ 'a 1.0.0': {}, |
+ 'a 1.1.0': {}, |
+ 'a 2.0.0-dev': {}, |
+ 'a 2.0.0': {} |
+ }, result: { |
+ 'myapp from root': '0.0.0', |
+ 'a': '1.1.0' |
+ }); |
+ |
+ testResolve('prefer a stable version even if constraint mentions unstable', { |
+ 'myapp 0.0.0': { |
+ 'a': '<=2.0.0-dev' |
+ }, |
+ 'a 1.0.0': {}, |
+ 'a 1.1.0': {}, |
+ 'a 2.0.0-dev': {}, |
+ 'a 2.0.0': {} |
+ }, result: { |
+ 'myapp from root': '0.0.0', |
+ 'a': '1.1.0' |
+ }); |
+} |
+ |
testResolve(description, packages, { |
lockfile, result, FailMatcherBuilder error, int maxTries, |
bool useBleedingEdgeSdkVersion}) { |