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

Side by Side Diff: sdk/lib/_internal/pub/test/io_test.dart

Issue 15047005: Fix canonicalize(). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 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 io_test; 5 library io_test;
6 6
7 import 'dart:async';
7 import 'dart:io'; 8 import 'dart:io';
8 9
9 import 'package:pathos/path.dart' as path; 10 import 'package:pathos/path.dart' as path;
10 import 'package:unittest/unittest.dart'; 11 import 'package:unittest/unittest.dart';
11 12
12 import '../lib/src/io.dart'; 13 import '../lib/src/io.dart';
13 import '../lib/src/utils.dart'; 14 import '../lib/src/utils.dart';
14 import 'test_pub.dart'; 15 import 'test_pub.dart';
15 16
16 main() { 17 main() {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 expect(listDir(temp, recursive: true), unorderedEquals([ 131 expect(listDir(temp, recursive: true), unorderedEquals([
131 path.join(temp, 'file1.txt'), 132 path.join(temp, 'file1.txt'),
132 path.join(temp, 'linkdir') 133 path.join(temp, 'linkdir')
133 ])); 134 ]));
134 }), completes); 135 }), completes);
135 }); 136 });
136 }); 137 });
137 138
138 group('canonicalize', () { 139 group('canonicalize', () {
139 test('resolves a non-link', () { 140 test('resolves a non-link', () {
140 expect(withTempDir((temp) { 141 expect(withCanonicalTempDir((temp) {
141 var filePath = path.join(temp, 'file'); 142 var filePath = path.join(temp, 'file');
142 writeTextFile(filePath, ''); 143 writeTextFile(filePath, '');
143 expect(canonicalize(filePath), equals(filePath)); 144 expect(canonicalize(filePath), equals(filePath));
144 }), completes); 145 }), completes);
145 }); 146 });
146 147
147 test('resolves a non-existent file', () { 148 test('resolves a non-existent file', () {
148 expect(withTempDir((temp) { 149 expect(withCanonicalTempDir((temp) {
149 expect(canonicalize(path.join(temp, 'nothing')), 150 expect(canonicalize(path.join(temp, 'nothing')),
150 equals(path.join(temp, 'nothing'))); 151 equals(path.join(temp, 'nothing')));
151 }), completes); 152 }), completes);
152 }); 153 });
153 154
154 test('resolves a symlink', () { 155 test('resolves a symlink', () {
155 expect(withTempDir((temp) { 156 expect(withCanonicalTempDir((temp) {
156 createDir(path.join(temp, 'linked-dir')); 157 createDir(path.join(temp, 'linked-dir'));
157 createSymlink( 158 createSymlink(
158 path.join(temp, 'linked-dir'), 159 path.join(temp, 'linked-dir'),
159 path.join(temp, 'dir')); 160 path.join(temp, 'dir'));
160 expect( 161 expect(
161 canonicalize(path.join(temp, 'dir')), 162 canonicalize(path.join(temp, 'dir')),
162 equals(path.join(temp, 'linked-dir'))); 163 equals(path.join(temp, 'linked-dir')));
163 }), completes); 164 }), completes);
164 }); 165 });
165 166
166 test('resolves a relative symlink', () { 167 test('resolves a relative symlink', () {
167 expect(withTempDir((temp) { 168 expect(withCanonicalTempDir((temp) {
168 createDir(path.join(temp, 'linked-dir')); 169 createDir(path.join(temp, 'linked-dir'));
169 createSymlink( 170 createSymlink(
170 path.join(temp, 'linked-dir'), 171 path.join(temp, 'linked-dir'),
171 path.join(temp, 'dir'), 172 path.join(temp, 'dir'),
172 relative: true); 173 relative: true);
173 expect( 174 expect(
174 canonicalize(path.join(temp, 'dir')), 175 canonicalize(path.join(temp, 'dir')),
175 equals(path.join(temp, 'linked-dir'))); 176 equals(path.join(temp, 'linked-dir')));
176 }), completes); 177 }), completes);
177 }); 178 });
178 179
179 test('resolves a single-level horizontally recursive symlink', () { 180 test('resolves a single-level horizontally recursive symlink', () {
180 expect(withTempDir((temp) { 181 expect(withCanonicalTempDir((temp) {
181 var linkPath = path.join(temp, 'foo'); 182 var linkPath = path.join(temp, 'foo');
182 createSymlink(linkPath, linkPath); 183 createSymlink(linkPath, linkPath);
183 expect(canonicalize(linkPath), equals(linkPath)); 184 expect(canonicalize(linkPath), equals(linkPath));
184 }), completes); 185 }), completes);
185 }); 186 });
186 187
187 test('resolves a multi-level horizontally recursive symlink', () { 188 test('resolves a multi-level horizontally recursive symlink', () {
188 expect(withTempDir((temp) { 189 expect(withCanonicalTempDir((temp) {
189 var fooPath = path.join(temp, 'foo'); 190 var fooPath = path.join(temp, 'foo');
190 var barPath = path.join(temp, 'bar'); 191 var barPath = path.join(temp, 'bar');
191 var bazPath = path.join(temp, 'baz'); 192 var bazPath = path.join(temp, 'baz');
192 createSymlink(barPath, fooPath); 193 createSymlink(barPath, fooPath);
193 createSymlink(bazPath, barPath); 194 createSymlink(bazPath, barPath);
194 createSymlink(fooPath, bazPath); 195 createSymlink(fooPath, bazPath);
195 expect(canonicalize(fooPath), equals(fooPath)); 196 expect(canonicalize(fooPath), equals(fooPath));
196 expect(canonicalize(barPath), equals(barPath)); 197 expect(canonicalize(barPath), equals(barPath));
197 expect(canonicalize(bazPath), equals(bazPath)); 198 expect(canonicalize(bazPath), equals(bazPath));
198 199
199 createSymlink(fooPath, path.join(temp, 'outer')); 200 createSymlink(fooPath, path.join(temp, 'outer'));
200 expect(canonicalize(path.join(temp, 'outer')), equals(fooPath)); 201 expect(canonicalize(path.join(temp, 'outer')), equals(fooPath));
201 }), completes); 202 }), completes);
202 }); 203 });
203 204
204 test('resolves a broken symlink', () { 205 test('resolves a broken symlink', () {
205 expect(withTempDir((temp) { 206 expect(withCanonicalTempDir((temp) {
206 createSymlink(path.join(temp, 'nonexistent'), path.join(temp, 'foo')); 207 createSymlink(path.join(temp, 'nonexistent'), path.join(temp, 'foo'));
207 expect( 208 expect(
208 canonicalize(path.join(temp, 'foo')), 209 canonicalize(path.join(temp, 'foo')),
209 equals(path.join(temp, 'nonexistent'))); 210 equals(path.join(temp, 'nonexistent')));
210 }), completes); 211 }), completes);
211 }); 212 });
212 213
213 test('resolves multiple nested symlinks', () { 214 test('resolves multiple nested symlinks', () {
214 expect(withTempDir((temp) { 215 expect(withCanonicalTempDir((temp) {
215 var dir1 = path.join(temp, 'dir1'); 216 var dir1 = path.join(temp, 'dir1');
216 var dir2 = path.join(temp, 'dir2'); 217 var dir2 = path.join(temp, 'dir2');
217 var subdir1 = path.join(dir1, 'subdir1'); 218 var subdir1 = path.join(dir1, 'subdir1');
218 var subdir2 = path.join(dir2, 'subdir2'); 219 var subdir2 = path.join(dir2, 'subdir2');
219 createDir(dir2); 220 createDir(dir2);
220 createDir(subdir2); 221 createDir(subdir2);
221 createSymlink(dir2, dir1); 222 createSymlink(dir2, dir1);
222 createSymlink(subdir2, subdir1); 223 createSymlink(subdir2, subdir1);
223 expect( 224 expect(
224 canonicalize(path.join(subdir1, 'file')), 225 canonicalize(path.join(subdir1, 'file')),
225 equals(path.join(subdir2, 'file'))); 226 equals(path.join(subdir2, 'file')));
226 }), completes); 227 }), completes);
227 }); 228 });
228 229
229 test('resolves a nested vertical symlink', () { 230 test('resolves a nested vertical symlink', () {
230 expect(withTempDir((temp) { 231 expect(withCanonicalTempDir((temp) {
231 var dir1 = path.join(temp, 'dir1'); 232 var dir1 = path.join(temp, 'dir1');
232 var dir2 = path.join(temp, 'dir2'); 233 var dir2 = path.join(temp, 'dir2');
233 var subdir = path.join(dir1, 'subdir'); 234 var subdir = path.join(dir1, 'subdir');
234 createDir(dir1); 235 createDir(dir1);
235 createDir(dir2); 236 createDir(dir2);
236 createSymlink(dir2, subdir); 237 createSymlink(dir2, subdir);
237 expect( 238 expect(
238 canonicalize(path.join(subdir, 'file')), 239 canonicalize(path.join(subdir, 'file')),
239 equals(path.join(dir2, 'file'))); 240 equals(path.join(dir2, 'file')));
240 }), completes); 241 }), completes);
241 }); 242 });
242 243
243 test('resolves a vertically recursive symlink', () { 244 test('resolves a vertically recursive symlink', () {
244 expect(withTempDir((temp) { 245 expect(withCanonicalTempDir((temp) {
245 var dir = path.join(temp, 'dir'); 246 var dir = path.join(temp, 'dir');
246 var subdir = path.join(dir, 'subdir'); 247 var subdir = path.join(dir, 'subdir');
247 createDir(dir); 248 createDir(dir);
248 createSymlink(dir, subdir); 249 createSymlink(dir, subdir);
249 expect( 250 expect(
250 canonicalize(path.join(temp, 'dir', 'subdir', 'subdir', 'subdir', 251 canonicalize(path.join(temp, 'dir', 'subdir', 'subdir', 'subdir',
251 'subdir', 'file')), 252 'subdir', 'file')),
252 equals(path.join(dir, 'file'))); 253 equals(path.join(dir, 'file')));
253 }), completes); 254 }), completes);
254 }); 255 });
256
257 test('resolves a symlink that links to a path that needs more resolving',
258 () {
259 expect(withCanonicalTempDir((temp) {
260 var dir = path.join(temp, 'dir');
261 var linkdir = path.join(temp, 'linkdir');
262 var linkfile = path.join(dir, 'link');
263 createDir(dir);
264 createSymlink(dir, linkdir);
265 createSymlink(path.join(linkdir, 'file'), linkfile);
266 expect(
267 canonicalize(linkfile),
268 equals(path.join(dir, 'file')));
269 }), completes);
270 });
271
272 test('resolves a pair of pathologically-recursive symlinks', () {
273 expect(withCanonicalTempDir((temp) {
274 var foo = path.join(temp, 'foo');
275 var subfoo = path.join(foo, 'subfoo');
276 var bar = path.join(temp, 'bar');
277 var subbar = path.join(bar, 'subbar');
278 createSymlink(subbar, foo);
279 createSymlink(subfoo, bar);
280 expect(
281 canonicalize(subfoo),
282 equals(path.join(subfoo, 'subbar', 'subfoo')));
283 }), completes);
284 });
255 }); 285 });
256 286
257 testExistencePredicate("entryExists", entryExists, 287 testExistencePredicate("entryExists", entryExists,
258 forFile: true, 288 forFile: true,
259 forFileSymlink: true, 289 forFileSymlink: true,
260 forMultiLevelFileSymlink: true, 290 forMultiLevelFileSymlink: true,
261 forDirectory: true, 291 forDirectory: true,
262 forDirectorySymlink: true, 292 forDirectorySymlink: true,
263 forMultiLevelDirectorySymlink: true, 293 forMultiLevelDirectorySymlink: true,
264 forBrokenSymlink: true, 294 forBrokenSymlink: true,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 var symlink2Path = path.join(temp, "link2.txt"); 420 var symlink2Path = path.join(temp, "link2.txt");
391 writeTextFile(targetPath, "contents"); 421 writeTextFile(targetPath, "contents");
392 createSymlink(targetPath, symlink1Path); 422 createSymlink(targetPath, symlink1Path);
393 createSymlink(symlink1Path, symlink2Path); 423 createSymlink(symlink1Path, symlink2Path);
394 expect(predicate(symlink2Path), equals(forMultiLevelFileSymlink)); 424 expect(predicate(symlink2Path), equals(forMultiLevelFileSymlink));
395 }), completes); 425 }), completes);
396 }); 426 });
397 } 427 }
398 }); 428 });
399 } 429 }
430
431 /// Like [withTempDir], but canonicalizes the path before passing it to [fn].
432 Future withCanonicalTempDir(Future fn(String path)) =>
433 withTempDir((temp) => fn(canonicalize(temp)));
OLDNEW
« sdk/lib/_internal/pub/lib/src/io.dart ('K') | « sdk/lib/_internal/pub/lib/src/path_source.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698