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

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

Issue 72193002: Clean up version solver tests a bit. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. 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
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/package.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 f3a4d9214cff63c4101a74614b7d7e54c036d697..d387ab4a007439557bf84d9074c0ce48b2138c39 100644
--- a/sdk/lib/_internal/pub/test/version_solver_test.dart
+++ b/sdk/lib/_internal/pub/test/version_solver_test.dart
@@ -889,36 +889,31 @@ _testResolve(void testFn(String description, Function body),
// Build the test package graph.
var root;
- packages.forEach((nameVersion, dependencies) {
- var parsed = parseSource(nameVersion, (isDev, nameVersion, source) {
- var parts = nameVersion.split(' ');
- var name = parts[0];
- var version = parts[1];
-
- var package = mockPackage(name, version, dependencies);
- if (name == 'myapp') {
- // Don't add the root package to the server, so we can verify that Pub
- // doesn't try to look up information about the local package on the
- // remote server.
- root = package;
- } else {
- (cache.sources[source] as MockSource).addPackage(name, package);
- }
- });
+ packages.forEach((description, dependencies) {
+ var id = parseSpec(description);
+ var package = mockPackage(id, dependencies);
+ if (id.name == 'myapp') {
+ // Don't add the root package to the server, so we can verify that Pub
+ // doesn't try to look up information about the local package on the
+ // remote server.
+ root = package;
+ } else {
+ (cache.sources[id.source] as MockSource).addPackage(
+ id.description, package);
+ }
});
// Clean up the expectation.
if (result != null) {
var newResult = {};
- result.forEach((name, version) {
- parseSource(name, (isDev, name, source) {
- version = new Version.parse(version);
- newResult[name] = new PackageId(name, source, version, name);
- });
+ result.forEach((description, version) {
+ var id = parseSpec(description, version);
+ newResult[id.name] = id;
});
result = newResult;
}
+ // Parse the lockfile.
var realLockFile = new LockFile.empty();
if (lockfile != null) {
lockfile.forEach((name, version) {
@@ -1195,58 +1190,85 @@ class MockSource extends Source {
}
}
-Package mockPackage(String description, String version,
- Map dependencyStrings) {
+Package mockPackage(PackageId id, Map dependencyStrings) {
var sdkConstraint = null;
// Build the pubspec dependencies.
var dependencies = <PackageDep>[];
var devDependencies = <PackageDep>[];
- dependencyStrings.forEach((name, constraint) {
- parseSource(name, (isDev, name, source) {
- var packageName = name.replaceFirst(new RegExp(r"-[^-]+$"), "");
- constraint = new VersionConstraint.parse(constraint);
+ dependencyStrings.forEach((description, constraint) {
+ var isDev = description.startsWith("(dev) ");
+ if (isDev) {
+ description = description.substring("(dev) ".length);
+ }
- if (name == 'sdk') {
- sdkConstraint = constraint;
- return;
- }
+ var dep = parseSpec(description).withConstraint(
+ new VersionConstraint.parse(constraint));
- var dep = new PackageDep(packageName, source, constraint, name);
+ if (dep.name == 'sdk') {
+ sdkConstraint = dep.constraint;
+ return;
+ }
- if (isDev) {
- devDependencies.add(dep);
- } else {
- dependencies.add(dep);
- }
- });
+ if (isDev) {
+ devDependencies.add(dep);
+ } else {
+ dependencies.add(dep);
+ }
});
- var name = description.replaceFirst(new RegExp(r"-[^-]+$"), "");
- var pubspec = new Pubspec(
- name, new Version.parse(version), dependencies, devDependencies,
- new PubspecEnvironment(sdkConstraint), []);
+ var pubspec = new Pubspec(id.name, id.version, dependencies,
+ devDependencies, new PubspecEnvironment(sdkConstraint), []);
return new Package.inMemory(pubspec);
}
-void parseSource(String description,
- callback(bool isDev, String name, String source)) {
- var isDev = false;
+/// Creates a new [PackageId] parsed from [text], which looks something like
+/// this:
+///
+/// foo-xyz 1.0.0 from mock
+///
+/// The package name is "foo". A hyphenated suffix like "-xyz" here is part
+/// of the package description, but not its name, so the description here is
+/// "foo-xyz".
+///
+/// This is followed by an optional [Version]. If [version] is provided, then
+/// it is parsed to a [Version], and [text] should *not* also contain a
+/// version string.
+///
+/// The "from mock" optional suffix is the name of a source for the package.
+/// If omitted, it defaults to "mock1".
+PackageId parseSpec(String text, [String version]) {
+ var pattern = new RegExp(r"(([a-z]*)(-[a-z]+)?)( ([^ ]+))?( from (.*))?$");
+ var match = pattern.firstMatch(text);
+ if (match == null) {
+ throw new FormatException("Could not parse spec '$text'.");
+ }
+
+ var description = match[1];
+ var name = match[2];
- if (description.startsWith("(dev) ")) {
- description = description.substring("(dev) ".length);
- isDev = true;
+ var parsedVersion;
+ if (version != null) {
+ // Spec string shouldn't also contain a version.
+ if (match[5] != null) {
+ throw new ArgumentError("Spec '$text' should not contain a version "
+ "since '$version' was passed in explicitly.");
+ }
+ parsedVersion = new Version.parse(version);
+ } else {
+ if (match[5] != null) {
+ parsedVersion = new Version.parse(match[5]);
+ } else {
+ parsedVersion = Version.none;
+ }
}
- var name = description;
var source = "mock1";
- var match = new RegExp(r"(.*) from (.*)").firstMatch(description);
- if (match != null) {
- name = match[1];
- source = match[2];
+ if (match[7] != null) {
+ source = match[7];
if (source == "root") source = null;
}
- callback(isDev, name, source);
+ return new PackageId(name, source, parsedVersion, description);
}
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/package.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698