blob: 16df364de2642182ecde0206117dcd27e9088ef0 [file] [log] [blame]
// 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() {
forBothPubGetAndUpgrade((command) {
test("implicitly constrains it to versions pub supports", () async {
await servePackages((builder) {
builder.serve("barback", current("barback"));
builder.serve("stack_trace", previous("stack_trace"));
builder.serve("stack_trace", current("stack_trace"));
builder.serve("stack_trace", nextPatch("stack_trace"));
builder.serve("stack_trace", max("stack_trace"));
builder.serve("source_span", current("source_span"));
builder.serve("async", current("async"));
});
await d.appDir({"barback": "any"}).create();
await pubCommand(command);
await d.appPackagesFile({
"async": current("async"),
"barback": current("barback"),
"source_span": current("source_span"),
"stack_trace": nextPatch("stack_trace")
}).validate();
});
test(
"pub's implicit constraint uses the same source and "
"description as a dependency override", () async {
await servePackages((builder) {
builder.serve("barback", current("barback"));
builder.serve("stack_trace", nextPatch("stack_trace"));
builder.serve("source_span", current("source_span"));
builder.serve("async", current("async"));
});
await d.dir("stack_trace", [
d.libDir("stack_trace", 'stack_trace ${current("stack_trace")}'),
d.libPubspec("stack_trace", current("stack_trace"))
]).create();
await d.dir(appPath, [
d.pubspec({
"name": "myapp",
"dependencies": {"barback": "any"},
"dependency_overrides": {
"stack_trace": {"path": "../stack_trace"},
}
})
]).create();
await pubCommand(command);
// Validate that we're using the path dependency version of stack_trace
// rather than the hosted version.
await d.appPackagesFile({
"async": current("async"),
"barback": current("barback"),
"source_span": current("source_span"),
"stack_trace": "../stack_trace"
}).validate();
});
test(
"doesn't add a constraint if barback isn't in the package "
"graph", () async {
await servePackages((builder) {
builder.serve("stack_trace", previous("stack_trace"));
builder.serve("stack_trace", current("stack_trace"));
builder.serve("stack_trace", nextPatch("stack_trace"));
builder.serve("stack_trace", max("stack_trace"));
builder.serve("source_span", current("source_span"));
builder.serve("async", current("async"));
});
await d.appDir({"stack_trace": "any"}).create();
await pubCommand(command);
await d.appPackagesFile({"stack_trace": max("stack_trace")}).validate();
});
});
test(
"unlocks if the locked version doesn't meet pub's "
"constraint", () async {
await servePackages((builder) {
builder.serve("barback", current("barback"));
builder.serve("stack_trace", previous("stack_trace"));
builder.serve("stack_trace", current("stack_trace"));
builder.serve("source_span", current("source_span"));
builder.serve("async", current("async"));
});
await d.appDir({"barback": "any"}).create();
// Hand-create a lockfile to pin the package to an older version.
await createLockFile("myapp", hosted: {
"barback": current("barback"),
"stack_trace": previous("stack_trace")
});
await pubGet();
// It should be upgraded.
await d.appPackagesFile({
"async": current("async"),
"barback": current("barback"),
"source_span": current("source_span"),
"stack_trace": current("stack_trace")
}).validate();
});
}
String current(String packageName) =>
barback.pubConstraints[packageName].min.toString();
String previous(String packageName) {
var constraint = barback.pubConstraints[packageName];
return new Version(constraint.min.major, constraint.min.minor - 1, 0)
.toString();
}
String nextPatch(String packageName) =>
barback.pubConstraints[packageName].min.nextPatch.toString();
String max(String packageName) =>
barback.pubConstraints[packageName].max.toString();