Index: utils/tests/pub/test_pub.dart |
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart |
index a56ae6fd74b2c3ef6003c9b0aca2c53f9315188a..baace39528ea5b672e710ffe54e8d9fed18993bb 100644 |
--- a/utils/tests/pub/test_pub.dart |
+++ b/utils/tests/pub/test_pub.dart |
@@ -75,8 +75,10 @@ void testPub(String description, [List<Descriptor> cache, Descriptor app, |
return _validateExpectedPackages(createdAppDir, expectedPackageDir); |
}); |
- future.then((valid) { |
- Expect.isTrue(valid); // TODO(bob): Report which expectation failed. |
+ future.then((error) { |
+ // Null means there were no errors. |
+ if (error != null) Expect.fail(error); |
+ |
deleteSandboxIfCreated(); |
}); |
@@ -87,7 +89,7 @@ void testPub(String description, [List<Descriptor> cache, Descriptor app, |
} |
Future<Directory> _setUpSandbox() { |
- return cleanDir('pub-test-sandbox'); |
+ return createTempDir('pub-test-sandbox-'); |
nweiz
2012/04/26 23:42:47
Why?
|
} |
Future _setUpCache(Directory sandboxDir, List<Descriptor> cache) { |
@@ -120,10 +122,14 @@ Future<ProcessResult> _runPub(List<String> pubArgs, String workingDir) { |
return runProcess(dartBin, args, workingDir); |
} |
-Future<bool> _validateExpectedPackages(Directory appDir, |
+/** |
+ * Validates the contents of the "packages" directory inside [appDir] against |
+ * [expectedPackageDir]. |
+ */ |
+Future<String> _validateExpectedPackages(Directory appDir, |
List<Descriptor> expectedPackageDir) { |
// No expectation. |
- if (expectedPackageDir == null) return new Future.immediate(true); |
+ if (expectedPackageDir == null) return new Future.immediate(null); |
return dir('packages', expectedPackageDir).validate(appDir.path); |
} |
@@ -193,10 +199,10 @@ class Descriptor { |
/** |
* Validates that this descriptor correctly matches the corresponding file |
- * system entry within [dir]. Returns a [Future] that completes when the |
- * validation is done. |
+ * system entry within [dir]. Returns a [Future] that completes to `null` if |
+ * the entry is valid, or a message describing the error if it failed. |
*/ |
- abstract Future<bool> validate(String dir); |
+ abstract Future<String> validate(String dir); |
} |
/** |
@@ -223,12 +229,19 @@ class FileDescriptor extends Descriptor { |
/** |
* Validates that this file correctly matches the actual file at [path]. |
*/ |
- Future<bool> validate(String path) { |
+ Future<String> validate(String path) { |
path = join(path, name); |
return fileExists(path).chain((exists) { |
- if (!exists) return new Future.immediate(false); |
+ if (!exists) { |
+ return new Future.immediate('Expected file $path does not exist.'); |
+ } |
- return readTextFile(path).transform((text) => text == contents); |
+ return readTextFile(path).transform((text) { |
+ if (text == contents) return null; |
+ |
+ return 'File $path should contain:\n\n$contents\n\n' |
+ 'but contained:\n\n$text'; |
+ }); |
}); |
} |
} |
@@ -276,14 +289,19 @@ class DirectoryDescriptor extends Descriptor { |
* directory doesn't contain other unexpected stuff, just that it *does* |
* contain the stuff we do expect. |
*/ |
- Future<bool> validate(String path) { |
+ Future<String> validate(String path) { |
// Validate each of the items in this directory. |
final entryFutures = contents.map( |
(entry) => entry.validate(join(path, name))); |
// If they are all valid, the directory is valid. |
return Futures.wait(entryFutures).transform((entries) { |
- return !entries.some((valid) => !valid); |
+ for (final entry in entries) { |
+ if (entry != null) return entry; |
+ } |
+ |
+ // If we got here, all of the sub-entries were valid. |
+ return null; |
}); |
} |
} |