| // Copyright (c) 2013, 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 'package:test/test.dart'; |
| |
| import 'package:pub/src/barback.dart' as barback; |
| import 'package:pub_semver/pub_semver.dart'; |
| |
| import 'descriptor.dart' as d; |
| import 'test_pub.dart'; |
| |
| main() { |
| var constraint = barback.pubConstraints["barback"]; |
| var current = constraint.min.toString(); |
| var previous = |
| new Version(constraint.min.major, constraint.min.minor - 1, 0).toString(); |
| var nextPatch = constraint.min.nextPatch.toString(); |
| var max = constraint.max.toString(); |
| |
| var sourceSpanVersion = barback.pubConstraints["source_span"].min.toString(); |
| var stackTraceVersion = barback.pubConstraints["stack_trace"].min.toString(); |
| var asyncVersion = barback.pubConstraints["async"].min.toString(); |
| |
| forBothPubGetAndUpgrade((command) { |
| test("implicitly constrains barback to versions pub supports", () async { |
| await servePackages((builder) { |
| builder.serve("barback", previous); |
| builder.serve("barback", current); |
| builder.serve("barback", nextPatch); |
| builder.serve("barback", max); |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.appDir({"barback": "any"}).create(); |
| |
| await pubCommand(command); |
| |
| await d.appPackagesFile({ |
| "async": asyncVersion, |
| "barback": nextPatch, |
| "source_span": sourceSpanVersion, |
| "stack_trace": stackTraceVersion |
| }).validate(); |
| }); |
| |
| test("discovers transitive dependency on barback", () async { |
| await servePackages((builder) { |
| builder.serve("barback", previous); |
| builder.serve("barback", current); |
| builder.serve("barback", nextPatch); |
| builder.serve("barback", max); |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.dir("foo", [ |
| d.libDir("foo", "foo 0.0.1"), |
| d.libPubspec("foo", "0.0.1", deps: {"barback": "any"}) |
| ]).create(); |
| |
| await d.appDir({ |
| "foo": {"path": "../foo"} |
| }).create(); |
| |
| await pubCommand(command); |
| |
| await d.appPackagesFile({ |
| "async": asyncVersion, |
| "barback": nextPatch, |
| "source_span": sourceSpanVersion, |
| "stack_trace": stackTraceVersion, |
| "foo": "../foo" |
| }).validate(); |
| }); |
| |
| test( |
| "pub's implicit constraint uses the same source and " |
| "description as a dependency override", () async { |
| await servePackages((builder) { |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.dir('barback', [ |
| d.libDir('barback', 'barback $current'), |
| d.libPubspec('barback', current), |
| ]).create(); |
| |
| await d.dir(appPath, [ |
| d.pubspec({ |
| "name": "myapp", |
| "dependency_overrides": { |
| "barback": {"path": "../barback"} |
| } |
| }) |
| ]).create(); |
| |
| await pubCommand(command); |
| |
| await d.appPackagesFile({ |
| "async": asyncVersion, |
| "barback": "../barback", |
| "source_span": sourceSpanVersion, |
| "stack_trace": stackTraceVersion, |
| }).validate(); |
| }); |
| }); |
| |
| test("unlock if the locked version doesn't meet pub's constraint", () async { |
| await servePackages((builder) { |
| builder.serve("barback", previous); |
| builder.serve("barback", current); |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.appDir({"barback": "any"}).create(); |
| // Hand-create a lockfile to pin barback to an older version. |
| |
| await createLockFile("myapp", hosted: {"barback": previous}); |
| |
| await pubGet(); |
| // It should be upgraded. |
| |
| await d.appPackagesFile({ |
| "async": asyncVersion, |
| "barback": current, |
| "source_span": sourceSpanVersion, |
| "stack_trace": stackTraceVersion, |
| }).validate(); |
| }); |
| |
| test( |
| "includes pub in the error if a solve failed because there " |
| "is no version available", () async { |
| await servePackages((builder) { |
| builder.serve("barback", previous); |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.appDir({"barback": "any"}).create(); |
| |
| await pubGet(error: """ |
| Package barback has no versions that match >=$current <$max derived from: |
| - myapp depends on version any |
| - pub itself depends on version >=$current <$max"""); |
| }); |
| |
| test( |
| "includes pub in the error if a solve failed because there " |
| "is a disjoint constraint", () async { |
| await servePackages((builder) { |
| builder.serve("barback", previous); |
| builder.serve("barback", current); |
| builder.serve("source_span", sourceSpanVersion); |
| builder.serve("stack_trace", stackTraceVersion); |
| builder.serve("async", asyncVersion); |
| }); |
| |
| await d.appDir({"barback": previous}).create(); |
| |
| await pubGet(error: """ |
| Incompatible version constraints on barback: |
| - myapp depends on version $previous |
| - pub itself depends on version >=$current <$max"""); |
| }); |
| } |