Index: tests/standalone/packages_file_test.dart |
diff --git a/tests/standalone/packages_file_test.dart b/tests/standalone/packages_file_test.dart |
index 768f25bc92327e0d714df19e8a0ee2f51245aeae..f0004e5dbf88f9c7cf9ac36a40e898f5cb0f5ac4 100644 |
--- a/tests/standalone/packages_file_test.dart |
+++ b/tests/standalone/packages_file_test.dart |
@@ -12,17 +12,13 @@ import "package:async_helper/async_helper.dart"; |
/// Path contains trailing slash. |
/// Each configuration gets its own sub-directory. |
Directory fileRoot; |
- |
/// Shared HTTP server serving the files in [httpFiles]. |
/// Each configuration gets its own "sub-dir" entry in `httpFiles`. |
HttpServer httpServer; |
- |
/// Directory structure served by HTTP server. |
Map<String, dynamic> httpFiles = {}; |
- |
/// List of configurations. |
List<Configuration> configurations = []; |
- |
/// Collection of failing tests and their failure messages. |
/// |
/// Each test may fail in more than one way. |
@@ -50,7 +46,7 @@ main() async { |
// as its own multitest. |
{ |
var groupCount = 8; |
- var groups = new List.generate(8, (_) => []); |
+ var groups = new List.generate(8, (_)=>[]); |
for (int i = 0; i < configurations.length; i++) { |
groups[i % groupCount].add(configurations[i]); |
} |
@@ -70,6 +66,7 @@ main() async { |
} |
} |
+ |
await tearDown(); |
if (failingTests.isNotEmpty) { |
@@ -89,10 +86,11 @@ main() async { |
/// directly. |
Configuration spawn(Configuration conf) { |
return conf.update( |
- description: conf.description + "/spawn", |
- main: "spawnMain", |
- newArgs: [conf.mainType], |
- expect: null); |
+ description: conf.description + "/spawn", |
+ main: "spawnMain", |
+ newArgs: [conf.mainType], |
+ expect: null |
+ ); |
} |
/// Tests running a spawnUri on top of the configuration before testing. |
@@ -112,19 +110,15 @@ Configuration spawnUriInherit(Configuration conf) { |
return null; |
} |
return conf.update( |
- description: conf.description + "/spawnUri-inherit", |
- main: "spawnUriMain", |
- // encode null parameters as "-". Windows fails if using empty string. |
- newArgs: [ |
- conf.mainFile, |
- "-", |
- "-", |
- "false" |
- ], |
- expect: { |
- "proot": conf.expect["iroot"], |
- "pconf": conf.expect["iconf"], |
- }); |
+ description: conf.description + "/spawnUri-inherit", |
+ main: "spawnUriMain", |
+ // encode null parameters as "-". Windows fails if using empty string. |
+ newArgs: [conf.mainFile, "-", "-", "false"], |
+ expect: { |
+ "proot": conf.expect["iroot"], |
+ "pconf": conf.expect["iconf"], |
+ } |
+ ); |
} |
/// Tests running a spawnUri with an explicit configuration different |
@@ -135,18 +129,16 @@ ConfigurationTransformer spawnUriOther(Configuration other) { |
return (Configuration conf) { |
bool search = (other.config == null) && (other.root == null); |
return conf.update( |
- description: "${conf.description} -spawnUri-> ${other.description}", |
- main: "spawnUriMain", |
- newArgs: [ |
- other.mainFile, |
- other.config ?? "-", |
- other.root ?? "-", |
- "$search" |
- ], |
- expect: other.expect); |
+ description: "${conf.description} -spawnUri-> ${other.description}", |
+ main: "spawnUriMain", |
+ newArgs: [other.mainFile, |
+ other.config ?? "-", other.root ?? "-", "$search"], |
+ expect: other.expect |
+ ); |
}; |
} |
+ |
/// Convert command line parameters to file paths. |
/// |
/// This only works on the command line, not with `spawnUri`. |
@@ -166,15 +158,13 @@ Configuration asPath(Configuration conf) { |
var root = toPath(conf.root); |
var config = toPath(conf.config); |
if (!change) return null; |
- return conf.update( |
- description: conf.description + "/as path", |
- mainFile: mainFile, |
- root: root, |
- config: config); |
+ return conf.update(description: conf.description + "/as path", |
+ mainFile: mainFile, root: root, config: config); |
} |
/// -------------------------------------------------------------- |
+ |
Future setUp() async { |
fileRoot = createTempDir(); |
// print("FILES: $fileRoot"); |
@@ -191,13 +181,12 @@ Future tearDown() async { |
typedef Configuration ConfigurationTransformer(Configuration conf); |
Future runTests([List<ConfigurationTransformer> transformations]) async { |
- outer: |
- for (var config in configurations) { |
+ outer: for (var config in configurations) { |
if (transformations != null) { |
for (int i = transformations.length - 1; i >= 0; i--) { |
config = transformations[i](config); |
if (config == null) { |
- continue outer; // Can be used to skip some tests. |
+ continue outer; // Can be used to skip some tests. |
} |
} |
} |
@@ -222,8 +211,8 @@ Future runTests([List<ConfigurationTransformer> transformations]) async { |
// The configurations all have URIs as `root`, `config` and `mainFile` strings, |
// have empty argument lists and `mainFile` points to the `main.dart` file. |
void createConfigurations() { |
- add(String description, String mainDir, |
- {String root, String config, Map file, Map http, Map expect}) { |
+ add(String description, String mainDir, {String root, String config, |
+ Map file, Map http, Map expect}) { |
var id = freshName("conf"); |
file ??= {}; |
@@ -262,6 +251,7 @@ void createConfigurations() { |
mainDirMap = file; |
} else { |
mainDirMap = http; |
+ |
} |
var parts = mainDir.split('/'); |
for (int i = 1; i < parts.length - 1; i++) { |
@@ -287,17 +277,17 @@ void createConfigurations() { |
fixPaths(expect); |
expect = { |
- "pconf": null, |
- "proot": null, |
- "iconf": null, |
- "iroot": null, |
- "foo": null, |
- "foo/": null, |
- "foo/bar": null, |
- "foo.x": "qux", |
- "bar/bar": null, |
+ "pconf": null, |
+ "proot": null, |
+ "iconf": null, |
+ "iroot": null, |
+ "foo": null, |
+ "foo/": null, |
+ "foo/bar": null, |
+ "foo.x": "qux", |
+ "bar/bar": null, |
"relative": "relative/path", |
- "nonpkg": "http://example.org/file" |
+ "nonpkg": "http://example.org/file" |
}..addAll(expect ?? const {}); |
// Add http files to the http server. |
@@ -325,48 +315,50 @@ void createConfigurations() { |
// Tests that only use one scheme to access files. |
for (var scheme in ["file", "http"]) { |
+ |
/// Run a test in the current scheme. |
/// |
/// The files are served either through HTTP or in a local directory. |
/// Use "%$scheme/" to refer to the root of the served files. |
addScheme(description, main, {expect, files, args, root, config}) { |
- add("$scheme/$description", main, |
- expect: expect, |
- root: root, |
- config: config, |
- file: (scheme == "file") ? files : null, |
- http: (scheme == "http") ? files : null); |
+ add("$scheme/$description", main, expect: expect, |
+ root: root, config: config, |
+ file: (scheme == "file") ? files : null, |
+ http: (scheme == "http") ? files : null); |
} |
{ |
// No parameters, no .packages files or packages/ dir. |
// A "file:" source realizes there is no configuration and can't resolve |
// any packages, but a "http:" source assumes a "packages/" directory. |
- addScheme("no resolution", "%$scheme/", |
- files: {}, |
- expect: (scheme == "file") |
- ? {"foo.x": null} |
- : { |
- "iroot": "%http/packages/", |
- "foo": "%http/packages/foo", |
- "foo/": "%http/packages/foo/", |
- "foo/bar": "%http/packages/foo/bar", |
- "foo.x": null, |
- "bar/bar": "%http/packages/bar/bar", |
- }); |
+ addScheme("no resolution", |
+ "%$scheme/", |
+ files: {}, |
+ expect: (scheme == "file") ? { |
+ "foo.x": null |
+ } : { |
+ "iroot": "%http/packages/", |
+ "foo": "%http/packages/foo", |
+ "foo/": "%http/packages/foo/", |
+ "foo/bar": "%http/packages/foo/bar", |
+ "foo.x": null, |
+ "bar/bar": "%http/packages/bar/bar", |
+ }); |
} |
{ |
// No parameters, no .packages files, |
// packages/ dir exists and is detected. |
var files = {"packages": fooPackage}; |
- addScheme("implicit packages dir", "%$scheme/", files: files, expect: { |
- "iroot": "%$scheme/packages/", |
- "foo": "%$scheme/packages/foo", |
- "foo/": "%$scheme/packages/foo/", |
- "foo/bar": "%$scheme/packages/foo/bar", |
- "bar/bar": "%$scheme/packages/bar/bar", |
- }); |
+ addScheme("implicit packages dir","%$scheme/", |
+ files: files, |
+ expect: { |
+ "iroot": "%$scheme/packages/", |
+ "foo": "%$scheme/packages/foo", |
+ "foo/": "%$scheme/packages/foo/", |
+ "foo/bar": "%$scheme/packages/foo/bar", |
+ "bar/bar": "%$scheme/packages/bar/bar", |
+ }); |
} |
{ |
@@ -375,175 +367,166 @@ void createConfigurations() { |
// |
// Should not detect the .packages file in parent directory. |
// That file is empty, so if it is used, the system cannot resolve "foo". |
- var files = { |
- "sub": {"packages": fooPackage}, |
- ".packages": "" |
- }; |
- addScheme( |
- "implicit packages dir overrides parent .packages", "%$scheme/sub/", |
- files: files, |
- expect: { |
- "iroot": "%$scheme/sub/packages/", |
- "foo": "%$scheme/sub/packages/foo", |
- "foo/": "%$scheme/sub/packages/foo/", |
- "foo/bar": "%$scheme/sub/packages/foo/bar", |
- // "foo.x": "qux", // Blocked by issue http://dartbug.com/26482 |
- "bar/bar": "%$scheme/sub/packages/bar/bar", |
- }); |
+ var files = {"sub": {"packages": fooPackage}, |
+ ".packages": ""}; |
+ addScheme("implicit packages dir overrides parent .packages", |
+ "%$scheme/sub/", |
+ files: files, |
+ expect: { |
+ "iroot": "%$scheme/sub/packages/", |
+ "foo": "%$scheme/sub/packages/foo", |
+ "foo/": "%$scheme/sub/packages/foo/", |
+ "foo/bar": "%$scheme/sub/packages/foo/bar", |
+ // "foo.x": "qux", // Blocked by issue http://dartbug.com/26482 |
+ "bar/bar": "%$scheme/sub/packages/bar/bar", |
+ }); |
} |
{ |
// No parameters, a .packages file next to entry is found and used. |
// A packages/ directory is ignored. |
- var files = { |
- ".packages": "foo:pkgs/foo/", |
- "packages": {}, |
- "pkgs": fooPackage |
- }; |
- addScheme("implicit .packages file", "%$scheme/", files: files, expect: { |
- "iconf": "%$scheme/.packages", |
- "foo/": "%$scheme/pkgs/foo/", |
- "foo/bar": "%$scheme/pkgs/foo/bar", |
- }); |
+ var files = {".packages": "foo:pkgs/foo/", |
+ "packages": {}, |
+ "pkgs": fooPackage}; |
+ addScheme("implicit .packages file", "%$scheme/", |
+ files: files, |
+ expect: { |
+ "iconf": "%$scheme/.packages", |
+ "foo/": "%$scheme/pkgs/foo/", |
+ "foo/bar": "%$scheme/pkgs/foo/bar", |
+ }); |
} |
{ |
// No parameters, a .packages file in parent dir, no packages/ dir. |
// With a file: URI, find the .packages file. |
// WIth a http: URI, assume a packages/ dir. |
- var files = {"sub": {}, ".packages": "foo:pkgs/foo/", "pkgs": fooPackage}; |
+ var files = {"sub": {}, |
+ ".packages": "foo:pkgs/foo/", |
+ "pkgs": fooPackage}; |
addScheme(".packages file in parent", "%$scheme/sub/", |
- files: files, |
- expect: (scheme == "file") |
- ? { |
- "iconf": "%file/.packages", |
- "foo/": "%file/pkgs/foo/", |
- "foo/bar": "%file/pkgs/foo/bar", |
- } |
- : { |
- "iroot": "%http/sub/packages/", |
- "foo": "%http/sub/packages/foo", |
- "foo/": "%http/sub/packages/foo/", |
- "foo/bar": "%http/sub/packages/foo/bar", |
- "foo.x": null, |
- "bar/bar": "%http/sub/packages/bar/bar", |
- }); |
+ files: files, |
+ expect: (scheme == "file") ? { |
+ "iconf": "%file/.packages", |
+ "foo/": "%file/pkgs/foo/", |
+ "foo/bar": "%file/pkgs/foo/bar", |
+ } : { |
+ "iroot": "%http/sub/packages/", |
+ "foo": "%http/sub/packages/foo", |
+ "foo/": "%http/sub/packages/foo/", |
+ "foo/bar": "%http/sub/packages/foo/bar", |
+ "foo.x": null, |
+ "bar/bar": "%http/sub/packages/bar/bar", |
+ }); |
} |
{ |
// Specified package root that doesn't exist. |
// Ignores existing .packages file and packages/ dir. |
- addScheme("explicit root not there", "%$scheme/", |
- files: { |
- "packages": fooPackage, |
- ".packages": "foo:%$scheme/packages/" |
- }, |
- root: "%$scheme/notthere/", |
- expect: { |
- "proot": "%$scheme/notthere/", |
- "iroot": "%$scheme/notthere/", |
- "foo": "%$scheme/notthere/foo", |
- "foo/": "%$scheme/notthere/foo/", |
- "foo/bar": "%$scheme/notthere/foo/bar", |
- "foo.x": null, |
- "bar/bar": "%$scheme/notthere/bar/bar", |
- }); |
+ addScheme("explicit root not there", |
+ "%$scheme/", |
+ files: {"packages": fooPackage, |
+ ".packages": "foo:%$scheme/packages/"}, |
+ root: "%$scheme/notthere/", |
+ expect: { |
+ "proot": "%$scheme/notthere/", |
+ "iroot": "%$scheme/notthere/", |
+ "foo": "%$scheme/notthere/foo", |
+ "foo/": "%$scheme/notthere/foo/", |
+ "foo/bar": "%$scheme/notthere/foo/bar", |
+ "foo.x": null, |
+ "bar/bar": "%$scheme/notthere/bar/bar", |
+ }); |
} |
{ |
// Specified package config that doesn't exist. |
// Ignores existing .packages file and packages/ dir. |
- addScheme("explicit config not there", "%$scheme/", |
- files: {".packages": "foo:packages/foo/", "packages": fooPackage}, |
- config: "%$scheme/.notthere", |
- expect: { |
- "pconf": "%$scheme/.notthere", |
- "iconf": null, // <- Only there if actually loaded (unspecified). |
- "foo/": null, |
- "foo/bar": null, |
- "foo.x": null, |
- }); |
+ addScheme("explicit config not there", |
+ "%$scheme/", |
+ files: {".packages": "foo:packages/foo/", |
+ "packages": fooPackage}, |
+ config: "%$scheme/.notthere", |
+ expect: { |
+ "pconf": "%$scheme/.notthere", |
+ "iconf": null, // <- Only there if actually loaded (unspecified). |
+ "foo/": null, |
+ "foo/bar": null, |
+ "foo.x": null, |
+ }); |
} |
{ |
// Specified package root with no trailing slash. |
// The Platform.packageRoot and Isolate.packageRoot has a trailing slash. |
- var files = { |
- ".packages": "foo:packages/foo/", |
- "packages": {}, |
- "pkgs": fooPackage |
- }; |
+ var files = {".packages": "foo:packages/foo/", |
+ "packages": {}, |
+ "pkgs": fooPackage}; |
addScheme("explicit package root, no slash", "%$scheme/", |
- files: files, |
- root: "%$scheme/pkgs", |
- expect: { |
- "proot": "%$scheme/pkgs/", |
- "iroot": "%$scheme/pkgs/", |
- "foo": "%$scheme/pkgs/foo", |
- "foo/": "%$scheme/pkgs/foo/", |
- "foo/bar": "%$scheme/pkgs/foo/bar", |
- "bar/bar": "%$scheme/pkgs/bar/bar", |
- }); |
+ files: files, |
+ root: "%$scheme/pkgs", |
+ expect: { |
+ "proot": "%$scheme/pkgs/", |
+ "iroot": "%$scheme/pkgs/", |
+ "foo": "%$scheme/pkgs/foo", |
+ "foo/": "%$scheme/pkgs/foo/", |
+ "foo/bar": "%$scheme/pkgs/foo/bar", |
+ "bar/bar": "%$scheme/pkgs/bar/bar", |
+ }); |
} |
{ |
// Specified package root with trailing slash. |
- var files = { |
- ".packages": "foo:packages/foo/", |
- "packages": {}, |
- "pkgs": fooPackage |
- }; |
+ var files = {".packages": "foo:packages/foo/", |
+ "packages": {}, |
+ "pkgs": fooPackage}; |
addScheme("explicit package root, slash", "%$scheme/", |
- files: files, |
- root: "%$scheme/pkgs", |
- expect: { |
- "proot": "%$scheme/pkgs/", |
- "iroot": "%$scheme/pkgs/", |
- "foo": "%$scheme/pkgs/foo", |
- "foo/": "%$scheme/pkgs/foo/", |
- "foo/bar": "%$scheme/pkgs/foo/bar", |
- "bar/bar": "%$scheme/pkgs/bar/bar", |
- }); |
+ files: files, |
+ root: "%$scheme/pkgs", |
+ expect: { |
+ "proot": "%$scheme/pkgs/", |
+ "iroot": "%$scheme/pkgs/", |
+ "foo": "%$scheme/pkgs/foo", |
+ "foo/": "%$scheme/pkgs/foo/", |
+ "foo/bar": "%$scheme/pkgs/foo/bar", |
+ "bar/bar": "%$scheme/pkgs/bar/bar", |
+ }); |
} |
{ |
// Specified package config. |
- var files = { |
- ".packages": "foo:packages/foo/", |
- "packages": {}, |
- ".pkgs": "foo:pkgs/foo/", |
- "pkgs": fooPackage |
- }; |
+ var files = {".packages": "foo:packages/foo/", |
+ "packages": {}, |
+ ".pkgs": "foo:pkgs/foo/", |
+ "pkgs": fooPackage}; |
addScheme("explicit package config file", "%$scheme/", |
- files: files, |
- config: "%$scheme/.pkgs", |
- expect: { |
- "pconf": "%$scheme/.pkgs", |
- "iconf": "%$scheme/.pkgs", |
- "foo/": "%$scheme/pkgs/foo/", |
- "foo/bar": "%$scheme/pkgs/foo/bar", |
- }); |
+ files: files, |
+ config: "%$scheme/.pkgs", |
+ expect: { |
+ "pconf": "%$scheme/.pkgs", |
+ "iconf": "%$scheme/.pkgs", |
+ "foo/": "%$scheme/pkgs/foo/", |
+ "foo/bar": "%$scheme/pkgs/foo/bar", |
+ }); |
} |
{ |
// Specified package config as data: URI. |
// The package config can be specified as a data: URI. |
// (In that case, relative URI references in the config file won't work). |
- var files = { |
- ".packages": "foo:packages/foo/", |
- "packages": {}, |
- "pkgs": fooPackage |
- }; |
+ var files = {".packages": "foo:packages/foo/", |
+ "packages": {}, |
+ "pkgs": fooPackage}; |
var dataUri = "data:,foo:%$scheme/pkgs/foo/\n"; |
addScheme("explicit data: config file", "%$scheme/", |
- files: files, |
- config: dataUri, |
- expect: { |
- "pconf": dataUri, |
- "iconf": dataUri, |
- "foo/": "%$scheme/pkgs/foo/", |
- "foo/bar": "%$scheme/pkgs/foo/bar", |
- }); |
+ files: files, |
+ config: dataUri, |
+ expect: { |
+ "pconf": dataUri, |
+ "iconf": dataUri, |
+ "foo/": "%$scheme/pkgs/foo/", |
+ "foo/bar": "%$scheme/pkgs/foo/bar", |
+ }); |
} |
} |
@@ -559,18 +542,17 @@ void createConfigurations() { |
(entryScheme == "file" ? files : https)["main"] = testMain; |
(pkgScheme == "file" ? files : https)["pkgs"] = fooPackage; |
add("$pkgScheme pkg/$entryScheme main", "%$entryScheme/", |
- file: files, |
- http: https, |
- root: "%$pkgScheme/pkgs/", |
- expect: { |
- "proot": "%$pkgScheme/pkgs/", |
- "iroot": "%$pkgScheme/pkgs/", |
- "foo": "%$pkgScheme/pkgs/foo", |
- "foo/": "%$pkgScheme/pkgs/foo/", |
- "foo/bar": "%$pkgScheme/pkgs/foo/bar", |
- "bar/bar": "%$pkgScheme/pkgs/bar/bar", |
- "foo.x": "qux", |
- }); |
+ file: files, http: https, |
+ root: "%$pkgScheme/pkgs/", |
+ expect: { |
+ "proot": "%$pkgScheme/pkgs/", |
+ "iroot": "%$pkgScheme/pkgs/", |
+ "foo": "%$pkgScheme/pkgs/foo", |
+ "foo/": "%$pkgScheme/pkgs/foo/", |
+ "foo/bar": "%$pkgScheme/pkgs/foo/bar", |
+ "bar/bar": "%$pkgScheme/pkgs/bar/bar", |
+ "foo.x": "qux", |
+ }); |
} |
// Package config. The configuration file may also be on either source. |
for (var configScheme in const ["file", "http"]) { |
@@ -584,22 +566,22 @@ void createConfigurations() { |
"foo:%$pkgScheme/pkgs/foo/\n"; |
(pkgScheme == "file" ? files : https)["pkgs"] = fooPackage; |
add("$pkgScheme pkg/$configScheme config/$entryScheme main", |
- "%$entryScheme/", |
- file: files, |
- http: https, |
- config: "%$configScheme/.pkgs", |
- expect: { |
- "pconf": "%$configScheme/.pkgs", |
- "iconf": "%$configScheme/.pkgs", |
- "foo/": "%$pkgScheme/pkgs/foo/", |
- "foo/bar": "%$pkgScheme/pkgs/foo/bar", |
- "foo.x": "qux", |
- }); |
+ "%$entryScheme/", |
+ file: files, http: https, |
+ config: "%$configScheme/.pkgs", |
+ expect: { |
+ "pconf": "%$configScheme/.pkgs", |
+ "iconf": "%$configScheme/.pkgs", |
+ "foo/": "%$pkgScheme/pkgs/foo/", |
+ "foo/bar": "%$pkgScheme/pkgs/foo/bar", |
+ "foo.x": "qux", |
+ }); |
} |
} |
} |
} |
+ |
// --------------------------------------------------------- |
// Helper functionality. |
@@ -619,7 +601,9 @@ Future testConfiguration(Configuration conf) async { |
var description = conf.description; |
try { |
var output = await execDart(conf.mainFile, |
- root: conf.root, config: conf.config, scriptArgs: conf.args); |
+ root: conf.root, |
+ config: conf.config, |
+ scriptArgs: conf.args); |
match(JSON.decode(output), conf.expect, description, output); |
} catch (e, s) { |
// Unexpected error calling execDart or parsing the result. |
@@ -629,6 +613,7 @@ Future testConfiguration(Configuration conf) async { |
} |
} |
+ |
/// Test that the output of running testMain matches the expectations. |
/// |
/// The output is a string which is parse as a JSON literal. |
@@ -642,14 +627,13 @@ void match(Map actuals, Map expectations, String desc, String actualJson) { |
var actual = actuals[key]; |
if (expectation != actual) { |
print("ERROR: $desc: $key: Expected: <$expectation> Found: <$actual>"); |
- failingTests |
- .putIfAbsent(desc, () => []) |
- .add("$key: $expectation != $actual"); |
+ failingTests.putIfAbsent(desc, ()=>[]).add( |
+ "$key: $expectation != $actual"); |
} |
} |
} |
-const String improt = "import"; // Avoid multitest import rewriting. |
+const String improt = "import"; // Avoid multitest import rewriting. |
/// Script that prints the current state and the result of resolving |
/// a few package URIs. This script will be invoked in different settings, |
@@ -759,15 +743,15 @@ main(List<String> args) async { |
"""; |
/// A package directory containing only one package, "foo", with one file. |
-const Map fooPackage = const { |
- "foo": const {"foo": "var x = 'qux';"} |
-}; |
+const Map fooPackage = const { "foo": const { "foo": "var x = 'qux';" }}; |
+ |
/// Runs the Dart executable with the provided parameters. |
/// |
/// Captures and returns the output. |
Future<String> execDart(String script, |
- {String root, String config, Iterable<String> scriptArgs}) async { |
+ {String root, String config, |
+ Iterable<String> scriptArgs}) async { |
var checked = false; |
assert((checked = true)); |
// TODO: Find a way to change CWD before running script. |
@@ -811,8 +795,9 @@ void createFiles(Directory tempDir, String subDir, Map content) { |
if (content is String) { |
// If the name starts with "." it's a .packages file, otherwise it's |
// a dart file. Those are the only files we care about in this test. |
- createTextFile( |
- dir, name.startsWith(".") ? name : name + ".dart", content); |
+ createTextFile(dir, |
+ name.startsWith(".") ? name : name + ".dart", |
+ content); |
} else { |
assert(content is Map); |
var subdir = createDir(dir, name); |
@@ -834,31 +819,28 @@ void createFiles(Directory tempDir, String subDir, Map content) { |
/// referential. |
Future<HttpServer> startServer(Map files) async { |
return (await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 0)) |
- ..forEach((request) { |
- var result = files; |
- onFailure: |
- { |
- for (var part in request.uri.pathSegments) { |
- if (part.endsWith(".dart")) { |
- part = part.substring(0, part.length - 5); |
+ ..forEach((request) { |
+ var result = files; |
+ onFailure: { |
+ for (var part in request.uri.pathSegments) { |
+ if (part.endsWith(".dart")) { |
+ part = part.substring(0, part.length - 5); |
+ } |
+ if (result is Map) { |
+ result = result[part]; |
+ } else { |
+ break onFailure; |
+ } |
} |
- if (result is Map) { |
- result = result[part]; |
- } else { |
- break onFailure; |
+ if (result is String) { |
+ request.response..write(result) |
+ ..close(); |
+ return; |
} |
} |
- if (result is String) { |
- request.response |
- ..write(result) |
- ..close(); |
- return; |
- } |
- } |
- request.response |
- ..statusCode = HttpStatus.NOT_FOUND |
- ..close(); |
- }); |
+ request.response..statusCode = HttpStatus.NOT_FOUND |
+ ..close(); |
+ }); |
} |
// Counter used to avoid reusing temporary file or directory names. |
@@ -883,22 +865,17 @@ typedef void ConfigUpdate(Configuration configuration); |
class Configuration { |
/// The "description" of the test - a description of the set-up. |
final String description; |
- |
/// The package root parameter passed to the Dart isolate. |
/// |
/// At most one of [root] and [config] should be supplied. If both are |
/// omitted, a VM will search for a packages file or dir. |
final String root; |
- |
/// The package configuration file location passed to the Dart isolate. |
final String config; |
- |
/// Path to the main file to run. |
final String mainFile; |
- |
/// List of arguments to pass to the main function. |
final List<String> args; |
- |
/// The expected values for `Platform.package{Root,Config}`, |
/// `Isolate.package{Root,Config}` and resolution of package URIs |
/// in a `foo` package. |
@@ -907,13 +884,12 @@ class Configuration { |
/// The tests can run this file after doing other `spawn` or `spawnUri` calls. |
final Map expect; |
- Configuration( |
- {this.description, |
- this.root, |
- this.config, |
- this.mainFile, |
- this.args, |
- this.expect}); |
+ Configuration({this.description, |
+ this.root, |
+ this.config, |
+ this.mainFile, |
+ this.args, |
+ this.expect}); |
// Gets the type of main file, one of `main`, `spawnMain` or `spawnUriMain`. |
String get mainType { |
@@ -953,42 +929,44 @@ class Configuration { |
/// [expect] overrides individual expectations. |
/// |
/// [root] and [config] overrides the existing values. |
- Configuration update( |
- {String description, |
+ Configuration update({ |
+ String description, |
String main, |
String mainFile, |
String root, |
String config, |
List<String> args, |
List<String> newArgs, |
- Map expect}) { |
+ Map expect |
+ }) { |
return new Configuration( |
- description: description ?? this.description, |
- root: root ?? this.root, |
- config: config ?? this.config, |
- mainFile: mainFile ?? |
- ((main == null) ? this.mainFile : "${this.mainPath}$main.dart"), |
- args: args ?? |
- (<String>[] |
- ..addAll(newArgs ?? const <String>[]) |
- ..addAll(this.args)), |
- expect: expect == null ? this.expect : new Map.from(this.expect) |
- ..addAll(expect ?? const {})); |
+ description: description ?? this.description, |
+ root: root ?? this.root, |
+ config: config ?? this.config, |
+ mainFile: mainFile ?? |
+ ((main == null) ? this.mainFile : "${this.mainPath}$main.dart"), |
+ args: |
+ args ?? (<String>[]..addAll(newArgs ?? const <String>[]) |
+ ..addAll(this.args)), |
+ expect: expect == null |
+ ? this.expect |
+ : new Map.from(this.expect)..addAll(expect ?? const {})); |
} |
// For debugging. |
String toString() { |
return "Configuration($description\n" |
- " root : $root\n" |
- " config: $config\n" |
- " main : $mainFile\n" |
- " args : ${args.map((x) => '"$x"').join(" ")}\n" |
- ") : expect {\n${expect.keys.map((k) => |
+ " root : $root\n" |
+ " config: $config\n" |
+ " main : $mainFile\n" |
+ " args : ${args.map((x) => '"$x"').join(" ")}\n" |
+ ") : expect {\n${expect.keys.map((k) => |
' "$k"'.padRight(6) + ":${JSON.encode(expect[k])}\n").join()}" |
- "}"; |
+ "}"; |
} |
} |
+ |
// Inserts the file with generalized [name] at [path] with [content]. |
// |
// The [path] is a directory where the file is created. It must start with |
@@ -996,8 +974,8 @@ class Configuration { |
// |
// The [name] should not have a trailing ".dart" for Dart files. Any file |
// not starting with "." is assumed to be a ".dart" file. |
-void insertFileAt( |
- Map file, Map http, String path, String name, String content) { |
+void insertFileAt(Map file, Map http, |
+ String path, String name, String content) { |
var parts = path.split('/').toList(); |
var dir = (parts[0] == "%file") ? file : http; |
for (var i = 1; i < parts.length - 1; i++) { |