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

Side by Side Diff: packages/path/test/windows_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
« no previous file with comments | « packages/path/test/utils.dart ('k') | packages/petitparser/.gitignore » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library path.test.windows_test;
6
7 import 'package:unittest/unittest.dart';
8 import 'package:path/path.dart' as path;
9
10 import 'utils.dart';
11
12 main() {
13 var context =
14 new path.Context(style: path.Style.windows, current: r'C:\root\path');
15
16 group('separator', () {
17 expect(context.separator, '\\');
18 });
19
20 test('extension', () {
21 expect(context.extension(''), '');
22 expect(context.extension('.'), '');
23 expect(context.extension('..'), '');
24 expect(context.extension('a/..'), '');
25 expect(context.extension('foo.dart'), '.dart');
26 expect(context.extension('foo.dart.js'), '.js');
27 expect(context.extension('foo bar\gule fisk.dart.js'), '.js');
28 expect(context.extension(r'a.b\c'), '');
29 expect(context.extension('a.b/c.d'), '.d');
30 expect(context.extension(r'~\.bashrc'), '');
31 expect(context.extension(r'a.b/c'), r'');
32 expect(context.extension(r'foo.dart\'), '.dart');
33 expect(context.extension(r'foo.dart\\'), '.dart');
34 });
35
36 test('rootPrefix', () {
37 expect(context.rootPrefix(''), '');
38 expect(context.rootPrefix('a'), '');
39 expect(context.rootPrefix(r'a\b'), '');
40 expect(context.rootPrefix(r'C:\a\c'), r'C:\');
41 expect(context.rootPrefix('C:\\'), r'C:\');
42 expect(context.rootPrefix('C:/'), 'C:/');
43 expect(context.rootPrefix(r'\\server\share\a\b'), r'\\server\share');
44 expect(context.rootPrefix(r'\\server\share'), r'\\server\share');
45 expect(context.rootPrefix(r'\\server\'), r'\\server\');
46 expect(context.rootPrefix(r'\\server'), r'\\server');
47 expect(context.rootPrefix(r'\a\b'), r'\');
48 expect(context.rootPrefix(r'/a/b'), r'/');
49 expect(context.rootPrefix(r'\'), r'\');
50 expect(context.rootPrefix(r'/'), r'/');
51 });
52
53 test('dirname', () {
54 expect(context.dirname(r''), '.');
55 expect(context.dirname(r'a'), '.');
56 expect(context.dirname(r'a\b'), 'a');
57 expect(context.dirname(r'a\b\c'), r'a\b');
58 expect(context.dirname(r'a\b.c'), 'a');
59 expect(context.dirname(r'a\'), '.');
60 expect(context.dirname('a/'), '.');
61 expect(context.dirname(r'a\.'), 'a');
62 expect(context.dirname(r'a\b/c'), r'a\b');
63 expect(context.dirname(r'C:\a'), r'C:\');
64 expect(context.dirname(r'C:\\\a'), r'C:\');
65 expect(context.dirname(r'C:\'), r'C:\');
66 expect(context.dirname(r'C:\\\'), r'C:\');
67 expect(context.dirname(r'a\b\'), r'a');
68 expect(context.dirname(r'a/b\c'), 'a/b');
69 expect(context.dirname(r'a\\'), r'.');
70 expect(context.dirname(r'a\b\\'), 'a');
71 expect(context.dirname(r'a\\b'), 'a');
72 expect(context.dirname(r'foo bar\gule fisk'), 'foo bar');
73 expect(context.dirname(r'\\server\share'), r'\\server\share');
74 expect(context.dirname(r'\\server\share\dir'), r'\\server\share');
75 expect(context.dirname(r'\a'), r'\');
76 expect(context.dirname(r'/a'), r'/');
77 expect(context.dirname(r'\'), r'\');
78 expect(context.dirname(r'/'), r'/');
79 });
80
81 test('basename', () {
82 expect(context.basename(r''), '');
83 expect(context.basename(r'.'), '.');
84 expect(context.basename(r'..'), '..');
85 expect(context.basename(r'.hest'), '.hest');
86 expect(context.basename(r'a'), 'a');
87 expect(context.basename(r'a\b'), 'b');
88 expect(context.basename(r'a\b\c'), 'c');
89 expect(context.basename(r'a\b.c'), 'b.c');
90 expect(context.basename(r'a\'), 'a');
91 expect(context.basename(r'a/'), 'a');
92 expect(context.basename(r'a\.'), '.');
93 expect(context.basename(r'a\b/c'), r'c');
94 expect(context.basename(r'C:\a'), 'a');
95 expect(context.basename(r'C:\'), r'C:\');
96 expect(context.basename(r'a\b\'), 'b');
97 expect(context.basename(r'a/b\c'), 'c');
98 expect(context.basename(r'a\\'), 'a');
99 expect(context.basename(r'a\b\\'), 'b');
100 expect(context.basename(r'a\\b'), 'b');
101 expect(context.basename(r'a\\b'), 'b');
102 expect(context.basename(r'a\fisk hest.ma pa'), 'fisk hest.ma pa');
103 expect(context.basename(r'\\server\share'), r'\\server\share');
104 expect(context.basename(r'\\server\share\dir'), r'dir');
105 expect(context.basename(r'\a'), r'a');
106 expect(context.basename(r'/a'), r'a');
107 expect(context.basename(r'\'), r'\');
108 expect(context.basename(r'/'), r'/');
109 });
110
111 test('basenameWithoutExtension', () {
112 expect(context.basenameWithoutExtension(''), '');
113 expect(context.basenameWithoutExtension('.'), '.');
114 expect(context.basenameWithoutExtension('..'), '..');
115 expect(context.basenameWithoutExtension('.hest'), '.hest');
116 expect(context.basenameWithoutExtension('a'), 'a');
117 expect(context.basenameWithoutExtension(r'a\b'), 'b');
118 expect(context.basenameWithoutExtension(r'a\b\c'), 'c');
119 expect(context.basenameWithoutExtension(r'a\b.c'), 'b');
120 expect(context.basenameWithoutExtension(r'a\'), 'a');
121 expect(context.basenameWithoutExtension(r'a\.'), '.');
122 expect(context.basenameWithoutExtension(r'a\b/c'), r'c');
123 expect(context.basenameWithoutExtension(r'a\.bashrc'), '.bashrc');
124 expect(context.basenameWithoutExtension(r'a\b\c.d.e'), 'c.d');
125 expect(context.basenameWithoutExtension(r'a\\'), 'a');
126 expect(context.basenameWithoutExtension(r'a\b\\'), 'b');
127 expect(context.basenameWithoutExtension(r'a\\b'), 'b');
128 expect(context.basenameWithoutExtension(r'a\b.c\'), 'b');
129 expect(context.basenameWithoutExtension(r'a\b.c\\'), 'b');
130 expect(context.basenameWithoutExtension(r'C:\f h.ma pa.f s'), 'f h.ma pa');
131 });
132
133 test('isAbsolute', () {
134 expect(context.isAbsolute(''), false);
135 expect(context.isAbsolute('.'), false);
136 expect(context.isAbsolute('..'), false);
137 expect(context.isAbsolute('a'), false);
138 expect(context.isAbsolute(r'a\b'), false);
139 expect(context.isAbsolute(r'\a\b'), true);
140 expect(context.isAbsolute(r'\'), true);
141 expect(context.isAbsolute(r'/a/b'), true);
142 expect(context.isAbsolute(r'/'), true);
143 expect(context.isAbsolute('~'), false);
144 expect(context.isAbsolute('.'), false);
145 expect(context.isAbsolute(r'..\a'), false);
146 expect(context.isAbsolute(r'a:/a\b'), true);
147 expect(context.isAbsolute(r'D:/a/b'), true);
148 expect(context.isAbsolute(r'c:\'), true);
149 expect(context.isAbsolute(r'B:\'), true);
150 expect(context.isAbsolute(r'c:\a'), true);
151 expect(context.isAbsolute(r'C:\a'), true);
152 expect(context.isAbsolute(r'\\server\share'), true);
153 expect(context.isAbsolute(r'\\server\share\path'), true);
154 });
155
156 test('isRelative', () {
157 expect(context.isRelative(''), true);
158 expect(context.isRelative('.'), true);
159 expect(context.isRelative('..'), true);
160 expect(context.isRelative('a'), true);
161 expect(context.isRelative(r'a\b'), true);
162 expect(context.isRelative(r'\a\b'), false);
163 expect(context.isRelative(r'\'), false);
164 expect(context.isRelative(r'/a/b'), false);
165 expect(context.isRelative(r'/'), false);
166 expect(context.isRelative('~'), true);
167 expect(context.isRelative('.'), true);
168 expect(context.isRelative(r'..\a'), true);
169 expect(context.isRelative(r'a:/a\b'), false);
170 expect(context.isRelative(r'D:/a/b'), false);
171 expect(context.isRelative(r'c:\'), false);
172 expect(context.isRelative(r'B:\'), false);
173 expect(context.isRelative(r'c:\a'), false);
174 expect(context.isRelative(r'C:\a'), false);
175 expect(context.isRelative(r'\\server\share'), false);
176 expect(context.isRelative(r'\\server\share\path'), false);
177 });
178
179 test('isRootRelative', () {
180 expect(context.isRootRelative(''), false);
181 expect(context.isRootRelative('.'), false);
182 expect(context.isRootRelative('..'), false);
183 expect(context.isRootRelative('a'), false);
184 expect(context.isRootRelative(r'a\b'), false);
185 expect(context.isRootRelative(r'\a\b'), true);
186 expect(context.isRootRelative(r'\'), true);
187 expect(context.isRootRelative(r'/a/b'), true);
188 expect(context.isRootRelative(r'/'), true);
189 expect(context.isRootRelative('~'), false);
190 expect(context.isRootRelative('.'), false);
191 expect(context.isRootRelative(r'..\a'), false);
192 expect(context.isRootRelative(r'a:/a\b'), false);
193 expect(context.isRootRelative(r'D:/a/b'), false);
194 expect(context.isRootRelative(r'c:\'), false);
195 expect(context.isRootRelative(r'B:\'), false);
196 expect(context.isRootRelative(r'c:\a'), false);
197 expect(context.isRootRelative(r'C:\a'), false);
198 expect(context.isRootRelative(r'\\server\share'), false);
199 expect(context.isRootRelative(r'\\server\share\path'), false);
200 });
201
202 group('join', () {
203 test('allows up to eight parts', () {
204 expect(context.join('a'), 'a');
205 expect(context.join('a', 'b'), r'a\b');
206 expect(context.join('a', 'b', 'c'), r'a\b\c');
207 expect(context.join('a', 'b', 'c', 'd'), r'a\b\c\d');
208 expect(context.join('a', 'b', 'c', 'd', 'e'), r'a\b\c\d\e');
209 expect(context.join('a', 'b', 'c', 'd', 'e', 'f'), r'a\b\c\d\e\f');
210 expect(context.join('a', 'b', 'c', 'd', 'e', 'f', 'g'), r'a\b\c\d\e\f\g');
211 expect(context.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
212 r'a\b\c\d\e\f\g\h');
213 });
214
215 test('does not add separator if a part ends or begins in one', () {
216 expect(context.join(r'a\', 'b', r'c\', 'd'), r'a\b\c\d');
217 expect(context.join('a/', 'b'), r'a/b');
218 });
219
220 test('ignores parts before an absolute path', () {
221 expect(context.join('a', r'\b', r'\c', 'd'), r'\c\d');
222 expect(context.join('a', '/b', '/c', 'd'), r'/c\d');
223 expect(context.join('a', r'c:\b', 'c', 'd'), r'c:\b\c\d');
224 expect(context.join('a', r'\\b\c', r'\\d\e', 'f'), r'\\d\e\f');
225 expect(context.join('a', r'c:\b', r'\c', 'd'), r'c:\c\d');
226 expect(context.join('a', r'\\b\c\d', r'\e', 'f'), r'\\b\c\e\f');
227 });
228
229 test('ignores trailing nulls', () {
230 expect(context.join('a', null), equals('a'));
231 expect(context.join('a', 'b', 'c', null, null), equals(r'a\b\c'));
232 });
233
234 test('ignores empty strings', () {
235 expect(context.join(''), '');
236 expect(context.join('', ''), '');
237 expect(context.join('', 'a'), 'a');
238 expect(context.join('a', '', 'b', '', '', '', 'c'), r'a\b\c');
239 expect(context.join('a', 'b', ''), r'a\b');
240 });
241
242 test('disallows intermediate nulls', () {
243 expect(() => context.join('a', null, 'b'), throwsArgumentError);
244 expect(() => context.join(null, 'a'), throwsArgumentError);
245 });
246
247 test('join does not modify internal ., .., or trailing separators', () {
248 expect(context.join('a/', 'b/c/'), 'a/b/c/');
249 expect(context.join(r'a\b\./c\..\\', r'd\..\.\..\\e\f\\'),
250 r'a\b\./c\..\\d\..\.\..\\e\f\\');
251 expect(context.join(r'a\b', r'c\..\..\..\..'), r'a\b\c\..\..\..\..');
252 expect(context.join(r'a', 'b${context.separator}'), r'a\b\');
253 });
254 });
255
256 group('joinAll', () {
257 test('allows more than eight parts', () {
258 expect(context.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
259 r'a\b\c\d\e\f\g\h\i');
260 });
261
262 test('does not add separator if a part ends or begins in one', () {
263 expect(context.joinAll([r'a\', 'b', r'c\', 'd']), r'a\b\c\d');
264 expect(context.joinAll(['a/', 'b']), r'a/b');
265 });
266
267 test('ignores parts before an absolute path', () {
268 expect(context.joinAll(['a', r'\b', r'\c', 'd']), r'\c\d');
269 expect(context.joinAll(['a', '/b', '/c', 'd']), r'/c\d');
270 expect(context.joinAll(['a', r'c:\b', 'c', 'd']), r'c:\b\c\d');
271 expect(context.joinAll(['a', r'\\b\c', r'\\d\e', 'f']), r'\\d\e\f');
272 expect(context.joinAll(['a', r'c:\b', r'\c', 'd']), r'c:\c\d');
273 expect(context.joinAll(['a', r'\\b\c\d', r'\e', 'f']), r'\\b\c\e\f');
274 });
275 });
276
277 group('split', () {
278 test('simple cases', () {
279 expect(context.split(''), []);
280 expect(context.split('.'), ['.']);
281 expect(context.split('..'), ['..']);
282 expect(context.split('foo'), equals(['foo']));
283 expect(context.split(r'foo\bar.txt'), equals(['foo', 'bar.txt']));
284 expect(context.split(r'foo\bar/baz'), equals(['foo', 'bar', 'baz']));
285 expect(context.split(r'foo\..\bar\.\baz'),
286 equals(['foo', '..', 'bar', '.', 'baz']));
287 expect(context.split(r'foo\\bar\\\baz'), equals(['foo', 'bar', 'baz']));
288 expect(context.split(r'foo\/\baz'), equals(['foo', 'baz']));
289 expect(context.split('.'), equals(['.']));
290 expect(context.split(''), equals([]));
291 expect(context.split('foo/'), equals(['foo']));
292 expect(context.split(r'C:\'), equals([r'C:\']));
293 });
294
295 test('includes the root for absolute paths', () {
296 expect(context.split(r'C:\foo\bar\baz'),
297 equals([r'C:\', 'foo', 'bar', 'baz']));
298 expect(context.split(r'C:\\'), equals([r'C:\']));
299
300 expect(context.split(r'\\server\share\foo\bar\baz'),
301 equals([r'\\server\share', 'foo', 'bar', 'baz']));
302 expect(context.split(r'\\server\share'), equals([r'\\server\share']));
303
304 expect(
305 context.split(r'\foo\bar\baz'), equals([r'\', 'foo', 'bar', 'baz']));
306 expect(context.split(r'\'), equals([r'\']));
307 });
308 });
309
310 group('normalize', () {
311 test('simple cases', () {
312 expect(context.normalize(''), '.');
313 expect(context.normalize('.'), '.');
314 expect(context.normalize('..'), '..');
315 expect(context.normalize('a'), 'a');
316 expect(context.normalize('/a/b'), r'\a\b');
317 expect(context.normalize(r'\'), r'\');
318 expect(context.normalize(r'\a\b'), r'\a\b');
319 expect(context.normalize('/'), r'\');
320 expect(context.normalize('C:/'), r'C:\');
321 expect(context.normalize(r'C:\'), r'C:\');
322 expect(context.normalize(r'\\server\share'), r'\\server\share');
323 expect(context.normalize('a\\.\\\xc5\u0bf8-;\u{1f085}\u{00}\\c\\d\\..\\'),
324 'a\\\xc5\u0bf8-;\u{1f085}\u{00}\x5cc');
325 });
326
327 test('collapses redundant separators', () {
328 expect(context.normalize(r'a\b\c'), r'a\b\c');
329 expect(context.normalize(r'a\\b\\\c\\\\d'), r'a\b\c\d');
330 });
331
332 test('eliminates "." parts', () {
333 expect(context.normalize(r'.\'), '.');
334 expect(context.normalize(r'c:\.'), r'c:\');
335 expect(context.normalize(r'B:\.\'), r'B:\');
336 expect(context.normalize(r'\\server\share\.'), r'\\server\share');
337 expect(context.normalize(r'.\.'), '.');
338 expect(context.normalize(r'a\.\b'), r'a\b');
339 expect(context.normalize(r'a\.b\c'), r'a\.b\c');
340 expect(context.normalize(r'a\./.\b\.\c'), r'a\b\c');
341 expect(context.normalize(r'.\./a'), 'a');
342 expect(context.normalize(r'a/.\.'), 'a');
343 expect(context.normalize(r'\.'), r'\');
344 expect(context.normalize('/.'), r'\');
345 });
346
347 test('eliminates ".." parts', () {
348 expect(context.normalize('..'), '..');
349 expect(context.normalize(r'..\'), '..');
350 expect(context.normalize(r'..\..\..'), r'..\..\..');
351 expect(context.normalize(r'../..\..\'), r'..\..\..');
352 expect(context.normalize(r'\\server\share\..'), r'\\server\share');
353 expect(
354 context.normalize(r'\\server\share\..\../..\a'), r'\\server\share\a');
355 expect(context.normalize(r'c:\..'), r'c:\');
356 expect(context.normalize(r'A:/..\..\..'), r'A:\');
357 expect(context.normalize(r'b:\..\..\..\a'), r'b:\a');
358 expect(context.normalize(r'b:\r\..\..\..\a\c\.\..'), r'b:\a');
359 expect(context.normalize(r'a\..'), '.');
360 expect(context.normalize(r'..\a'), r'..\a');
361 expect(context.normalize(r'c:\..\a'), r'c:\a');
362 expect(context.normalize(r'\..\a'), r'\a');
363 expect(context.normalize(r'a\b\..'), 'a');
364 expect(context.normalize(r'..\a\b\..'), r'..\a');
365 expect(context.normalize(r'a\..\b'), 'b');
366 expect(context.normalize(r'a\.\..\b'), 'b');
367 expect(context.normalize(r'a\b\c\..\..\d\e\..'), r'a\d');
368 expect(context.normalize(r'a\b\..\..\..\..\c'), r'..\..\c');
369 expect(context.normalize(r'a/b/c/../../..d/./.e/f././'), r'a\..d\.e\f.');
370 });
371
372 test('removes trailing separators', () {
373 expect(context.normalize(r'.\'), '.');
374 expect(context.normalize(r'.\\'), '.');
375 expect(context.normalize(r'a/'), 'a');
376 expect(context.normalize(r'a\b\'), r'a\b');
377 expect(context.normalize(r'a\b\\\'), r'a\b');
378 });
379
380 test('normalizes separators', () {
381 expect(context.normalize(r'a/b\c'), r'a\b\c');
382 });
383 });
384
385 group('relative', () {
386 group('from absolute root', () {
387 test('given absolute path in root', () {
388 expect(context.relative(r'C:\'), r'..\..');
389 expect(context.relative(r'C:\root'), '..');
390 expect(context.relative(r'\root'), '..');
391 expect(context.relative(r'C:\root\path'), '.');
392 expect(context.relative(r'\root\path'), '.');
393 expect(context.relative(r'C:\root\path\a'), 'a');
394 expect(context.relative(r'\root\path\a'), 'a');
395 expect(context.relative(r'C:\root\path\a\b.txt'), r'a\b.txt');
396 expect(context.relative(r'C:\root\a\b.txt'), r'..\a\b.txt');
397 expect(context.relative(r'C:/'), r'..\..');
398 expect(context.relative(r'C:/root'), '..');
399 expect(context.relative(r'c:\'), r'..\..');
400 expect(context.relative(r'c:\root'), '..');
401 });
402
403 test('given absolute path outside of root', () {
404 expect(context.relative(r'C:\a\b'), r'..\..\a\b');
405 expect(context.relative(r'\a\b'), r'..\..\a\b');
406 expect(context.relative(r'C:\root\path\a'), 'a');
407 expect(context.relative(r'C:\root\path\a\b.txt'), r'a\b.txt');
408 expect(context.relative(r'C:\root\a\b.txt'), r'..\a\b.txt');
409 expect(context.relative(r'C:/a/b'), r'..\..\a\b');
410 expect(context.relative(r'C:/root/path/a'), 'a');
411 expect(context.relative(r'c:\a\b'), r'..\..\a\b');
412 expect(context.relative(r'c:\root\path\a'), 'a');
413 });
414
415 test('given absolute path on different drive', () {
416 expect(context.relative(r'D:\a\b'), r'D:\a\b');
417 });
418
419 test('given relative path', () {
420 // The path is considered relative to the root, so it basically just
421 // normalizes.
422 expect(context.relative(''), '.');
423 expect(context.relative('.'), '.');
424 expect(context.relative('a'), 'a');
425 expect(context.relative(r'a\b.txt'), r'a\b.txt');
426 expect(context.relative(r'..\a\b.txt'), r'..\a\b.txt');
427 expect(context.relative(r'a\.\b\..\c.txt'), r'a\c.txt');
428 });
429
430 // Regression
431 test('from root-only path', () {
432 expect(context.relative(r'C:\', from: r'C:\'), '.');
433 expect(context.relative(r'C:\root\path', from: r'C:\'), r'root\path');
434 });
435 });
436
437 group('from relative root', () {
438 var r = new path.Context(style: path.Style.windows, current: r'foo\bar');
439
440 test('given absolute path', () {
441 expect(r.relative(r'C:\'), equals(r'C:\'));
442 expect(r.relative(r'C:\a\b'), equals(r'C:\a\b'));
443 expect(r.relative(r'\'), equals(r'\'));
444 expect(r.relative(r'\a\b'), equals(r'\a\b'));
445 });
446
447 test('given relative path', () {
448 // The path is considered relative to the root, so it basically just
449 // normalizes.
450 expect(r.relative(''), '.');
451 expect(r.relative('.'), '.');
452 expect(r.relative('..'), '..');
453 expect(r.relative('a'), 'a');
454 expect(r.relative(r'a\b.txt'), r'a\b.txt');
455 expect(r.relative(r'..\a/b.txt'), r'..\a\b.txt');
456 expect(r.relative(r'a\./b\../c.txt'), r'a\c.txt');
457 });
458 });
459
460 group('from root-relative root', () {
461 var r = new path.Context(style: path.Style.windows, current: r'\foo\bar');
462
463 test('given absolute path', () {
464 expect(r.relative(r'C:\'), equals(r'C:\'));
465 expect(r.relative(r'C:\a\b'), equals(r'C:\a\b'));
466 expect(r.relative(r'\'), equals(r'..\..'));
467 expect(r.relative(r'\a\b'), equals(r'..\..\a\b'));
468 expect(r.relative('/'), equals(r'..\..'));
469 expect(r.relative('/a/b'), equals(r'..\..\a\b'));
470 });
471
472 test('given relative path', () {
473 // The path is considered relative to the root, so it basically just
474 // normalizes.
475 expect(r.relative(''), '.');
476 expect(r.relative('.'), '.');
477 expect(r.relative('..'), '..');
478 expect(r.relative('a'), 'a');
479 expect(r.relative(r'a\b.txt'), r'a\b.txt');
480 expect(r.relative(r'..\a/b.txt'), r'..\a\b.txt');
481 expect(r.relative(r'a\./b\../c.txt'), r'a\c.txt');
482 });
483 });
484
485 test('from a root with extension', () {
486 var r =
487 new path.Context(style: path.Style.windows, current: r'C:\dir.ext');
488 expect(r.relative(r'C:\dir.ext\file'), 'file');
489 });
490
491 test('with a root parameter', () {
492 expect(context.relative(r'C:\foo\bar\baz', from: r'C:\foo\bar'),
493 equals('baz'));
494 expect(
495 context.relative('..', from: r'C:\foo\bar'), equals(r'..\..\root'));
496 expect(context.relative('..', from: r'D:\foo\bar'), equals(r'C:\root'));
497 expect(context.relative(r'C:\foo\bar\baz', from: r'foo\bar'),
498 equals(r'..\..\..\..\foo\bar\baz'));
499 expect(context.relative('..', from: r'foo\bar'), equals(r'..\..\..'));
500 });
501
502 test('with a root parameter and a relative root', () {
503 var r = new path.Context(
504 style: path.Style.windows, current: r'relative\root');
505 expect(r.relative(r'C:\foo\bar\baz', from: r'C:\foo\bar'), equals('baz'));
506 expect(() => r.relative('..', from: r'C:\foo\bar'), throwsPathException);
507 expect(r.relative(r'C:\foo\bar\baz', from: r'foo\bar'),
508 equals(r'C:\foo\bar\baz'));
509 expect(r.relative('..', from: r'foo\bar'), equals(r'..\..\..'));
510 });
511
512 test('given absolute with different root prefix', () {
513 expect(context.relative(r'D:\a\b'), r'D:\a\b');
514 expect(context.relative(r'\\server\share\a\b'), r'\\server\share\a\b');
515 });
516
517 test('from a . root', () {
518 var r = new path.Context(style: path.Style.windows, current: '.');
519 expect(r.relative(r'C:\foo\bar\baz'), equals(r'C:\foo\bar\baz'));
520 expect(r.relative(r'foo\bar\baz'), equals(r'foo\bar\baz'));
521 expect(r.relative(r'\foo\bar\baz'), equals(r'\foo\bar\baz'));
522 });
523 });
524
525 group('isWithin', () {
526 test('simple cases', () {
527 expect(context.isWithin(r'foo\bar', r'foo\bar'), isFalse);
528 expect(context.isWithin(r'foo\bar', r'foo\bar\baz'), isTrue);
529 expect(context.isWithin(r'foo\bar', r'foo\baz'), isFalse);
530 expect(context.isWithin(r'foo\bar', r'..\path\foo\bar\baz'), isTrue);
531 expect(context.isWithin(r'C:\', r'C:\foo\bar'), isTrue);
532 expect(context.isWithin(r'C:\', r'D:\foo\bar'), isFalse);
533 expect(context.isWithin(r'C:\', r'\foo\bar'), isTrue);
534 expect(context.isWithin(r'C:\foo', r'\foo\bar'), isTrue);
535 expect(context.isWithin(r'C:\foo', r'\bar\baz'), isFalse);
536 expect(context.isWithin(r'baz', r'C:\root\path\baz\bang'), isTrue);
537 expect(context.isWithin(r'baz', r'C:\root\path\bang\baz'), isFalse);
538 });
539
540 test('from a relative root', () {
541 var r = new path.Context(style: path.Style.windows, current: r'foo\bar');
542 expect(r.isWithin('.', r'a\b\c'), isTrue);
543 expect(r.isWithin('.', r'..\a\b\c'), isFalse);
544 expect(r.isWithin('.', r'..\..\a\foo\b\c'), isFalse);
545 expect(r.isWithin(r'C:\', r'C:\baz\bang'), isTrue);
546 expect(r.isWithin('.', r'C:\baz\bang'), isFalse);
547 });
548 });
549
550 group('absolute', () {
551 test('allows up to seven parts', () {
552 expect(context.absolute('a'), r'C:\root\path\a');
553 expect(context.absolute('a', 'b'), r'C:\root\path\a\b');
554 expect(context.absolute('a', 'b', 'c'), r'C:\root\path\a\b\c');
555 expect(context.absolute('a', 'b', 'c', 'd'), r'C:\root\path\a\b\c\d');
556 expect(
557 context.absolute('a', 'b', 'c', 'd', 'e'), r'C:\root\path\a\b\c\d\e');
558 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f'),
559 r'C:\root\path\a\b\c\d\e\f');
560 expect(context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g'),
561 r'C:\root\path\a\b\c\d\e\f\g');
562 });
563
564 test('does not add separator if a part ends in one', () {
565 expect(context.absolute(r'a\', 'b', r'c\', 'd'), r'C:\root\path\a\b\c\d');
566 expect(context.absolute('a/', 'b'), r'C:\root\path\a/b');
567 });
568
569 test('ignores parts before an absolute path', () {
570 expect(context.absolute('a', '/b', '/c', 'd'), r'C:\c\d');
571 expect(context.absolute('a', r'\b', r'\c', 'd'), r'C:\c\d');
572 expect(context.absolute('a', r'c:\b', 'c', 'd'), r'c:\b\c\d');
573 expect(context.absolute('a', r'\\b\c', r'\\d\e', 'f'), r'\\d\e\f');
574 });
575 });
576
577 test('withoutExtension', () {
578 expect(context.withoutExtension(''), '');
579 expect(context.withoutExtension('a'), 'a');
580 expect(context.withoutExtension('.a'), '.a');
581 expect(context.withoutExtension('a.b'), 'a');
582 expect(context.withoutExtension(r'a\b.c'), r'a\b');
583 expect(context.withoutExtension(r'a\b.c.d'), r'a\b.c');
584 expect(context.withoutExtension(r'a\'), r'a\');
585 expect(context.withoutExtension(r'a\b\'), r'a\b\');
586 expect(context.withoutExtension(r'a\.'), r'a\.');
587 expect(context.withoutExtension(r'a\.b'), r'a\.b');
588 expect(context.withoutExtension(r'a.b\c'), r'a.b\c');
589 expect(context.withoutExtension(r'a/b.c/d'), r'a/b.c/d');
590 expect(context.withoutExtension(r'a\b/c'), r'a\b/c');
591 expect(context.withoutExtension(r'a\b/c.d'), r'a\b/c');
592 expect(context.withoutExtension(r'a.b/c'), r'a.b/c');
593 expect(context.withoutExtension(r'a\b.c\'), r'a\b\');
594 });
595
596 group('fromUri', () {
597 test('with a URI', () {
598 expect(context.fromUri(Uri.parse('file:///C:/path/to/foo')),
599 r'C:\path\to\foo');
600 expect(context.fromUri(Uri.parse('file://server/share/path/to/foo')),
601 r'\\server\share\path\to\foo');
602 expect(context.fromUri(Uri.parse('file:///C:/')), r'C:\');
603 expect(
604 context.fromUri(Uri.parse('file://server/share')), r'\\server\share');
605 expect(context.fromUri(Uri.parse('foo/bar')), r'foo\bar');
606 expect(context.fromUri(Uri.parse('/C:/path/to/foo')), r'C:\path\to\foo');
607 expect(
608 context.fromUri(Uri.parse('///C:/path/to/foo')), r'C:\path\to\foo');
609 expect(context.fromUri(Uri.parse('//server/share/path/to/foo')),
610 r'\\server\share\path\to\foo');
611 expect(context.fromUri(Uri.parse('file:///C:/path/to/foo%23bar')),
612 r'C:\path\to\foo#bar');
613 expect(
614 context.fromUri(Uri.parse('file://server/share/path/to/foo%23bar')),
615 r'\\server\share\path\to\foo#bar');
616 expect(context.fromUri(Uri.parse('_%7B_%7D_%60_%5E_%20_%22_%25_')),
617 r'_{_}_`_^_ _"_%_');
618 expect(() => context.fromUri(Uri.parse('http://dartlang.org')),
619 throwsArgumentError);
620 });
621
622 test('with a string', () {
623 expect(context.fromUri('file:///C:/path/to/foo'), r'C:\path\to\foo');
624 });
625 });
626
627 test('toUri', () {
628 expect(
629 context.toUri(r'C:\path\to\foo'), Uri.parse('file:///C:/path/to/foo'));
630 expect(context.toUri(r'C:\path\to\foo\'),
631 Uri.parse('file:///C:/path/to/foo/'));
632 expect(context.toUri(r'path\to\foo\'), Uri.parse('path/to/foo/'));
633 expect(context.toUri(r'C:\'), Uri.parse('file:///C:/'));
634 expect(context.toUri(r'\\server\share'), Uri.parse('file://server/share'));
635 expect(
636 context.toUri(r'\\server\share\'), Uri.parse('file://server/share/'));
637 expect(context.toUri(r'foo\bar'), Uri.parse('foo/bar'));
638 expect(context.toUri(r'C:\path\to\foo#bar'),
639 Uri.parse('file:///C:/path/to/foo%23bar'));
640 expect(context.toUri(r'\\server\share\path\to\foo#bar'),
641 Uri.parse('file://server/share/path/to/foo%23bar'));
642 expect(context.toUri(r'C:\_{_}_`_^_ _"_%_'),
643 Uri.parse('file:///C:/_%7B_%7D_%60_%5E_%20_%22_%25_'));
644 expect(context.toUri(r'_{_}_`_^_ _"_%_'),
645 Uri.parse('_%7B_%7D_%60_%5E_%20_%22_%25_'));
646 });
647
648 group('prettyUri', () {
649 test('with a file: URI', () {
650 expect(context.prettyUri('file:///C:/root/path/a/b'), r'a\b');
651 expect(context.prettyUri('file:///C:/root/path/a/../b'), r'b');
652 expect(
653 context.prettyUri('file:///C:/other/path/a/b'), r'C:\other\path\a\b');
654 expect(
655 context.prettyUri('file:///D:/root/path/a/b'), r'D:\root\path\a\b');
656 expect(context.prettyUri('file:///C:/root/other'), r'..\other');
657 });
658
659 test('with an http: URI', () {
660 expect(context.prettyUri('http://dartlang.org/a/b'),
661 'http://dartlang.org/a/b');
662 });
663
664 test('with a relative URI', () {
665 expect(context.prettyUri('a/b'), r'a\b');
666 });
667
668 test('with a root-relative URI', () {
669 expect(context.prettyUri('/D:/a/b'), r'D:\a\b');
670 });
671
672 test('with a Uri object', () {
673 expect(context.prettyUri(Uri.parse('a/b')), r'a\b');
674 });
675 });
676 }
OLDNEW
« no previous file with comments | « packages/path/test/utils.dart ('k') | packages/petitparser/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698