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

Side by Side Diff: packages/path/test/url_test.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 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
« no previous file with comments | « packages/path/test/posix_test.dart ('k') | packages/path/test/utils.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:test/test.dart'; 5 import 'package:test/test.dart';
6 import 'package:path/path.dart' as path; 6 import 'package:path/path.dart' as path;
7 7
8 import 'utils.dart';
9
8 main() { 10 main() {
9 var context = new path.Context( 11 var context = new path.Context(
10 style: path.Style.url, current: 'http://dartlang.org/root/path'); 12 style: path.Style.url, current: 'http://dartlang.org/root/path');
11 13
12 test('separator', () { 14 test('separator', () {
13 expect(context.separator, '/'); 15 expect(context.separator, '/');
14 }); 16 });
15 17
16 test('extension', () { 18 test('extension', () {
17 expect(context.extension(''), ''); 19 expect(context.extension(''), '');
(...skipping 13 matching lines...) Expand all
31 expect( 33 expect(
32 context.rootPrefix('http://dartlang.org/a/c'), 'http://dartlang.org'); 34 context.rootPrefix('http://dartlang.org/a/c'), 'http://dartlang.org');
33 expect(context.rootPrefix('file:///a/c'), 'file://'); 35 expect(context.rootPrefix('file:///a/c'), 'file://');
34 expect(context.rootPrefix('/a/c'), '/'); 36 expect(context.rootPrefix('/a/c'), '/');
35 expect(context.rootPrefix('http://dartlang.org/'), 'http://dartlang.org'); 37 expect(context.rootPrefix('http://dartlang.org/'), 'http://dartlang.org');
36 expect(context.rootPrefix('file:///'), 'file://'); 38 expect(context.rootPrefix('file:///'), 'file://');
37 expect(context.rootPrefix('http://dartlang.org'), 'http://dartlang.org'); 39 expect(context.rootPrefix('http://dartlang.org'), 'http://dartlang.org');
38 expect(context.rootPrefix('file://'), 'file://'); 40 expect(context.rootPrefix('file://'), 'file://');
39 expect(context.rootPrefix('/'), '/'); 41 expect(context.rootPrefix('/'), '/');
40 expect(context.rootPrefix('foo/bar://'), ''); 42 expect(context.rootPrefix('foo/bar://'), '');
43 expect(context.rootPrefix('package:foo/bar.dart'), 'package:foo');
44 expect(context.rootPrefix('foo/bar:baz/qux'), '');
41 }); 45 });
42 46
43 test('dirname', () { 47 test('dirname', () {
44 expect(context.dirname(''), '.'); 48 expect(context.dirname(''), '.');
45 expect(context.dirname('a'), '.'); 49 expect(context.dirname('a'), '.');
46 expect(context.dirname('a/b'), 'a'); 50 expect(context.dirname('a/b'), 'a');
47 expect(context.dirname('a/b/c'), 'a/b'); 51 expect(context.dirname('a/b/c'), 'a/b');
48 expect(context.dirname('a/b.c'), 'a'); 52 expect(context.dirname('a/b.c'), 'a');
49 expect(context.dirname('a/'), '.'); 53 expect(context.dirname('a/'), '.');
50 expect(context.dirname('a/.'), 'a'); 54 expect(context.dirname('a/.'), 'a');
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 expect(context.isAbsolute('file:///a/b'), true); 131 expect(context.isAbsolute('file:///a/b'), true);
128 expect(context.isAbsolute('/a/b'), true); 132 expect(context.isAbsolute('/a/b'), true);
129 expect(context.isAbsolute('http://dartlang.org/'), true); 133 expect(context.isAbsolute('http://dartlang.org/'), true);
130 expect(context.isAbsolute('file:///'), true); 134 expect(context.isAbsolute('file:///'), true);
131 expect(context.isAbsolute('http://dartlang.org'), true); 135 expect(context.isAbsolute('http://dartlang.org'), true);
132 expect(context.isAbsolute('file://'), true); 136 expect(context.isAbsolute('file://'), true);
133 expect(context.isAbsolute('/'), true); 137 expect(context.isAbsolute('/'), true);
134 expect(context.isAbsolute('~'), false); 138 expect(context.isAbsolute('~'), false);
135 expect(context.isAbsolute('.'), false); 139 expect(context.isAbsolute('.'), false);
136 expect(context.isAbsolute('../a'), false); 140 expect(context.isAbsolute('../a'), false);
137 expect(context.isAbsolute('C:/a'), false); 141 expect(context.isAbsolute('C:/a'), true);
138 expect(context.isAbsolute(r'C:\a'), false); 142 expect(context.isAbsolute(r'C:\a'), true);
143 expect(context.isAbsolute('package:foo/bar.dart'), true);
144 expect(context.isAbsolute('foo/bar:baz/qux'), false);
139 expect(context.isAbsolute(r'\\a'), false); 145 expect(context.isAbsolute(r'\\a'), false);
140 }); 146 });
141 147
142 test('isRelative', () { 148 test('isRelative', () {
143 expect(context.isRelative(''), true); 149 expect(context.isRelative(''), true);
144 expect(context.isRelative('a'), true); 150 expect(context.isRelative('a'), true);
145 expect(context.isRelative('a/b'), true); 151 expect(context.isRelative('a/b'), true);
146 expect(context.isRelative('http://dartlang.org/a'), false); 152 expect(context.isRelative('http://dartlang.org/a'), false);
147 expect(context.isRelative('file:///a'), false); 153 expect(context.isRelative('file:///a'), false);
148 expect(context.isRelative('/a'), false); 154 expect(context.isRelative('/a'), false);
149 expect(context.isRelative('http://dartlang.org/a/b'), false); 155 expect(context.isRelative('http://dartlang.org/a/b'), false);
150 expect(context.isRelative('file:///a/b'), false); 156 expect(context.isRelative('file:///a/b'), false);
151 expect(context.isRelative('/a/b'), false); 157 expect(context.isRelative('/a/b'), false);
152 expect(context.isRelative('http://dartlang.org/'), false); 158 expect(context.isRelative('http://dartlang.org/'), false);
153 expect(context.isRelative('file:///'), false); 159 expect(context.isRelative('file:///'), false);
154 expect(context.isRelative('http://dartlang.org'), false); 160 expect(context.isRelative('http://dartlang.org'), false);
155 expect(context.isRelative('file://'), false); 161 expect(context.isRelative('file://'), false);
156 expect(context.isRelative('/'), false); 162 expect(context.isRelative('/'), false);
157 expect(context.isRelative('~'), true); 163 expect(context.isRelative('~'), true);
158 expect(context.isRelative('.'), true); 164 expect(context.isRelative('.'), true);
159 expect(context.isRelative('../a'), true); 165 expect(context.isRelative('../a'), true);
160 expect(context.isRelative('C:/a'), true); 166 expect(context.isRelative('C:/a'), false);
161 expect(context.isRelative(r'C:\a'), true); 167 expect(context.isRelative(r'C:\a'), false);
168 expect(context.isRelative(r'package:foo/bar.dart'), false);
169 expect(context.isRelative('foo/bar:baz/qux'), true);
162 expect(context.isRelative(r'\\a'), true); 170 expect(context.isRelative(r'\\a'), true);
163 }); 171 });
164 172
165 test('isRootRelative', () { 173 test('isRootRelative', () {
166 expect(context.isRootRelative(''), false); 174 expect(context.isRootRelative(''), false);
167 expect(context.isRootRelative('a'), false); 175 expect(context.isRootRelative('a'), false);
168 expect(context.isRootRelative('a/b'), false); 176 expect(context.isRootRelative('a/b'), false);
169 expect(context.isRootRelative('http://dartlang.org/a'), false); 177 expect(context.isRootRelative('http://dartlang.org/a'), false);
170 expect(context.isRootRelative('file:///a'), false); 178 expect(context.isRootRelative('file:///a'), false);
171 expect(context.isRootRelative('/a'), true); 179 expect(context.isRootRelative('/a'), true);
172 expect(context.isRootRelative('http://dartlang.org/a/b'), false); 180 expect(context.isRootRelative('http://dartlang.org/a/b'), false);
173 expect(context.isRootRelative('file:///a/b'), false); 181 expect(context.isRootRelative('file:///a/b'), false);
174 expect(context.isRootRelative('/a/b'), true); 182 expect(context.isRootRelative('/a/b'), true);
175 expect(context.isRootRelative('http://dartlang.org/'), false); 183 expect(context.isRootRelative('http://dartlang.org/'), false);
176 expect(context.isRootRelative('file:///'), false); 184 expect(context.isRootRelative('file:///'), false);
177 expect(context.isRootRelative('http://dartlang.org'), false); 185 expect(context.isRootRelative('http://dartlang.org'), false);
178 expect(context.isRootRelative('file://'), false); 186 expect(context.isRootRelative('file://'), false);
179 expect(context.isRootRelative('/'), true); 187 expect(context.isRootRelative('/'), true);
180 expect(context.isRootRelative('~'), false); 188 expect(context.isRootRelative('~'), false);
181 expect(context.isRootRelative('.'), false); 189 expect(context.isRootRelative('.'), false);
182 expect(context.isRootRelative('../a'), false); 190 expect(context.isRootRelative('../a'), false);
183 expect(context.isRootRelative('C:/a'), false); 191 expect(context.isRootRelative('C:/a'), false);
184 expect(context.isRootRelative(r'C:\a'), false); 192 expect(context.isRootRelative(r'C:\a'), false);
193 expect(context.isRootRelative(r'package:foo/bar.dart'), false);
194 expect(context.isRootRelative('foo/bar:baz/qux'), false);
185 expect(context.isRootRelative(r'\\a'), false); 195 expect(context.isRootRelative(r'\\a'), false);
186 }); 196 });
187 197
188 group('join', () { 198 group('join', () {
189 test('allows up to eight parts', () { 199 test('allows up to eight parts', () {
190 expect(context.join('a'), 'a'); 200 expect(context.join('a'), 'a');
191 expect(context.join('a', 'b'), 'a/b'); 201 expect(context.join('a', 'b'), 'a/b');
192 expect(context.join('a', 'b', 'c'), 'a/b/c'); 202 expect(context.join('a', 'b', 'c'), 'a/b/c');
193 expect(context.join('a', 'b', 'c', 'd'), 'a/b/c/d'); 203 expect(context.join('a', 'b', 'c', 'd'), 'a/b/c/d');
194 expect(context.join('a', 'b', 'c', 'd', 'e'), 'a/b/c/d/e'); 204 expect(context.join('a', 'b', 'c', 'd', 'e'), 'a/b/c/d/e');
(...skipping 12 matching lines...) Expand all
207 expect(context.join('a', 'http://dartlang.org', 'b', 'c'), 217 expect(context.join('a', 'http://dartlang.org', 'b', 'c'),
208 'http://dartlang.org/b/c'); 218 'http://dartlang.org/b/c');
209 expect(context.join('a', 'file://', 'b', 'c'), 'file:///b/c'); 219 expect(context.join('a', 'file://', 'b', 'c'), 'file:///b/c');
210 expect(context.join('a', '/', 'b', 'c'), '/b/c'); 220 expect(context.join('a', '/', 'b', 'c'), '/b/c');
211 expect(context.join('a', '/b', 'http://dartlang.org/c', 'd'), 221 expect(context.join('a', '/b', 'http://dartlang.org/c', 'd'),
212 'http://dartlang.org/c/d'); 222 'http://dartlang.org/c/d');
213 expect(context.join( 223 expect(context.join(
214 'a', 'http://google.com/b', 'http://dartlang.org/c', 'd'), 224 'a', 'http://google.com/b', 'http://dartlang.org/c', 'd'),
215 'http://dartlang.org/c/d'); 225 'http://dartlang.org/c/d');
216 expect(context.join('a', '/b', '/c', 'd'), '/c/d'); 226 expect(context.join('a', '/b', '/c', 'd'), '/c/d');
217 expect(context.join('a', r'c:\b', 'c', 'd'), r'a/c:\b/c/d'); 227 expect(context.join('a', r'c:\b', 'c', 'd'), r'c:\b/c/d');
228 expect(context.join('a', 'package:foo/bar', 'c', 'd'),
229 r'package:foo/bar/c/d');
218 expect(context.join('a', r'\\b', 'c', 'd'), r'a/\\b/c/d'); 230 expect(context.join('a', r'\\b', 'c', 'd'), r'a/\\b/c/d');
219 }); 231 });
220 232
221 test('preserves roots before a root-relative path', () { 233 test('preserves roots before a root-relative path', () {
222 expect(context.join('http://dartlang.org', 'a', '/b', 'c'), 234 expect(context.join('http://dartlang.org', 'a', '/b', 'c'),
223 'http://dartlang.org/b/c'); 235 'http://dartlang.org/b/c');
224 expect(context.join('file://', 'a', '/b', 'c'), 'file:///b/c'); 236 expect(context.join('file://', 'a', '/b', 'c'), 'file:///b/c');
225 expect(context.join('file://', 'a', '/b', 'c', '/d'), 'file:///d'); 237 expect(context.join('file://', 'a', '/b', 'c', '/d'), 'file:///d');
238 expect(context.join('package:foo/bar.dart', '/baz.dart'),
239 'package:foo/baz.dart');
226 }); 240 });
227 241
228 test('ignores trailing nulls', () { 242 test('ignores trailing nulls', () {
229 expect(context.join('a', null), equals('a')); 243 expect(context.join('a', null), equals('a'));
230 expect(context.join('a', 'b', 'c', null, null), equals('a/b/c')); 244 expect(context.join('a', 'b', 'c', null, null), equals('a/b/c'));
231 }); 245 });
232 246
233 test('ignores empty strings', () { 247 test('ignores empty strings', () {
234 expect(context.join(''), ''); 248 expect(context.join(''), '');
235 expect(context.join('', ''), ''); 249 expect(context.join('', ''), '');
236 expect(context.join('', 'a'), 'a'); 250 expect(context.join('', 'a'), 'a');
237 expect(context.join('a', '', 'b', '', '', '', 'c'), 'a/b/c'); 251 expect(context.join('a', '', 'b', '', '', '', 'c'), 'a/b/c');
238 expect(context.join('a', 'b', ''), 'a/b'); 252 expect(context.join('a', 'b', ''), 'a/b');
239 }); 253 });
240 254
241 test('disallows intermediate nulls', () { 255 test('disallows intermediate nulls', () {
242 expect(() => context.join('a', null, 'b'), throwsArgumentError); 256 expect(() => context.join('a', null, 'b'), throwsArgumentError);
243 expect(() => context.join(null, 'a'), throwsArgumentError); 257 expect(() => context.join(null, 'a'), throwsArgumentError);
244 }); 258 });
245 259
246 test('Join does not modify internal ., .., or trailing separators', () { 260 test('does not modify internal ., .., or trailing separators', () {
247 expect(context.join('a/', 'b/c/'), 'a/b/c/'); 261 expect(context.join('a/', 'b/c/'), 'a/b/c/');
248 expect(context.join('a/b/./c/..//', 'd/.././..//e/f//'), 262 expect(context.join('a/b/./c/..//', 'd/.././..//e/f//'),
249 'a/b/./c/..//d/.././..//e/f//'); 263 'a/b/./c/..//d/.././..//e/f//');
250 expect(context.join('a/b', 'c/../../../..'), 'a/b/c/../../../..'); 264 expect(context.join('a/b', 'c/../../../..'), 'a/b/c/../../../..');
251 expect(context.join('a', 'b${context.separator}'), 'a/b/'); 265 expect(context.join('a', 'b${context.separator}'), 'a/b/');
252 }); 266 });
267
268 test('treats drive letters as part of the root for file: URLs', () {
269 expect(context.join('file:///c:/foo/bar', '/baz/qux'),
270 'file:///c:/baz/qux');
271 expect(context.join('file:///D:/foo/bar', '/baz/qux'),
272 'file:///D:/baz/qux');
273 expect(context.join('file:///c:/', '/baz/qux'), 'file:///c:/baz/qux');
274 expect(context.join('file:///c:', '/baz/qux'), 'file:///c:/baz/qux');
275 expect(context.join('file://host/c:/foo/bar', '/baz/qux'),
276 'file://host/c:/baz/qux');
277 });
278
279 test('treats drive letters as normal components for non-file: URLs', () {
280 expect(context.join('http://foo.com/c:/foo/bar', '/baz/qux'),
281 'http://foo.com/baz/qux');
282 expect(context.join('misfile:///c:/foo/bar', '/baz/qux'),
283 'misfile:///baz/qux');
284 expect(context.join('filer:///c:/foo/bar', '/baz/qux'),
285 'filer:///baz/qux');
286 });
253 }); 287 });
254 288
255 group('joinAll', () { 289 group('joinAll', () {
256 test('allows more than eight parts', () { 290 test('allows more than eight parts', () {
257 expect(context.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']), 291 expect(context.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
258 'a/b/c/d/e/f/g/h/i'); 292 'a/b/c/d/e/f/g/h/i');
259 }); 293 });
260 294
261 test('ignores parts before an absolute path', () { 295 test('ignores parts before an absolute path', () {
262 expect(context.joinAll(['a', 'http://dartlang.org', 'b', 'c']), 296 expect(context.joinAll(['a', 'http://dartlang.org', 'b', 'c']),
263 'http://dartlang.org/b/c'); 297 'http://dartlang.org/b/c');
264 expect(context.joinAll(['a', 'file://', 'b', 'c']), 'file:///b/c'); 298 expect(context.joinAll(['a', 'file://', 'b', 'c']), 'file:///b/c');
265 expect(context.joinAll(['a', '/', 'b', 'c']), '/b/c'); 299 expect(context.joinAll(['a', '/', 'b', 'c']), '/b/c');
266 expect(context.joinAll(['a', '/b', 'http://dartlang.org/c', 'd']), 300 expect(context.joinAll(['a', '/b', 'http://dartlang.org/c', 'd']),
267 'http://dartlang.org/c/d'); 301 'http://dartlang.org/c/d');
268 expect(context.joinAll([ 302 expect(context.joinAll([
269 'a', 303 'a',
270 'http://google.com/b', 304 'http://google.com/b',
271 'http://dartlang.org/c', 305 'http://dartlang.org/c',
272 'd' 306 'd'
273 ]), 'http://dartlang.org/c/d'); 307 ]), 'http://dartlang.org/c/d');
274 expect(context.joinAll(['a', '/b', '/c', 'd']), '/c/d'); 308 expect(context.joinAll(['a', '/b', '/c', 'd']), '/c/d');
275 expect(context.joinAll(['a', r'c:\b', 'c', 'd']), r'a/c:\b/c/d'); 309 expect(context.joinAll(['a', r'c:\b', 'c', 'd']), r'c:\b/c/d');
310 expect(context.joinAll(['a', 'package:foo/bar', 'c', 'd']),
311 r'package:foo/bar/c/d');
276 expect(context.joinAll(['a', r'\\b', 'c', 'd']), r'a/\\b/c/d'); 312 expect(context.joinAll(['a', r'\\b', 'c', 'd']), r'a/\\b/c/d');
277 }); 313 });
278 314
279 test('preserves roots before a root-relative path', () { 315 test('preserves roots before a root-relative path', () {
280 expect(context.joinAll(['http://dartlang.org', 'a', '/b', 'c']), 316 expect(context.joinAll(['http://dartlang.org', 'a', '/b', 'c']),
281 'http://dartlang.org/b/c'); 317 'http://dartlang.org/b/c');
282 expect(context.joinAll(['file://', 'a', '/b', 'c']), 'file:///b/c'); 318 expect(context.joinAll(['file://', 'a', '/b', 'c']), 'file:///b/c');
283 expect(context.joinAll(['file://', 'a', '/b', 'c', '/d']), 'file:///d'); 319 expect(context.joinAll(['file://', 'a', '/b', 'c', '/d']), 'file:///d');
284 }); 320 });
285 }); 321 });
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 expect(context.normalize('file:///..'), 'file://'); 412 expect(context.normalize('file:///..'), 'file://');
377 expect(context.normalize('/..'), '/'); 413 expect(context.normalize('/..'), '/');
378 expect(context.normalize('http://dartlang.org/../../..'), 414 expect(context.normalize('http://dartlang.org/../../..'),
379 'http://dartlang.org'); 415 'http://dartlang.org');
380 expect(context.normalize('file:///../../..'), 'file://'); 416 expect(context.normalize('file:///../../..'), 'file://');
381 expect(context.normalize('/../../..'), '/'); 417 expect(context.normalize('/../../..'), '/');
382 expect(context.normalize('http://dartlang.org/../../../a'), 418 expect(context.normalize('http://dartlang.org/../../../a'),
383 'http://dartlang.org/a'); 419 'http://dartlang.org/a');
384 expect(context.normalize('file:///../../../a'), 'file:///a'); 420 expect(context.normalize('file:///../../../a'), 'file:///a');
385 expect(context.normalize('/../../../a'), '/a'); 421 expect(context.normalize('/../../../a'), '/a');
386 expect(context.normalize('c:/..'), '.'); 422 expect(context.normalize('c:/..'), 'c:');
387 expect(context.normalize('A:/../../..'), '../..'); 423 expect(context.normalize('package:foo/..'), 'package:foo');
424 expect(context.normalize('A:/../../..'), 'A:');
388 expect(context.normalize('a/..'), '.'); 425 expect(context.normalize('a/..'), '.');
389 expect(context.normalize('a/b/..'), 'a'); 426 expect(context.normalize('a/b/..'), 'a');
390 expect(context.normalize('a/../b'), 'b'); 427 expect(context.normalize('a/../b'), 'b');
391 expect(context.normalize('a/./../b'), 'b'); 428 expect(context.normalize('a/./../b'), 'b');
392 expect(context.normalize('a/b/c/../../d/e/..'), 'a/d'); 429 expect(context.normalize('a/b/c/../../d/e/..'), 'a/d');
393 expect(context.normalize('a/b/../../../../c'), '../../c'); 430 expect(context.normalize('a/b/../../../../c'), '../../c');
394 expect(context.normalize('z/a/b/../../..\../c'), 'z/..\../c'); 431 expect(context.normalize('z/a/b/../../..\../c'), 'z/..\../c');
395 expect(context.normalize('a/b\c/../d'), 'a/d'); 432 expect(context.normalize('a/b\c/../d'), 'a/d');
396 }); 433 });
397 434
398 test('does not walk before root on absolute paths', () { 435 test('does not walk before root on absolute paths', () {
399 expect(context.normalize('..'), '..'); 436 expect(context.normalize('..'), '..');
400 expect(context.normalize('../'), '..'); 437 expect(context.normalize('../'), '..');
401 expect( 438 expect(
402 context.normalize('http://dartlang.org/..'), 'http://dartlang.org'); 439 context.normalize('http://dartlang.org/..'), 'http://dartlang.org');
403 expect(context.normalize('http://dartlang.org/../a'), 440 expect(context.normalize('http://dartlang.org/../a'),
404 'http://dartlang.org/a'); 441 'http://dartlang.org/a');
405 expect(context.normalize('file:///..'), 'file://'); 442 expect(context.normalize('file:///..'), 'file://');
406 expect(context.normalize('file:///../a'), 'file:///a'); 443 expect(context.normalize('file:///../a'), 'file:///a');
407 expect(context.normalize('/..'), '/'); 444 expect(context.normalize('/..'), '/');
408 expect(context.normalize('a/..'), '.'); 445 expect(context.normalize('a/..'), '.');
409 expect(context.normalize('../a'), '../a'); 446 expect(context.normalize('../a'), '../a');
410 expect(context.normalize('/../a'), '/a'); 447 expect(context.normalize('/../a'), '/a');
411 expect(context.normalize('c:/../a'), 'a'); 448 expect(context.normalize('c:/../a'), 'c:/a');
449 expect(context.normalize('package:foo/../a'), 'package:foo/a');
412 expect(context.normalize('/../a'), '/a'); 450 expect(context.normalize('/../a'), '/a');
413 expect(context.normalize('a/b/..'), 'a'); 451 expect(context.normalize('a/b/..'), 'a');
414 expect(context.normalize('../a/b/..'), '../a'); 452 expect(context.normalize('../a/b/..'), '../a');
415 expect(context.normalize('a/../b'), 'b'); 453 expect(context.normalize('a/../b'), 'b');
416 expect(context.normalize('a/./../b'), 'b'); 454 expect(context.normalize('a/./../b'), 'b');
417 expect(context.normalize('a/b/c/../../d/e/..'), 'a/d'); 455 expect(context.normalize('a/b/c/../../d/e/..'), 'a/d');
418 expect(context.normalize('a/b/../../../../c'), '../../c'); 456 expect(context.normalize('a/b/../../../../c'), '../../c');
419 expect(context.normalize('a/b/c/../../..d/./.e/f././'), 'a/..d/.e/f.'); 457 expect(context.normalize('a/b/c/../../..d/./.e/f././'), 'a/..d/.e/f.');
420 }); 458 });
421 459
422 test('removes trailing separators', () { 460 test('removes trailing separators', () {
423 expect(context.normalize('./'), '.'); 461 expect(context.normalize('./'), '.');
424 expect(context.normalize('.//'), '.'); 462 expect(context.normalize('.//'), '.');
425 expect(context.normalize('a/'), 'a'); 463 expect(context.normalize('a/'), 'a');
426 expect(context.normalize('a/b/'), 'a/b'); 464 expect(context.normalize('a/b/'), 'a/b');
427 expect(context.normalize(r'a/b\'), r'a/b\'); 465 expect(context.normalize(r'a/b\'), r'a/b\');
428 expect(context.normalize('a/b///'), 'a/b'); 466 expect(context.normalize('a/b///'), 'a/b');
429 }); 467 });
468
469 test('when canonicalizing', () {
470 expect(context.canonicalize('.'), 'http://dartlang.org/root/path');
471 expect(context.canonicalize('foo/bar'),
472 'http://dartlang.org/root/path/foo/bar');
473 expect(context.canonicalize('FoO'), 'http://dartlang.org/root/path/FoO');
474 expect(context.canonicalize('/foo'), 'http://dartlang.org/foo');
475 expect(context.canonicalize('http://google.com/foo'),
476 'http://google.com/foo');
477 });
430 }); 478 });
431 479
432 group('relative', () { 480 group('relative', () {
433 group('from absolute root', () { 481 group('from absolute root', () {
434 test('given absolute path in root', () { 482 test('given absolute path in root', () {
435 expect(context.relative('http://dartlang.org'), '../..'); 483 expect(context.relative('http://dartlang.org'), '../..');
436 expect(context.relative('http://dartlang.org/'), '../..'); 484 expect(context.relative('http://dartlang.org/'), '../..');
437 expect(context.relative('/'), '../..'); 485 expect(context.relative('/'), '../..');
438 expect(context.relative('http://dartlang.org/root'), '..'); 486 expect(context.relative('http://dartlang.org/root'), '..');
439 expect(context.relative('/root'), '..'); 487 expect(context.relative('/root'), '..');
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // The path is considered relative to the root, so it basically just 520 // The path is considered relative to the root, so it basically just
473 // normalizes. 521 // normalizes.
474 expect(context.relative(''), '.'); 522 expect(context.relative(''), '.');
475 expect(context.relative('.'), '.'); 523 expect(context.relative('.'), '.');
476 expect(context.relative('a'), 'a'); 524 expect(context.relative('a'), 'a');
477 expect(context.relative('a/b.txt'), 'a/b.txt'); 525 expect(context.relative('a/b.txt'), 'a/b.txt');
478 expect(context.relative('../a/b.txt'), '../a/b.txt'); 526 expect(context.relative('../a/b.txt'), '../a/b.txt');
479 expect(context.relative('a/./b/../c.txt'), 'a/c.txt'); 527 expect(context.relative('a/./b/../c.txt'), 'a/c.txt');
480 }); 528 });
481 529
530 test('is case-sensitive', () {
531 expect(context.relative('HtTp://dartlang.org/root'),
532 'HtTp://dartlang.org/root');
533 expect(context.relative('http://DaRtLaNg.OrG/root'),
534 'http://DaRtLaNg.OrG/root');
535 expect(context.relative('/RoOt'), '../../RoOt');
536 expect(context.relative('/rOoT/pAtH/a'), '../../rOoT/pAtH/a');
537 });
538
482 // Regression 539 // Regression
483 test('from root-only path', () { 540 test('from root-only path', () {
484 expect(context.relative('http://dartlang.org', 541 expect(context.relative('http://dartlang.org',
485 from: 'http://dartlang.org'), '.'); 542 from: 'http://dartlang.org'), '.');
486 expect(context.relative('http://dartlang.org/root/path', 543 expect(context.relative('http://dartlang.org/root/path',
487 from: 'http://dartlang.org'), 'root/path'); 544 from: 'http://dartlang.org'), 'root/path');
488 }); 545 });
489 }); 546 });
490 547
491 group('from relative root', () { 548 group('from relative root', () {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 var r = new path.Context(style: path.Style.url, current: 'foo/bar'); 715 var r = new path.Context(style: path.Style.url, current: 'foo/bar');
659 expect(r.isWithin('.', 'a/b/c'), isTrue); 716 expect(r.isWithin('.', 'a/b/c'), isTrue);
660 expect(r.isWithin('.', '../a/b/c'), isFalse); 717 expect(r.isWithin('.', '../a/b/c'), isFalse);
661 expect(r.isWithin('.', '../../a/foo/b/c'), isFalse); 718 expect(r.isWithin('.', '../../a/foo/b/c'), isFalse);
662 expect(r.isWithin('http://dartlang.org/', 'http://dartlang.org/baz/bang'), 719 expect(r.isWithin('http://dartlang.org/', 'http://dartlang.org/baz/bang'),
663 isTrue); 720 isTrue);
664 expect(r.isWithin('.', 'http://dartlang.org/baz/bang'), isFalse); 721 expect(r.isWithin('.', 'http://dartlang.org/baz/bang'), isFalse);
665 }); 722 });
666 }); 723 });
667 724
725 group('equals and hash', () {
726 test('simple cases', () {
727 expectEquals(context, 'foo/bar', 'foo/bar');
728 expectNotEquals(context, 'foo/bar', 'foo/bar/baz');
729 expectNotEquals(context, 'foo/bar', 'foo');
730 expectNotEquals(context, 'foo/bar', 'foo/baz');
731 expectEquals(context, 'foo/bar', '../path/foo/bar');
732 expectEquals(context, 'http://google.com', 'http://google.com');
733 expectEquals(context, 'http://dartlang.org', '../..');
734 expectEquals(context, 'baz', '/root/path/baz');
735 });
736
737 test('complex cases', () {
738 expectEquals(context, 'foo/./bar', 'foo/bar');
739 expectEquals(context, 'foo//bar', 'foo/bar');
740 expectEquals(context, 'foo/qux/../bar', 'foo/bar');
741 expectNotEquals(context, 'foo/qux/../bar', 'foo/qux');
742 expectNotEquals(context, 'foo/bar', 'foo/bar/baz/../..');
743 expectEquals(context, 'foo/bar', 'foo/bar///');
744 expectEquals(context, 'foo/.bar', 'foo/.bar');
745 expectNotEquals(context, 'foo/./bar', 'foo/.bar');
746 expectEquals(context, 'foo/..bar', 'foo/..bar');
747 expectNotEquals(context, 'foo/../bar', 'foo/..bar');
748 expectEquals(context, 'foo/bar', 'foo/bar/baz/..');
749 expectNotEquals(context, 'FoO/bAr', 'foo/bar');
750 expectEquals(context, 'http://google.com', 'http://google.com/');
751 expectEquals(context, 'http://dartlang.org/root', '..');
752 });
753
754 test('with root-relative paths', () {
755 expectEquals(context, '/foo', 'http://dartlang.org/foo');
756 expectNotEquals(context, '/foo', 'http://google.com/foo');
757 expectEquals(context, '/root/path/foo/bar', 'foo/bar');
758 });
759
760 test('from a relative root', () {
761 var r = new path.Context(style: path.Style.posix, current: 'foo/bar');
762 expectEquals(r, 'a/b', 'a/b');
763 expectNotEquals(r, '.', 'foo/bar');
764 expectNotEquals(r, '.', '../a/b');
765 expectEquals(r, '.', '../bar');
766 expectEquals(r, '/baz/bang', '/baz/bang');
767 expectNotEquals(r, 'baz/bang', '/baz/bang');
768 });
769 });
770
668 group('absolute', () { 771 group('absolute', () {
669 test('allows up to seven parts', () { 772 test('allows up to seven parts', () {
670 expect(context.absolute('a'), 'http://dartlang.org/root/path/a'); 773 expect(context.absolute('a'), 'http://dartlang.org/root/path/a');
671 expect(context.absolute('a', 'b'), 'http://dartlang.org/root/path/a/b'); 774 expect(context.absolute('a', 'b'), 'http://dartlang.org/root/path/a/b');
672 expect(context.absolute('a', 'b', 'c'), 775 expect(context.absolute('a', 'b', 'c'),
673 'http://dartlang.org/root/path/a/b/c'); 776 'http://dartlang.org/root/path/a/b/c');
674 expect(context.absolute('a', 'b', 'c', 'd'), 777 expect(context.absolute('a', 'b', 'c', 'd'),
675 'http://dartlang.org/root/path/a/b/c/d'); 778 'http://dartlang.org/root/path/a/b/c/d');
676 expect(context.absolute('a', 'b', 'c', 'd', 'e'), 779 expect(context.absolute('a', 'b', 'c', 'd', 'e'),
677 'http://dartlang.org/root/path/a/b/c/d/e'); 780 'http://dartlang.org/root/path/a/b/c/d/e');
678 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f'), 781 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f'),
679 'http://dartlang.org/root/path/a/b/c/d/e/f'); 782 'http://dartlang.org/root/path/a/b/c/d/e/f');
680 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g'), 783 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g'),
681 'http://dartlang.org/root/path/a/b/c/d/e/f/g'); 784 'http://dartlang.org/root/path/a/b/c/d/e/f/g');
682 }); 785 });
683 786
684 test('does not add separator if a part ends in one', () { 787 test('does not add separator if a part ends in one', () {
685 expect(context.absolute('a/', 'b', 'c/', 'd'), 788 expect(context.absolute('a/', 'b', 'c/', 'd'),
686 'http://dartlang.org/root/path/a/b/c/d'); 789 'http://dartlang.org/root/path/a/b/c/d');
687 expect( 790 expect(
688 context.absolute(r'a\', 'b'), r'http://dartlang.org/root/path/a\/b'); 791 context.absolute(r'a\', 'b'), r'http://dartlang.org/root/path/a\/b');
689 }); 792 });
690 793
691 test('ignores parts before an absolute path', () { 794 test('ignores parts before an absolute path', () {
692 expect(context.absolute('a', '/b', '/c', 'd'), 'http://dartlang.org/c/d'); 795 expect(context.absolute('a', '/b', '/c', 'd'), 'http://dartlang.org/c/d');
693 expect(context.absolute('a', '/b', 'file:///c', 'd'), 'file:///c/d'); 796 expect(context.absolute('a', '/b', 'file:///c', 'd'), 'file:///c/d');
694 expect(context.absolute('a', r'c:\b', 'c', 'd'), 797 expect(context.absolute('a', r'c:\b', 'c', 'd'), r'c:\b/c/d');
695 r'http://dartlang.org/root/path/a/c:\b/c/d');
696 expect(context.absolute('a', r'\\b', 'c', 'd'), 798 expect(context.absolute('a', r'\\b', 'c', 'd'),
697 r'http://dartlang.org/root/path/a/\\b/c/d'); 799 r'http://dartlang.org/root/path/a/\\b/c/d');
698 }); 800 });
699 }); 801 });
700 802
701 test('withoutExtension', () { 803 test('withoutExtension', () {
702 expect(context.withoutExtension(''), ''); 804 expect(context.withoutExtension(''), '');
703 expect(context.withoutExtension('a'), 'a'); 805 expect(context.withoutExtension('a'), 'a');
704 expect(context.withoutExtension('.a'), '.a'); 806 expect(context.withoutExtension('.a'), '.a');
705 expect(context.withoutExtension('a.b'), 'a'); 807 expect(context.withoutExtension('a.b'), 'a');
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 884
783 test('with a root-relative URI', () { 885 test('with a root-relative URI', () {
784 expect(context.prettyUri('/a/b'), '/a/b'); 886 expect(context.prettyUri('/a/b'), '/a/b');
785 }); 887 });
786 888
787 test('with a Uri object', () { 889 test('with a Uri object', () {
788 expect(context.prettyUri(Uri.parse('a/b')), 'a/b'); 890 expect(context.prettyUri(Uri.parse('a/b')), 'a/b');
789 }); 891 });
790 }); 892 });
791 } 893 }
OLDNEW
« no previous file with comments | « packages/path/test/posix_test.dart ('k') | packages/path/test/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698