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

Unified Diff: packages/package_config/test/parse_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months 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: packages/package_config/test/parse_test.dart
diff --git a/packages/package_config/test/parse_test.dart b/packages/package_config/test/parse_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..8ed5c2eb79b953b1db93359286c9a69bd141b6b8
--- /dev/null
+++ b/packages/package_config/test/parse_test.dart
@@ -0,0 +1,167 @@
+// 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_test;
+
+import "package:package_config/packages.dart";
+import "package:package_config/packages_file.dart" show parse;
+import "package:package_config/src/packages_impl.dart";
+import "package:test/test.dart";
+
+main() {
+ var base = Uri.parse("file:///one/two/three/packages.map");
+ test("empty", () {
+ var packages = doParse(emptySample, base);
+ expect(packages.asMap(), isEmpty);
+ });
+ test("comment only", () {
+ var packages = doParse(commentOnlySample, base);
+ expect(packages.asMap(), isEmpty);
+ });
+ test("empty lines only", () {
+ var packages = doParse(emptyLinesSample, base);
+ expect(packages.asMap(), isEmpty);
+ });
+
+ test("empty lines only", () {
+ var packages = doParse(emptyLinesSample, base);
+ expect(packages.asMap(), isEmpty);
+ });
+
+ test("single", () {
+ var packages = doParse(singleRelativeSample, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ });
+
+ test("single no slash", () {
+ var packages = doParse(singleRelativeSampleNoSlash, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ });
+
+ test("single no newline", () {
+ var packages = doParse(singleRelativeSampleNoNewline, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ });
+
+ test("single absolute authority", () {
+ var packages = doParse(singleAbsoluteSample, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(Uri.parse("http://example.com/some/where/bar/baz.dart")));
+ });
+
+ test("single empty path", () {
+ var packages = doParse(singleEmptyPathSample, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.replace(path: "${base.path}/bar/baz.dart")));
+ });
+
+ test("single absolute path", () {
+ var packages = doParse(singleAbsolutePathSample, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.replace(path: "/test/bar/baz.dart")));
+ });
+
+ test("multiple", () {
+ var packages = doParse(multiRelativeSample, base);
+ expect(
+ packages.packages.toList()..sort(), equals(["bar", "foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ expect(packages.resolve(Uri.parse("package:bar/foo/baz.dart")),
+ equals(base.resolve("../test2/").resolve("foo/baz.dart")));
+ });
+
+ test("dot-dot 1", () {
+ var packages = doParse(singleRelativeSample, base);
+ expect(packages.packages.toList(), equals(["foo"]));
+ expect(packages.resolve(Uri.parse("package:foo/qux/../bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ });
+
+ test("all valid chars can be used in URI segment", () {
+ var packages = doParse(allValidCharsSample, base);
+ expect(packages.packages.toList(), equals([allValidChars]));
+ expect(packages.resolve(Uri.parse("package:$allValidChars/bar/baz.dart")),
+ equals(base.resolve("../test/").resolve("bar/baz.dart")));
+ });
+
+ test("no invalid chars accepted", () {
+ var map = {};
+ for (int i = 0; i < allValidChars.length; i++) {
+ map[allValidChars.codeUnitAt(i)] = true;
+ }
+ for (int i = 0; i <= 255; i++) {
+ if (map[i] == true) continue;
+ var char = new String.fromCharCode(i);
+ expect(() => doParse("x${char}x:x", null), throws);
+ }
+ });
+
+ test("no escapes", () {
+ expect(() => doParse("x%41x:x", base), throws);
+ });
+
+ test("same name twice", () {
+ expect(() => doParse(singleRelativeSample * 2, base), throws);
+ });
+
+ for (String invalidSample in invalid) {
+ test("invalid '$invalidSample'", () {
+ var result;
+ try {
+ result = doParse(invalidSample, base);
+ } on FormatException {
+ // expected
+ return;
+ }
+ fail("Resolved to $result");
+ });
+ }
+}
+
+Packages doParse(String sample, Uri baseUri) {
+ Map<String, Uri> map = parse(sample.codeUnits, baseUri);
+ return new MapPackages(map);
+}
+
+// Valid samples.
+var emptySample = "";
+var commentOnlySample = "# comment only\n";
+var emptyLinesSample = "\n\n\r\n";
+var singleRelativeSample = "foo:../test/\n";
+var singleRelativeSampleNoSlash = "foo:../test\n";
+var singleRelativeSampleNoNewline = "foo:../test/";
+var singleAbsoluteSample = "foo:http://example.com/some/where/\n";
+var singleEmptyPathSample = "foo:\n";
+var singleAbsolutePathSample = "foo:/test/\n";
+var multiRelativeSample = "foo:../test/\nbar:../test2/\n";
+// All valid path segment characters in an URI.
+var allValidChars =
+ r"!$&'()*+,-.0123456789;="
+ r"@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~";
+
+var allValidCharsSample = "${allValidChars}:../test/\n";
+
+// Invalid samples.
+var invalid = [
+ ":baz.dart", // empty.
+ "foobar=baz.dart", // no colon (but an equals, which is not the same)
+ ".:../test/", // dot segment
+ "..:../test/", // dot-dot segment
+ "...:../test/", // dot-dot-dot segment
+ "foo/bar:../test/", // slash in name
+ "/foo:../test/", // slash at start of name
+ "?:../test/", // invalid characters.
+ "[:../test/", // invalid characters.
+ "x#:../test/", // invalid characters.
+];
« no previous file with comments | « packages/package_config/test/discovery_test.dart ('k') | packages/package_config/test/parse_write_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698