Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Unified Diff: utils/tests/pub/version_solver_test.dart

Issue 14298006: Select packages that match SDK constraints. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix an import. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « utils/tests/pub/sdk_constraint_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d53e0a63115a2648fb782c601fe559d470c67261..07f41583ed4d5ddb69b6791b2f746e4c28f2c5ff 100644
--- a/utils/tests/pub/version_solver_test.dart
+++ b/utils/tests/pub/version_solver_test.dart
@@ -12,6 +12,7 @@ import 'package:unittest/unittest.dart';
import '../../pub/lock_file.dart';
import '../../pub/package.dart';
import '../../pub/pubspec.dart';
+import '../../pub/sdk.dart' as sdk;
import '../../pub/source.dart';
import '../../pub/source_registry.dart';
import '../../pub/system_cache.dart';
@@ -28,6 +29,10 @@ bool allowBacktracking;
main() {
initConfig();
+ // Since this test isn't run from the SDK, it can't find the "version" file
+ // to load. Instead, just manually inject a version.
+ sdk.version = new Version(1, 2, 3);
+
for (allowBacktracking in [false, true]) {
group(allowBacktracking ? 'BackTrackingSolver' : 'GreedySolver', () {
group('basic graph', basicGraph);
@@ -38,6 +43,10 @@ main() {
group('backtracking', backtracking);
});
}
+
+ // These tests are only valid with the backtracking solver.
+ allowBacktracking = true;
+ group('SDK constraint', sdkConstraint);
}
void basicGraph() {
@@ -546,6 +555,73 @@ backtracking() {
// ambiguous to nail down which order the backtracker tries solutions.
}
+sdkConstraint() {
+ var badVersion = '0.0.0-nope';
+ var goodVersion = sdk.version.toString();
+
+ testResolve('root matches SDK', {
+ 'myapp 0.0.0': {'sdk': goodVersion }
+ }, result: {
+ 'myapp from root': '0.0.0'
+ });
+
+ testResolve('root does not match SDK', {
+ 'myapp 0.0.0': {'sdk': badVersion }
+ }, error: couldNotSolve);
+
+ testResolve('dependency does not match SDK', {
+ 'myapp 0.0.0': {'foo': 'any'},
+ 'foo 0.0.0': {'sdk': badVersion }
+ }, error: couldNotSolve);
+
+ testResolve('transitive dependency does not match SDK', {
+ 'myapp 0.0.0': {'foo': 'any'},
+ 'foo 0.0.0': {'bar': 'any'},
+ 'bar 0.0.0': {'sdk': badVersion }
+ }, error: couldNotSolve);
+
+ testResolve('selects a dependency version that allows the SDK', {
+ 'myapp 0.0.0': {'foo': 'any'},
+ 'foo 1.0.0': {'sdk': goodVersion },
+ 'foo 2.0.0': {'sdk': goodVersion },
+ 'foo 3.0.0': {'sdk': badVersion },
+ 'foo 4.0.0': {'sdk': badVersion }
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '2.0.0'
+ }, maxTries: 3);
+
+ testResolve('selects a transitive dependency version that allows the SDK', {
+ 'myapp 0.0.0': {'foo': 'any'},
+ 'foo 1.0.0': {'bar': 'any'},
+ 'bar 1.0.0': {'sdk': goodVersion },
+ 'bar 2.0.0': {'sdk': goodVersion },
+ 'bar 3.0.0': {'sdk': badVersion },
+ 'bar 4.0.0': {'sdk': badVersion }
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '1.0.0',
+ 'bar': '2.0.0'
+ }, maxTries: 3);
+
+ testResolve('selects a dependency version that allows a transitive '
+ 'dependency that allows the SDK', {
+ 'myapp 0.0.0': {'foo': 'any'},
+ 'foo 1.0.0': {'bar': '1.0.0'},
+ 'foo 2.0.0': {'bar': '2.0.0'},
+ 'foo 3.0.0': {'bar': '3.0.0'},
+ 'foo 4.0.0': {'bar': '4.0.0'},
+ 'bar 1.0.0': {'sdk': goodVersion },
+ 'bar 2.0.0': {'sdk': goodVersion },
+ 'bar 3.0.0': {'sdk': badVersion },
+ 'bar 4.0.0': {'sdk': badVersion }
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '2.0.0',
+ 'bar': '2.0.0'
+ }, maxTries: 3);
+}
+
testResolve(description, packages,
{lockfile, result, FailMatcherBuilder error, int maxTries,
bool hasGreedySolution}) {
@@ -858,6 +934,8 @@ class MockSource extends Source {
Package mockPackage(String description, String version,
Map dependencyStrings) {
+ var sdkConstraint = null;
+
// Build the pubspec dependencies.
var dependencies = <PackageRef>[];
var devDependencies = <PackageRef>[];
@@ -865,8 +943,14 @@ Package mockPackage(String description, String version,
dependencyStrings.forEach((name, constraint) {
parseSource(name, (isDev, name, source) {
var packageName = name.replaceFirst(new RegExp(r"-[^-]+$"), "");
- var ref = new PackageRef(packageName, source,
- new VersionConstraint.parse(constraint), name);
+ constraint = new VersionConstraint.parse(constraint);
+
+ if (name == 'sdk') {
+ sdkConstraint = constraint;
+ return;
+ }
+
+ var ref = new PackageRef(packageName, source, constraint, name);
if (isDev) {
devDependencies.add(ref);
@@ -879,7 +963,7 @@ Package mockPackage(String description, String version,
var name = description.replaceFirst(new RegExp(r"-[^-]+$"), "");
var pubspec = new Pubspec(
name, new Version.parse(version), dependencies, devDependencies,
- new PubspecEnvironment());
+ new PubspecEnvironment(sdkConstraint));
return new Package.inMemory(pubspec);
}
« no previous file with comments | « utils/tests/pub/sdk_constraint_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698