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

Unified Diff: sdk/lib/_internal/pub/test/version_solver_test.dart

Issue 73463003: Support overrides in the version solver. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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
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 d387ab4a007439557bf84d9074c0ce48b2138c39..00b3e1bb41624dfaaf58dc521c5b68973b0e4039 100644
--- a/sdk/lib/_internal/pub/test/version_solver_test.dart
+++ b/sdk/lib/_internal/pub/test/version_solver_test.dart
@@ -41,6 +41,7 @@ main() {
group('backtracking', backtracking);
group('SDK constraint', sdkConstraint);
group('pre-release', prerelease);
+ group('override', override);
}
void basicGraph() {
@@ -855,27 +856,158 @@ void prerelease() {
});
}
-testResolve(description, packages, {
- lockfile, result, FailMatcherBuilder error, int maxTries,
- bool useBleedingEdgeSdkVersion}) {
- _testResolve(test, description, packages, lockfile: lockfile, result: result,
- error: error, maxTries: maxTries,
+void override() {
+ testResolve('chooses best version matching override constraint', {
+ 'myapp 0.0.0': {
+ 'a': 'any'
+ },
+ 'a 1.0.0': {},
+ 'a 2.0.0': {},
+ 'a 3.0.0': {}
+ }, overrides: {
+ 'a': '<3.0.0'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'a': '2.0.0'
+ });
+
+ testResolve('uses override as dependency', {
+ 'myapp 0.0.0': {},
+ 'a 1.0.0': {},
+ 'a 2.0.0': {},
+ 'a 3.0.0': {}
+ }, overrides: {
+ 'a': '<3.0.0'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'a': '2.0.0'
+ });
+
+ testResolve('ignores other constraints on overridden package', {
+ 'myapp 0.0.0': {
+ 'b': 'any',
+ 'c': 'any'
+ },
+ 'a 1.0.0': {},
+ 'a 2.0.0': {},
+ 'a 3.0.0': {},
+ 'b 1.0.0': {
+ 'a': '1.0.0'
+ },
+ 'c 1.0.0': {
+ 'a': '3.0.0'
+ }
+ }, overrides: {
+ 'a': '2.0.0'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'a': '2.0.0',
+ 'b': '1.0.0',
+ 'c': '1.0.0'
+ });
+
+ testResolve('backtracks on overidden package for its constraints', {
+ 'myapp 0.0.0': {
+ 'shared': '2.0.0'
+ },
+ 'a 1.0.0': {
+ 'shared': 'any'
+ },
+ 'a 2.0.0': {
+ 'shared': '1.0.0'
+ },
+ 'shared 1.0.0': {},
+ 'shared 2.0.0': {}
+ }, overrides: {
+ 'a': '<3.0.0'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'a': '1.0.0',
+ 'shared': '2.0.0'
+ }, maxTries: 2);
+
+ testResolve('override compatible with locked dependency', {
+ 'myapp 0.0.0': {
+ 'foo': 'any'
+ },
+ 'foo 1.0.0': { 'bar': '1.0.0' },
+ 'foo 1.0.1': { 'bar': '1.0.1' },
+ 'foo 1.0.2': { 'bar': '1.0.2' },
+ 'bar 1.0.0': {},
+ 'bar 1.0.1': {},
+ 'bar 1.0.2': {}
+ }, lockfile: {
+ 'foo': '1.0.1'
+ }, overrides: {
+ 'foo': '<1.0.2'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '1.0.1',
+ 'bar': '1.0.1'
+ });
+
+ testResolve('override incompatible with locked dependency', {
+ 'myapp 0.0.0': {
+ 'foo': 'any'
+ },
+ 'foo 1.0.0': { 'bar': '1.0.0' },
+ 'foo 1.0.1': { 'bar': '1.0.1' },
+ 'foo 1.0.2': { 'bar': '1.0.2' },
+ 'bar 1.0.0': {},
+ 'bar 1.0.1': {},
+ 'bar 1.0.2': {}
+ }, lockfile: {
+ 'foo': '1.0.1'
+ }, overrides: {
+ 'foo': '>1.0.1'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '1.0.2',
+ 'bar': '1.0.2'
+ });
+
+ testResolve('no version that matches override', {
+ 'myapp 0.0.0': {},
+ 'foo 2.0.0': {},
+ 'foo 2.1.3': {}
+ }, overrides: {
+ 'foo': '>=1.0.0 <2.0.0'
+ }, error: noVersion(['myapp']));
+
+ testResolve('override a bad source without error', {
+ 'myapp 0.0.0': {
+ 'foo from bad': 'any'
+ },
+ 'foo 0.0.0': {}
+ }, overrides: {
+ 'foo': 'any'
+ }, result: {
+ 'myapp from root': '0.0.0',
+ 'foo': '0.0.0'
+ });
+}
+
+testResolve(String description, Map packages, {
+ Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
+ int maxTries, bool useBleedingEdgeSdkVersion}) {
+ _testResolve(test, description, packages, lockfile: lockfile,
+ overrides: overrides, result: result, error: error, maxTries: maxTries,
useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion);
}
-solo_testResolve(description, packages, {
- lockfile, result, FailMatcherBuilder error, int maxTries,
- bool useBleedingEdgeSdkVersion}) {
+solo_testResolve(String description, Map packages, {
+ Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
+ int maxTries, bool useBleedingEdgeSdkVersion}) {
log.showSolver();
_testResolve(solo_test, description, packages, lockfile: lockfile,
- result: result, error: error, maxTries: maxTries,
+ overrides: overrides, result: result, error: error, maxTries: maxTries,
useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion);
}
_testResolve(void testFn(String description, Function body),
- description, packages, {
- lockfile, result, FailMatcherBuilder error, int maxTries,
- bool useBleedingEdgeSdkVersion}) {
+ String description, Map packages, {
+ Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
+ int maxTries, bool useBleedingEdgeSdkVersion}) {
if (maxTries == null) maxTries = 1;
if (useBleedingEdgeSdkVersion == null) useBleedingEdgeSdkVersion = false;
@@ -923,6 +1055,15 @@ _testResolve(void testFn(String description, Function body),
});
}
+ // Parse the overrides.
+ var realOverrides = [];
+ if (overrides != null) {
+ overrides.forEach((spec, constraint) {
+ realOverrides.add(parseSpec(spec).withConstraint(
+ new VersionConstraint.parse(constraint)));
+ });
+ }
+
// Make a version number like the continuous build's version.
var previousVersion = sdk.version;
if (useBleedingEdgeSdkVersion) {
@@ -931,7 +1072,7 @@ _testResolve(void testFn(String description, Function body),
// Resolve the versions.
var future = resolveVersions(cache.sources, root,
- lockFile: realLockFile);
+ lockFile: realLockFile, overrides: realOverrides);
var matcher;
if (result != null) {

Powered by Google App Engine
This is Rietveld 408576698