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

Side by Side Diff: tests/standalone/io/path_test.dart

Issue 11878015: Default constructor for dart:io Path now handles native Windows paths. Path() now does the same as… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Don't change tools/version.dart until the binaries are updated. Created 7 years, 11 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 // Test the Path class in dart:io. 5 // Test the Path class in dart:io.
6 6
7 import "dart:io"; 7 import "dart:io";
8 8
9 void main() { 9 void main() {
10 testBaseFunctions(); 10 testBaseFunctions();
11 testRaw();
11 testCanonicalize(); 12 testCanonicalize();
12 testJoinAppend(); 13 testJoinAppend();
13 testRelativeTo(); 14 testRelativeTo();
14 testWindowsShare(); 15 testWindowsShare();
15 } 16 }
16 17
17 void testBaseFunctions() { 18 void testBaseFunctions() {
18 testGetters(new Path("/foo/bar/fisk.hest"), 19 testGetters(new Path("/foo/bar/fisk.hest"),
19 ['/foo/bar', 'fisk.hest', 'fisk', 'hest'], 20 ['/foo/bar', 'fisk.hest', 'fisk', 'hest'],
20 'absolute canonical'); 21 'absolute canonical');
(...skipping 30 matching lines...) Expand all
51 testGetters(new Path("a/b.c/."), 52 testGetters(new Path("a/b.c/."),
52 ['a/b.c', '.', '.', ''], 53 ['a/b.c', '.', '.', ''],
53 ''); 54 '');
54 // '..' at the end of a path is not considered an extension. 55 // '..' at the end of a path is not considered an extension.
55 testGetters(new Path("a/bc/../.."), 56 testGetters(new Path("a/bc/../.."),
56 ['a/bc/..', '..', '..', ''], 57 ['a/bc/..', '..', '..', ''],
57 ''); 58 '');
58 59
59 // Test the special path cleaning operations on the Windows platform. 60 // Test the special path cleaning operations on the Windows platform.
60 if (Platform.operatingSystem == 'windows') { 61 if (Platform.operatingSystem == 'windows') {
61 testGetters(new Path.fromNative(r"c:\foo\bar\fisk.hest"), 62 testGetters(new Path(r"c:\foo\bar\fisk.hest"),
62 ['/c:/foo/bar', 'fisk.hest', 'fisk', 'hest'], 63 ['/c:/foo/bar', 'fisk.hest', 'fisk', 'hest'],
63 'absolute canonical'); 64 'absolute canonical');
64 testGetters(new Path.fromNative("\\foo\\bar\\"), 65 testGetters(new Path("\\foo\\bar\\"),
65 ['/foo/bar', '', '', ''], 66 ['/foo/bar', '', '', ''],
66 'absolute canonical trailing'); 67 'absolute canonical trailing');
67 testGetters(new Path.fromNative("\\foo\\bar\\hest"), 68 testGetters(new Path("\\foo\\bar\\hest"),
68 ['/foo/bar', 'hest', 'hest', ''], 69 ['/foo/bar', 'hest', 'hest', ''],
69 'absolute canonical'); 70 'absolute canonical');
70 testGetters(new Path.fromNative(r"foo/bar\hest/.fisk"), 71 testGetters(new Path(r"foo/bar\hest/.fisk"),
71 ['foo/bar/hest', '.fisk', '', 'fisk'], 72 ['foo/bar/hest', '.fisk', '', 'fisk'],
72 'canonical'); 73 'canonical');
73 testGetters(new Path.fromNative(r"foo//bar\\hest/\/.fisk."), 74 testGetters(new Path(r"foo//bar\\hest/\/.fisk."),
74 ['foo//bar//hest', '.fisk.', '.fisk', ''], 75 ['foo//bar//hest', '.fisk.', '.fisk', ''],
75 ''); 76 '');
76 } else { 77 } else {
77 // Make sure that backslashes are uninterpreted on other platforms. 78 // Make sure that backslashes are uninterpreted on other platforms.
78 testGetters(new Path.fromNative(r"/foo\bar/bif/fisk.hest"), 79 testGetters(new Path(r"c:\foo\bar\fisk.hest"),
80 ['', r'c:\foo\bar\fisk.hest', r'c:\foo\bar\fisk', 'hest'],
81 'canonical');
82 testGetters(new Path(r"/foo\bar/bif/fisk.hest"),
79 [r'/foo\bar/bif', 'fisk.hest', 'fisk', 'hest'], 83 [r'/foo\bar/bif', 'fisk.hest', 'fisk', 'hest'],
80 'absolute canonical'); 84 'absolute canonical');
81 testGetters(new Path.fromNative(r"//foo\bar///bif////fisk.hest"), 85 testGetters(new Path(r"//foo\bar///bif////fisk.hest"),
82 [r'//foo\bar///bif', 'fisk.hest', 'fisk', 'hest'], 86 [r'//foo\bar///bif', 'fisk.hest', 'fisk', 'hest'],
83 'absolute'); 87 'absolute');
84 testGetters(new Path.fromNative(r"/foo\ bar/bif/gule\ fisk.hest"), 88 testGetters(new Path(r"/foo\ bar/bif/gule\ fisk.hest"),
85 [r'/foo\ bar/bif', r'gule\ fisk.hest', r'gule\ fisk', 'hest'], 89 [r'/foo\ bar/bif', r'gule\ fisk.hest', r'gule\ fisk', 'hest'],
86 'absolute canonical'); 90 'absolute canonical');
87 } 91 }
88 } 92 }
89 93
90 94
91 void testGetters(Path path, List components, String properties) { 95 void testGetters(Path path, List components, String properties) {
92 final int DIRNAME = 0; 96 final int DIRNAME = 0;
93 final int FILENAME = 1; 97 final int FILENAME = 1;
94 final int FILENAME_NO_EXTENSION = 2; 98 final int FILENAME_NO_EXTENSION = 2;
95 final int EXTENSION = 3; 99 final int EXTENSION = 3;
96 Expect.equals(components[DIRNAME], path.directoryPath.toString()); 100 Expect.equals(components[DIRNAME], path.directoryPath.toString());
97 Expect.equals(components[FILENAME], path.filename); 101 Expect.equals(components[FILENAME], path.filename);
98 Expect.equals(components[FILENAME_NO_EXTENSION], 102 Expect.equals(components[FILENAME_NO_EXTENSION],
99 path.filenameWithoutExtension); 103 path.filenameWithoutExtension);
100 Expect.equals(components[EXTENSION], path.extension); 104 Expect.equals(components[EXTENSION], path.extension);
101 105
102 Expect.equals(path.isCanonical, properties.contains('canonical')); 106 Expect.equals(path.isCanonical, properties.contains('canonical'));
103 Expect.equals(path.isAbsolute, properties.contains('absolute')); 107 Expect.equals(path.isAbsolute, properties.contains('absolute'));
104 Expect.equals(path.hasTrailingSeparator, properties.contains('trailing')); 108 Expect.equals(path.hasTrailingSeparator, properties.contains('trailing'));
105 } 109 }
106 110
111 void testRaw() {
112 Expect.equals(new Path.raw('c:\\foo/bar bad').toString(), 'c:\\foo/bar bad');
113 Expect.equals(new Path.raw('').toString(), '');
114 Expect.equals(new Path.raw('\\bar\u2603\n.').toString(), '\\bar\u2603\n.');
115 }
116
107 void testCanonicalize() { 117 void testCanonicalize() {
108 Function t = (input, canonicalized) { 118 Function t = (input, canonicalized) {
109 Expect.equals(canonicalized, new Path(input).canonicalize().toString()); 119 Expect.equals(canonicalized, new Path(input).canonicalize().toString());
110 }; 120 };
111 121
112 t('.', '.'); 122 t('.', '.');
113 t('./.', '.'); 123 t('./.', '.');
114 t('foo/..', '.'); 124 t('foo/..', '.');
115 t('../foo', '../foo'); 125 t('../foo', '../foo');
116 t('/../foo', '/foo'); 126 t('/../foo', '/foo');
117 t('/foo/..', '/'); 127 t('/foo/..', '/');
118 t('/foo/../', '/'); 128 t('/foo/../', '/');
119 t('/c:/../foo', '/c:/foo'); 129 t('/c:/../foo', '/c:/foo');
120 t('/c:/foo/..', '/c:/'); 130 t('/c:/foo/..', '/c:/');
121 t('/c:/foo/../', '/c:/'); 131 t('/c:/foo/../', '/c:/');
122 t('/c:/foo/../..', '/c:/'); 132 t('/c:/foo/../..', '/c:/');
123 t('/c:/foo/../../', '/c:/'); 133 t('/c:/foo/../../', '/c:/');
124 t('..', '..'); 134 t('..', '..');
125 t('', '.'); 135 t('', '.');
126 t('/', '/'); 136 t('/', '/');
127 t('../foo/bar/..', '../foo'); 137 t('../foo/bar/..', '../foo');
128 t('/../foo/bar/..', '/foo'); 138 t('/../foo/bar/..', '/foo');
129 t('foo/bar/../../../joe/../..', '../..'); 139 t('foo/bar/../../../joe/../..', '../..');
130 t('a/b/c/../../..d/./.e/f././', 'a/..d/.e/f./'); 140 t('a/b/c/../../..d/./.e/f././', 'a/..d/.e/f./');
131 t('/%:/foo/../..', '/%:/'); 141 t('/%:/foo/../..', '/%:/');
132 t('c:/foo/../../..', '..'); 142 if (Platform.operatingSystem == 'windows') {
133 t('c:/foo/../../bad/dad/./..', 'bad'); 143 t('c:/foo/../../..', '/c:/');
144 t('c:/foo/../../bad/dad/./..', '/c:/bad');
145 } else {
146 t('c:/foo/../../..', '..');
147 t('c:/foo/../../bad/dad/./..', 'bad');
148 }
134 } 149 }
135 150
136 void testJoinAppend() { 151 void testJoinAppend() {
137 void testJoin(String a, String b, String c) { 152 void testJoin(String a, String b, String c) {
138 Expect.equals(new Path(a).join(new Path(b)).toString(), c); 153 Expect.equals(new Path(a).join(new Path(b)).toString(), c);
139 } 154 }
140 155
141 testJoin('/a/b', 'c/d', '/a/b/c/d'); 156 testJoin('/a/b', 'c/d', '/a/b/c/d');
142 testJoin('a/', 'b/c/', 'a/b/c/'); 157 testJoin('a/', 'b/c/', 'a/b/c/');
143 testJoin('a/b/./c/..//', 'd/.././..//e/f//', 'a/e/f/'); 158 testJoin('a/b/./c/..//', 'd/.././..//e/f//', 'a/e/f/');
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 // Should always throw - no relative path can be constructed. 209 // Should always throw - no relative path can be constructed.
195 Expect.throws(() => 210 Expect.throws(() =>
196 new Path('a/b').relativeTo(new Path('../../d'))); 211 new Path('a/b').relativeTo(new Path('../../d')));
197 } 212 }
198 213
199 // Test that Windows share information is maintain through 214 // Test that Windows share information is maintain through
200 // Path operations. 215 // Path operations.
201 void testWindowsShare() { 216 void testWindowsShare() {
202 // Windows share information only makes sense on Windows. 217 // Windows share information only makes sense on Windows.
203 if (Platform.operatingSystem != 'windows') return; 218 if (Platform.operatingSystem != 'windows') return;
204 var path = new Path.fromNative(r'\\share\a\b\..\c'); 219 var path = new Path(r'\\share\a\b\..\c');
205 Expect.isTrue(path.isAbsolute); 220 Expect.isTrue(path.isAbsolute);
206 Expect.isTrue(path.isWindowsShare); 221 Expect.isTrue(path.isWindowsShare);
207 Expect.isFalse(path.hasTrailingSeparator); 222 Expect.isFalse(path.hasTrailingSeparator);
208 var canonical = path.canonicalize(); 223 var canonical = path.canonicalize();
209 Expect.isTrue(canonical.isAbsolute); 224 Expect.isTrue(canonical.isAbsolute);
210 Expect.isTrue(canonical.isWindowsShare); 225 Expect.isTrue(canonical.isWindowsShare);
211 Expect.isFalse(path.isCanonical); 226 Expect.isFalse(path.isCanonical);
212 Expect.isTrue(canonical.isCanonical); 227 Expect.isTrue(canonical.isCanonical);
213 var joined = canonical.join(new Path('d/e/f')); 228 var joined = canonical.join(new Path('d/e/f'));
214 Expect.isTrue(joined.isAbsolute); 229 Expect.isTrue(joined.isAbsolute);
215 Expect.isTrue(joined.isWindowsShare); 230 Expect.isTrue(joined.isWindowsShare);
216 var relativeTo = joined.relativeTo(canonical); 231 var relativeTo = joined.relativeTo(canonical);
217 Expect.isFalse(relativeTo.isAbsolute); 232 Expect.isFalse(relativeTo.isAbsolute);
218 Expect.isFalse(relativeTo.isWindowsShare); 233 Expect.isFalse(relativeTo.isWindowsShare);
219 var nonShare = new Path('/share/a/c/d/e'); 234 var nonShare = new Path('/share/a/c/d/e');
220 Expect.throws(() => nonShare.relativeTo(canonical)); 235 Expect.throws(() => nonShare.relativeTo(canonical));
221 Expect.isTrue(canonical.toString().startsWith('/share/a')); 236 Expect.isTrue(canonical.toString().startsWith('/share/a'));
222 Expect.isTrue(canonical.toNativePath().startsWith(r'\\share\a')); 237 Expect.isTrue(canonical.toNativePath().startsWith(r'\\share\a'));
223 Expect.listEquals(['share', 'a', 'c'], canonical.segments()); 238 Expect.listEquals(['share', 'a', 'c'], canonical.segments());
224 var appended = canonical.append('d'); 239 var appended = canonical.append('d');
225 Expect.isTrue(appended.isAbsolute); 240 Expect.isTrue(appended.isAbsolute);
226 Expect.isTrue(appended.isWindowsShare); 241 Expect.isTrue(appended.isWindowsShare);
227 var directoryPath = canonical.directoryPath; 242 var directoryPath = canonical.directoryPath;
228 Expect.isTrue(directoryPath.isAbsolute); 243 Expect.isTrue(directoryPath.isAbsolute);
229 Expect.isTrue(directoryPath.isWindowsShare); 244 Expect.isTrue(directoryPath.isWindowsShare);
230 } 245 }
OLDNEW
« no previous file with comments | « tests/standalone/io/https_server_test.dart ('k') | tests/standalone/io/process_set_exit_code_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698