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

Side by Side Diff: pkg/path/test/posix_test.dart

Issue 19231002: Port dart:io Path tests to package:path. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address comments Created 7 years, 5 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 | Annotate | Revision Log
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 library path.test.posix_test; 5 library path.test.posix_test;
6 6
7 import 'package:unittest/unittest.dart'; 7 import 'package:unittest/unittest.dart';
8 import 'package:path/path.dart' as path; 8 import 'package:path/path.dart' as path;
9 9
10 main() { 10 main() {
11 var builder = new path.Builder(style: path.Style.posix, root: '/root/path'); 11 var builder = new path.Builder(style: path.Style.posix, root: '/root/path');
12 12
13 if (new path.Builder().style == path.Style.posix) { 13 if (new path.Builder().style == path.Style.posix) {
14 group('absolute', () { 14 group('absolute', () {
15 expect(path.absolute('a/b.txt'), path.join(path.current, 'a/b.txt')); 15 expect(path.absolute('a/b.txt'), path.join(path.current, 'a/b.txt'));
16 expect(path.absolute('/a/b.txt'), '/a/b.txt'); 16 expect(path.absolute('/a/b.txt'), '/a/b.txt');
17 }); 17 });
18 } 18 }
19 19
20 test('separator', () { 20 test('separator', () {
21 expect(builder.separator, '/'); 21 expect(builder.separator, '/');
22 }); 22 });
23 23
24 test('extension', () { 24 test('extension', () {
25 expect(builder.extension(''), ''); 25 expect(builder.extension(''), '');
26 expect(builder.extension('.'), '');
27 expect(builder.extension('..'), '');
26 expect(builder.extension('foo.dart'), '.dart'); 28 expect(builder.extension('foo.dart'), '.dart');
27 expect(builder.extension('foo.dart.js'), '.js'); 29 expect(builder.extension('foo.dart.js'), '.js');
28 expect(builder.extension('a.b/c'), ''); 30 expect(builder.extension('a.b/c'), '');
29 expect(builder.extension('a.b/c.d'), '.d'); 31 expect(builder.extension('a.b/c.d'), '.d');
30 expect(builder.extension('~/.bashrc'), ''); 32 expect(builder.extension('~/.bashrc'), '');
31 expect(builder.extension(r'a.b\c'), r'.b\c'); 33 expect(builder.extension(r'a.b\c'), r'.b\c');
32 }); 34 });
33 35
34 test('rootPrefix', () { 36 test('rootPrefix', () {
35 expect(builder.rootPrefix(''), ''); 37 expect(builder.rootPrefix(''), '');
36 expect(builder.rootPrefix('a'), ''); 38 expect(builder.rootPrefix('a'), '');
37 expect(builder.rootPrefix('a/b'), ''); 39 expect(builder.rootPrefix('a/b'), '');
38 expect(builder.rootPrefix('/a/c'), '/'); 40 expect(builder.rootPrefix('/a/c'), '/');
39 expect(builder.rootPrefix('/'), '/'); 41 expect(builder.rootPrefix('/'), '/');
40 }); 42 });
41 43
42 test('dirname', () { 44 test('dirname', () {
43 expect(builder.dirname(''), '.'); 45 expect(builder.dirname(''), '.');
46 expect(builder.dirname('.'), '.');
47 expect(builder.dirname('..'), '.');
48 expect(builder.dirname('../..'), '..');
44 expect(builder.dirname('a'), '.'); 49 expect(builder.dirname('a'), '.');
45 expect(builder.dirname('a/b'), 'a'); 50 expect(builder.dirname('a/b'), 'a');
46 expect(builder.dirname('a/b/c'), 'a/b'); 51 expect(builder.dirname('a/b/c'), 'a/b');
47 expect(builder.dirname('a/b.c'), 'a'); 52 expect(builder.dirname('a/b.c'), 'a');
48 expect(builder.dirname('a/'), '.'); 53 expect(builder.dirname('a/'), '.');
49 expect(builder.dirname('a/.'), 'a'); 54 expect(builder.dirname('a/.'), 'a');
55 expect(builder.dirname('a/..'), 'a');
50 expect(builder.dirname(r'a\b/c'), r'a\b'); 56 expect(builder.dirname(r'a\b/c'), r'a\b');
51 expect(builder.dirname('/a'), '/'); 57 expect(builder.dirname('/a'), '/');
52 expect(builder.dirname('///a'), '/'); 58 expect(builder.dirname('///a'), '/');
53 expect(builder.dirname('/'), '/'); 59 expect(builder.dirname('/'), '/');
54 expect(builder.dirname('///'), '/'); 60 expect(builder.dirname('///'), '/');
55 expect(builder.dirname('a/b/'), 'a'); 61 expect(builder.dirname('a/b/'), 'a');
56 expect(builder.dirname(r'a/b\c'), 'a'); 62 expect(builder.dirname(r'a/b\c'), 'a');
57 expect(builder.dirname('a//'), '.'); 63 expect(builder.dirname('a//'), '.');
58 expect(builder.dirname('a/b//'), 'a'); 64 expect(builder.dirname('a/b//'), 'a');
59 expect(builder.dirname('a//b'), 'a'); 65 expect(builder.dirname('a//b'), 'a');
60 }); 66 });
61 67
62 test('basename', () { 68 test('basename', () {
63 expect(builder.basename(''), ''); 69 expect(builder.basename(''), '');
70 expect(builder.basename('.'), '.');
71 expect(builder.basename('..'), '..');
72 expect(builder.basename('.foo'), '.foo');
64 expect(builder.basename('a'), 'a'); 73 expect(builder.basename('a'), 'a');
65 expect(builder.basename('a/b'), 'b'); 74 expect(builder.basename('a/b'), 'b');
66 expect(builder.basename('a/b/c'), 'c'); 75 expect(builder.basename('a/b/c'), 'c');
67 expect(builder.basename('a/b.c'), 'b.c'); 76 expect(builder.basename('a/b.c'), 'b.c');
68 expect(builder.basename('a/'), 'a'); 77 expect(builder.basename('a/'), 'a');
69 expect(builder.basename('a/.'), '.'); 78 expect(builder.basename('a/.'), '.');
79 expect(builder.basename('a/..'), '..');
70 expect(builder.basename(r'a\b/c'), 'c'); 80 expect(builder.basename(r'a\b/c'), 'c');
71 expect(builder.basename('/a'), 'a'); 81 expect(builder.basename('/a'), 'a');
72 expect(builder.basename('/'), '/'); 82 expect(builder.basename('/'), '/');
73 expect(builder.basename('a/b/'), 'b'); 83 expect(builder.basename('a/b/'), 'b');
74 expect(builder.basename(r'a/b\c'), r'b\c'); 84 expect(builder.basename(r'a/b\c'), r'b\c');
75 expect(builder.basename('a//'), 'a'); 85 expect(builder.basename('a//'), 'a');
76 expect(builder.basename('a/b//'), 'b'); 86 expect(builder.basename('a/b//'), 'b');
77 expect(builder.basename('a//b'), 'b'); 87 expect(builder.basename('a//b'), 'b');
78 }); 88 });
79 89
80 test('basenameWithoutExtension', () { 90 test('basenameWithoutExtension', () {
81 expect(builder.basenameWithoutExtension(''), ''); 91 expect(builder.basenameWithoutExtension(''), '');
92 expect(builder.basenameWithoutExtension('.'), '.');
93 expect(builder.basenameWithoutExtension('..'), '..');
82 expect(builder.basenameWithoutExtension('a'), 'a'); 94 expect(builder.basenameWithoutExtension('a'), 'a');
83 expect(builder.basenameWithoutExtension('a/b'), 'b'); 95 expect(builder.basenameWithoutExtension('a/b'), 'b');
84 expect(builder.basenameWithoutExtension('a/b/c'), 'c'); 96 expect(builder.basenameWithoutExtension('a/b/c'), 'c');
85 expect(builder.basenameWithoutExtension('a/b.c'), 'b'); 97 expect(builder.basenameWithoutExtension('a/b.c'), 'b');
86 expect(builder.basenameWithoutExtension('a/'), 'a'); 98 expect(builder.basenameWithoutExtension('a/'), 'a');
87 expect(builder.basenameWithoutExtension('a/.'), '.'); 99 expect(builder.basenameWithoutExtension('a/.'), '.');
88 expect(builder.basenameWithoutExtension(r'a/b\c'), r'b\c'); 100 expect(builder.basenameWithoutExtension(r'a/b\c'), r'b\c');
89 expect(builder.basenameWithoutExtension('a/.bashrc'), '.bashrc'); 101 expect(builder.basenameWithoutExtension('a/.bashrc'), '.bashrc');
90 expect(builder.basenameWithoutExtension('a/b/c.d.e'), 'c.d'); 102 expect(builder.basenameWithoutExtension('a/b/c.d.e'), 'c.d');
91 expect(builder.basenameWithoutExtension('a//'), 'a'); 103 expect(builder.basenameWithoutExtension('a//'), 'a');
92 expect(builder.basenameWithoutExtension('a/b//'), 'b'); 104 expect(builder.basenameWithoutExtension('a/b//'), 'b');
93 expect(builder.basenameWithoutExtension('a//b'), 'b'); 105 expect(builder.basenameWithoutExtension('a//b'), 'b');
94 expect(builder.basenameWithoutExtension('a/b.c/'), 'b'); 106 expect(builder.basenameWithoutExtension('a/b.c/'), 'b');
95 expect(builder.basenameWithoutExtension('a/b.c//'), 'b'); 107 expect(builder.basenameWithoutExtension('a/b.c//'), 'b');
108 expect(builder.basenameWithoutExtension('a/b c.d e'), 'b c');
96 }); 109 });
97 110
98 test('isAbsolute', () { 111 test('isAbsolute', () {
99 expect(builder.isAbsolute(''), false); 112 expect(builder.isAbsolute(''), false);
100 expect(builder.isAbsolute('a'), false); 113 expect(builder.isAbsolute('a'), false);
101 expect(builder.isAbsolute('a/b'), false); 114 expect(builder.isAbsolute('a/b'), false);
102 expect(builder.isAbsolute('/a'), true); 115 expect(builder.isAbsolute('/a'), true);
103 expect(builder.isAbsolute('/a/b'), true); 116 expect(builder.isAbsolute('/a/b'), true);
104 expect(builder.isAbsolute('~'), false); 117 expect(builder.isAbsolute('~'), false);
105 expect(builder.isAbsolute('.'), false); 118 expect(builder.isAbsolute('.'), false);
119 expect(builder.isAbsolute('..'), false);
120 expect(builder.isAbsolute('.foo'), false);
106 expect(builder.isAbsolute('../a'), false); 121 expect(builder.isAbsolute('../a'), false);
107 expect(builder.isAbsolute('C:/a'), false); 122 expect(builder.isAbsolute('C:/a'), false);
108 expect(builder.isAbsolute(r'C:\a'), false); 123 expect(builder.isAbsolute(r'C:\a'), false);
109 expect(builder.isAbsolute(r'\\a'), false); 124 expect(builder.isAbsolute(r'\\a'), false);
110 }); 125 });
111 126
112 test('isRelative', () { 127 test('isRelative', () {
113 expect(builder.isRelative(''), true); 128 expect(builder.isRelative(''), true);
114 expect(builder.isRelative('a'), true); 129 expect(builder.isRelative('a'), true);
115 expect(builder.isRelative('a/b'), true); 130 expect(builder.isRelative('a/b'), true);
116 expect(builder.isRelative('/a'), false); 131 expect(builder.isRelative('/a'), false);
117 expect(builder.isRelative('/a/b'), false); 132 expect(builder.isRelative('/a/b'), false);
118 expect(builder.isRelative('~'), true); 133 expect(builder.isRelative('~'), true);
119 expect(builder.isRelative('.'), true); 134 expect(builder.isRelative('.'), true);
135 expect(builder.isRelative('..'), true);
136 expect(builder.isRelative('.foo'), true);
120 expect(builder.isRelative('../a'), true); 137 expect(builder.isRelative('../a'), true);
121 expect(builder.isRelative('C:/a'), true); 138 expect(builder.isRelative('C:/a'), true);
122 expect(builder.isRelative(r'C:\a'), true); 139 expect(builder.isRelative(r'C:\a'), true);
123 expect(builder.isRelative(r'\\a'), true); 140 expect(builder.isRelative(r'\\a'), true);
124 }); 141 });
125 142
126 group('join', () { 143 group('join', () {
127 test('allows up to eight parts', () { 144 test('allows up to eight parts', () {
128 expect(builder.join('a'), 'a'); 145 expect(builder.join('a'), 'a');
129 expect(builder.join('a', 'b'), 'a/b'); 146 expect(builder.join('a', 'b'), 'a/b');
(...skipping 28 matching lines...) Expand all
158 expect(builder.join('', ''), ''); 175 expect(builder.join('', ''), '');
159 expect(builder.join('', 'a'), 'a'); 176 expect(builder.join('', 'a'), 'a');
160 expect(builder.join('a', '', 'b', '', '', '', 'c'), 'a/b/c'); 177 expect(builder.join('a', '', 'b', '', '', '', 'c'), 'a/b/c');
161 expect(builder.join('a', 'b', ''), 'a/b'); 178 expect(builder.join('a', 'b', ''), 'a/b');
162 }); 179 });
163 180
164 test('disallows intermediate nulls', () { 181 test('disallows intermediate nulls', () {
165 expect(() => builder.join('a', null, 'b'), throwsArgumentError); 182 expect(() => builder.join('a', null, 'b'), throwsArgumentError);
166 expect(() => builder.join(null, 'a'), throwsArgumentError); 183 expect(() => builder.join(null, 'a'), throwsArgumentError);
167 }); 184 });
185
186 test('Join does not modify internal ., .., or trailing separators', () {
nweiz 2013/07/22 21:00:33 Nit: "join" should be lower-case
Bill Hesse 2013/07/23 16:07:00 Done.
187 expect(builder.join('a/', 'b/c/'), 'a/b/c/');
188 expect(builder.join('a/b/./c/..//', 'd/.././..//e/f//'),
189 'a/b/./c/..//d/.././..//e/f//');
190 expect(builder.join('a/b', 'c/../../../..'), 'a/b/c/../../../..');
191 expect(builder.join('a', 'b${builder.separator}'), 'a/b/');
192 });
168 }); 193 });
169 194
170 group('joinAll', () { 195 group('joinAll', () {
171 test('allows more than eight parts', () { 196 test('allows more than eight parts', () {
172 expect(builder.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']), 197 expect(builder.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
173 'a/b/c/d/e/f/g/h/i'); 198 'a/b/c/d/e/f/g/h/i');
174 }); 199 });
175 200
176 test('does not add separator if a part ends in one', () { 201 test('does not add separator if a part ends in one', () {
177 expect(builder.joinAll(['a/', 'b', 'c/', 'd']), 'a/b/c/d'); 202 expect(builder.joinAll(['a/', 'b', 'c/', 'd']), 'a/b/c/d');
(...skipping 27 matching lines...) Expand all
205 }); 230 });
206 231
207 test('includes the root for absolute paths', () { 232 test('includes the root for absolute paths', () {
208 expect(builder.split('/foo/bar/baz'), equals(['/', 'foo', 'bar', 'baz'])); 233 expect(builder.split('/foo/bar/baz'), equals(['/', 'foo', 'bar', 'baz']));
209 expect(builder.split('/'), equals(['/'])); 234 expect(builder.split('/'), equals(['/']));
210 }); 235 });
211 }); 236 });
212 237
213 group('normalize', () { 238 group('normalize', () {
214 test('simple cases', () { 239 test('simple cases', () {
215 expect(builder.normalize(''), ''); 240 expect(builder.normalize(''), '.');
216 expect(builder.normalize('.'), '.'); 241 expect(builder.normalize('.'), '.');
217 expect(builder.normalize('..'), '..'); 242 expect(builder.normalize('..'), '..');
218 expect(builder.normalize('a'), 'a'); 243 expect(builder.normalize('a'), 'a');
219 expect(builder.normalize('/'), '/'); 244 expect(builder.normalize('/'), '/');
220 expect(builder.normalize(r'\'), r'\'); 245 expect(builder.normalize(r'\'), r'\');
246 expect(builder.normalize('C:/'), 'C:');
247 expect(builder.normalize(r'C:\'), r'C:\');
248 expect(builder.normalize(r'\\'), r'\\');
249 expect(builder.normalize('a/./\xc5\u0bf8-;\u{1f085}\u{00}/c/d/../'),
250 'a/\xc5\u0bf8-;\u{1f085}\u{00}/c');
221 }); 251 });
222 252
223 test('collapses redundant separators', () { 253 test('collapses redundant separators', () {
224 expect(builder.normalize(r'a/b/c'), r'a/b/c'); 254 expect(builder.normalize(r'a/b/c'), r'a/b/c');
225 expect(builder.normalize(r'a//b///c////d'), r'a/b/c/d'); 255 expect(builder.normalize(r'a//b///c////d'), r'a/b/c/d');
226 }); 256 });
227 257
228 test('does not collapse separators for other platform', () { 258 test('does not collapse separators for other platform', () {
229 expect(builder.normalize(r'a\\b\\\c'), r'a\\b\\\c'); 259 expect(builder.normalize(r'a\\b\\\c'), r'a\\b\\\c');
230 }); 260 });
(...skipping 11 matching lines...) Expand all
242 }); 272 });
243 273
244 test('eliminates ".." parts', () { 274 test('eliminates ".." parts', () {
245 expect(builder.normalize('..'), '..'); 275 expect(builder.normalize('..'), '..');
246 expect(builder.normalize('../'), '..'); 276 expect(builder.normalize('../'), '..');
247 expect(builder.normalize('../../..'), '../../..'); 277 expect(builder.normalize('../../..'), '../../..');
248 expect(builder.normalize('../../../'), '../../..'); 278 expect(builder.normalize('../../../'), '../../..');
249 expect(builder.normalize('/..'), '/'); 279 expect(builder.normalize('/..'), '/');
250 expect(builder.normalize('/../../..'), '/'); 280 expect(builder.normalize('/../../..'), '/');
251 expect(builder.normalize('/../../../a'), '/a'); 281 expect(builder.normalize('/../../../a'), '/a');
282 expect(builder.normalize('c:/..'), '.');
283 expect(builder.normalize('A:/../../..'), '../..');
252 expect(builder.normalize('a/..'), '.'); 284 expect(builder.normalize('a/..'), '.');
253 expect(builder.normalize('a/b/..'), 'a'); 285 expect(builder.normalize('a/b/..'), 'a');
254 expect(builder.normalize('a/../b'), 'b'); 286 expect(builder.normalize('a/../b'), 'b');
255 expect(builder.normalize('a/./../b'), 'b'); 287 expect(builder.normalize('a/./../b'), 'b');
256 expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d'); 288 expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d');
257 expect(builder.normalize('a/b/../../../../c'), '../../c'); 289 expect(builder.normalize('a/b/../../../../c'), '../../c');
290 expect(builder.normalize(r'z/a/b/../../..\../c'), r'z/..\../c');
291 expect(builder.normalize(r'a/b\c/../d'), 'a/d');
258 }); 292 });
259 293
260 test('does not walk before root on absolute paths', () { 294 test('does not walk before root on absolute paths', () {
261 expect(builder.normalize('..'), '..'); 295 expect(builder.normalize('..'), '..');
262 expect(builder.normalize('../'), '..'); 296 expect(builder.normalize('../'), '..');
297 expect(builder.normalize('http://dartlang.org/..'), 'http:');
298 expect(builder.normalize('http://dartlang.org/../../a'), 'a');
299 expect(builder.normalize('file:///..'), '.');
300 expect(builder.normalize('file:///../../a'), '../a');
263 expect(builder.normalize('/..'), '/'); 301 expect(builder.normalize('/..'), '/');
264 expect(builder.normalize('a/..'), '.'); 302 expect(builder.normalize('a/..'), '.');
303 expect(builder.normalize('../a'), '../a');
304 expect(builder.normalize('/../a'), '/a');
305 expect(builder.normalize('c:/../a'), 'a');
306 expect(builder.normalize('/../a'), '/a');
265 expect(builder.normalize('a/b/..'), 'a'); 307 expect(builder.normalize('a/b/..'), 'a');
308 expect(builder.normalize('../a/b/..'), '../a');
266 expect(builder.normalize('a/../b'), 'b'); 309 expect(builder.normalize('a/../b'), 'b');
267 expect(builder.normalize('a/./../b'), 'b'); 310 expect(builder.normalize('a/./../b'), 'b');
268 expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d'); 311 expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d');
269 expect(builder.normalize('a/b/../../../../c'), '../../c'); 312 expect(builder.normalize('a/b/../../../../c'), '../../c');
313 expect(builder.normalize('a/b/c/../../..d/./.e/f././'), 'a/..d/.e/f.');
270 }); 314 });
271 315
272 test('removes trailing separators', () { 316 test('removes trailing separators', () {
273 expect(builder.normalize('./'), '.'); 317 expect(builder.normalize('./'), '.');
274 expect(builder.normalize('.//'), '.'); 318 expect(builder.normalize('.//'), '.');
275 expect(builder.normalize('a/'), 'a'); 319 expect(builder.normalize('a/'), 'a');
276 expect(builder.normalize('a/b/'), 'a/b'); 320 expect(builder.normalize('a/b/'), 'a/b');
321 expect(builder.normalize(r'a/b\'), r'a/b\');
277 expect(builder.normalize('a/b///'), 'a/b'); 322 expect(builder.normalize('a/b///'), 'a/b');
278 }); 323 });
279 }); 324 });
280 325
281 group('relative', () { 326 group('relative', () {
282 group('from absolute root', () { 327 group('from absolute root', () {
283 test('given absolute path in root', () { 328 test('given absolute path in root', () {
284 expect(builder.relative('/'), '../..'); 329 expect(builder.relative('/'), '../..');
285 expect(builder.relative('/root'), '..'); 330 expect(builder.relative('/root'), '..');
286 expect(builder.relative('/root/path'), '.'); 331 expect(builder.relative('/root/path'), '.');
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 468
424 test('toUri', () { 469 test('toUri', () {
425 expect(builder.toUri('/path/to/foo'), Uri.parse('file:///path/to/foo')); 470 expect(builder.toUri('/path/to/foo'), Uri.parse('file:///path/to/foo'));
426 expect(builder.toUri('/path/to/foo/'), Uri.parse('file:///path/to/foo/')); 471 expect(builder.toUri('/path/to/foo/'), Uri.parse('file:///path/to/foo/'));
427 expect(builder.toUri('/'), Uri.parse('file:///')); 472 expect(builder.toUri('/'), Uri.parse('file:///'));
428 expect(builder.toUri('foo/bar'), Uri.parse('foo/bar')); 473 expect(builder.toUri('foo/bar'), Uri.parse('foo/bar'));
429 expect(builder.toUri('/path/to/foo#bar'), 474 expect(builder.toUri('/path/to/foo#bar'),
430 Uri.parse('file:///path/to/foo%23bar')); 475 Uri.parse('file:///path/to/foo%23bar'));
431 }); 476 });
432 } 477 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698