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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library package_config.parse_test;
6
7 import "package:package_config/packages.dart";
8 import "package:package_config/packages_file.dart" show parse;
9 import "package:package_config/src/packages_impl.dart";
10 import "package:test/test.dart";
11
12 main() {
13 var base = Uri.parse("file:///one/two/three/packages.map");
14 test("empty", () {
15 var packages = doParse(emptySample, base);
16 expect(packages.asMap(), isEmpty);
17 });
18 test("comment only", () {
19 var packages = doParse(commentOnlySample, base);
20 expect(packages.asMap(), isEmpty);
21 });
22 test("empty lines only", () {
23 var packages = doParse(emptyLinesSample, base);
24 expect(packages.asMap(), isEmpty);
25 });
26
27 test("empty lines only", () {
28 var packages = doParse(emptyLinesSample, base);
29 expect(packages.asMap(), isEmpty);
30 });
31
32 test("single", () {
33 var packages = doParse(singleRelativeSample, base);
34 expect(packages.packages.toList(), equals(["foo"]));
35 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
36 equals(base.resolve("../test/").resolve("bar/baz.dart")));
37 });
38
39 test("single no slash", () {
40 var packages = doParse(singleRelativeSampleNoSlash, base);
41 expect(packages.packages.toList(), equals(["foo"]));
42 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
43 equals(base.resolve("../test/").resolve("bar/baz.dart")));
44 });
45
46 test("single no newline", () {
47 var packages = doParse(singleRelativeSampleNoNewline, base);
48 expect(packages.packages.toList(), equals(["foo"]));
49 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
50 equals(base.resolve("../test/").resolve("bar/baz.dart")));
51 });
52
53 test("single absolute authority", () {
54 var packages = doParse(singleAbsoluteSample, base);
55 expect(packages.packages.toList(), equals(["foo"]));
56 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
57 equals(Uri.parse("http://example.com/some/where/bar/baz.dart")));
58 });
59
60 test("single empty path", () {
61 var packages = doParse(singleEmptyPathSample, base);
62 expect(packages.packages.toList(), equals(["foo"]));
63 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
64 equals(base.replace(path: "${base.path}/bar/baz.dart")));
65 });
66
67 test("single absolute path", () {
68 var packages = doParse(singleAbsolutePathSample, base);
69 expect(packages.packages.toList(), equals(["foo"]));
70 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
71 equals(base.replace(path: "/test/bar/baz.dart")));
72 });
73
74 test("multiple", () {
75 var packages = doParse(multiRelativeSample, base);
76 expect(
77 packages.packages.toList()..sort(), equals(["bar", "foo"]));
78 expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
79 equals(base.resolve("../test/").resolve("bar/baz.dart")));
80 expect(packages.resolve(Uri.parse("package:bar/foo/baz.dart")),
81 equals(base.resolve("../test2/").resolve("foo/baz.dart")));
82 });
83
84 test("dot-dot 1", () {
85 var packages = doParse(singleRelativeSample, base);
86 expect(packages.packages.toList(), equals(["foo"]));
87 expect(packages.resolve(Uri.parse("package:foo/qux/../bar/baz.dart")),
88 equals(base.resolve("../test/").resolve("bar/baz.dart")));
89 });
90
91 test("all valid chars can be used in URI segment", () {
92 var packages = doParse(allValidCharsSample, base);
93 expect(packages.packages.toList(), equals([allValidChars]));
94 expect(packages.resolve(Uri.parse("package:$allValidChars/bar/baz.dart")),
95 equals(base.resolve("../test/").resolve("bar/baz.dart")));
96 });
97
98 test("no invalid chars accepted", () {
99 var map = {};
100 for (int i = 0; i < allValidChars.length; i++) {
101 map[allValidChars.codeUnitAt(i)] = true;
102 }
103 for (int i = 0; i <= 255; i++) {
104 if (map[i] == true) continue;
105 var char = new String.fromCharCode(i);
106 expect(() => doParse("x${char}x:x", null), throws);
107 }
108 });
109
110 test("no escapes", () {
111 expect(() => doParse("x%41x:x", base), throws);
112 });
113
114 test("same name twice", () {
115 expect(() => doParse(singleRelativeSample * 2, base), throws);
116 });
117
118 for (String invalidSample in invalid) {
119 test("invalid '$invalidSample'", () {
120 var result;
121 try {
122 result = doParse(invalidSample, base);
123 } on FormatException {
124 // expected
125 return;
126 }
127 fail("Resolved to $result");
128 });
129 }
130 }
131
132 Packages doParse(String sample, Uri baseUri) {
133 Map<String, Uri> map = parse(sample.codeUnits, baseUri);
134 return new MapPackages(map);
135 }
136
137 // Valid samples.
138 var emptySample = "";
139 var commentOnlySample = "# comment only\n";
140 var emptyLinesSample = "\n\n\r\n";
141 var singleRelativeSample = "foo:../test/\n";
142 var singleRelativeSampleNoSlash = "foo:../test\n";
143 var singleRelativeSampleNoNewline = "foo:../test/";
144 var singleAbsoluteSample = "foo:http://example.com/some/where/\n";
145 var singleEmptyPathSample = "foo:\n";
146 var singleAbsolutePathSample = "foo:/test/\n";
147 var multiRelativeSample = "foo:../test/\nbar:../test2/\n";
148 // All valid path segment characters in an URI.
149 var allValidChars =
150 r"!$&'()*+,-.0123456789;="
151 r"@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~";
152
153 var allValidCharsSample = "${allValidChars}:../test/\n";
154
155 // Invalid samples.
156 var invalid = [
157 ":baz.dart", // empty.
158 "foobar=baz.dart", // no colon (but an equals, which is not the same)
159 ".:../test/", // dot segment
160 "..:../test/", // dot-dot segment
161 "...:../test/", // dot-dot-dot segment
162 "foo/bar:../test/", // slash in name
163 "/foo:../test/", // slash at start of name
164 "?:../test/", // invalid characters.
165 "[:../test/", // invalid characters.
166 "x#:../test/", // invalid characters.
167 ];
OLDNEW
« 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