Index: packages/package_config/test/parse_write_test.dart |
diff --git a/packages/package_config/test/parse_write_test.dart b/packages/package_config/test/parse_write_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6a185db20e378847624f31433fbc282ad5800b21 |
--- /dev/null |
+++ b/packages/package_config/test/parse_write_test.dart |
@@ -0,0 +1,83 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library package_config.parse_write_test; |
+ |
+import "package:package_config/packages_file.dart"; |
+import "package:test/test.dart"; |
+ |
+main() { |
+ testBase(baseDirString) { |
+ var baseDir = Uri.parse(baseDirString); |
+ group("${baseDir.scheme} base", () { |
+ Uri packagesFile = baseDir.resolve(".packages"); |
+ |
+ roundTripTest(String name, Map<String, Uri> map) { |
+ group(name, () { |
+ test("write with no baseUri", () { |
+ var content = writeToString(map).codeUnits; |
+ var resultMap = parse(content, packagesFile); |
+ expect(resultMap, map); |
+ }); |
+ |
+ test("write with base directory", () { |
+ var content = writeToString(map, baseUri: baseDir).codeUnits; |
+ var resultMap = parse(content, packagesFile); |
+ expect(resultMap, map); |
+ }); |
+ |
+ test("write with base .packages file", () { |
+ var content = writeToString(map, baseUri: packagesFile).codeUnits; |
+ var resultMap = parse(content, packagesFile); |
+ expect(resultMap, map); |
+ }); |
+ }); |
+ } |
+ var lowerDir = baseDir.resolve("path3/path4/"); |
+ var higherDir = baseDir.resolve("../"); |
+ var parallelDir = baseDir.resolve("../path3/"); |
+ var rootDir = baseDir.resolve("/"); |
+ var fileDir = Uri.parse("file:///path1/part2/"); |
+ var httpDir = Uri.parse("http://example.com/path1/path2/"); |
+ var otherDir = Uri.parse("other:/path1/path2/"); |
+ |
+ roundTripTest("empty", {}); |
+ roundTripTest("lower directory", {"foo": lowerDir}); |
+ roundTripTest("higher directory", {"foo": higherDir}); |
+ roundTripTest("parallel directory", {"foo": parallelDir}); |
+ roundTripTest("same directory", {"foo": baseDir}); |
+ roundTripTest("root directory", {"foo": rootDir}); |
+ roundTripTest("file directory", {"foo": fileDir}); |
+ roundTripTest("http directory", {"foo": httpDir}); |
+ roundTripTest("other scheme directory", {"foo": otherDir}); |
+ roundTripTest("multiple same-type directories", |
+ {"foo": lowerDir, "bar": higherDir, "baz": parallelDir}); |
+ roundTripTest("multiple scheme directories", |
+ {"foo": fileDir, "bar": httpDir, "baz": otherDir}); |
+ roundTripTest("multiple scheme directories and mutliple same type", |
+ {"foo": fileDir, "bar": httpDir, "baz": otherDir, |
+ "qux": lowerDir, "hip": higherDir, "dep": parallelDir}); |
+ }); |
+ } |
+ |
+ testBase("file:///base1/base2/"); |
+ testBase("http://example.com/base1/base2/"); |
+ testBase("other:/base1/base2/"); |
+ |
+ // Check that writing adds the comment. |
+ test("write preserves comment", () { |
+ var comment = "comment line 1\ncomment line 2\ncomment line 3"; |
+ var result = writeToString({}, comment: comment); |
+ // Comment with "# " before each line and "\n" after last. |
+ var expectedComment = |
+ "# comment line 1\n# comment line 2\n# comment line 3\n"; |
+ expect(result, startsWith(expectedComment)); |
+ }); |
+} |
+ |
+String writeToString(Map map, {Uri baseUri, String comment}) { |
+ var buffer = new StringBuffer(); |
+ write(buffer, map, baseUri: baseUri, comment: comment); |
+ return buffer.toString(); |
+} |