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

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

Issue 23532066: dart:io | Change creation of symbolic links with relative targets on Windows. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Drop .. and . segments from Windows link targets. Created 7 years, 3 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
« no previous file with comments | « sdk/lib/io/link.dart ('k') | tests/standalone/io/link_test.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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 "dart:async"; 5 import "dart:async";
6 import "dart:io"; 6 import "dart:io";
7 7
8 import "package:async_helper/async_helper.dart"; 8 import "package:async_helper/async_helper.dart";
9 import "package:expect/expect.dart"; 9 import "package:expect/expect.dart";
10 import "package:path/path.dart"; 10 import "package:path/path.dart";
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 } 134 }
135 return Future.wait(futures); 135 return Future.wait(futures);
136 }) 136 })
137 .then((_) => baseDir.delete(recursive: true)); 137 .then((_) => baseDir.delete(recursive: true));
138 }); 138 });
139 }); 139 });
140 } 140 }
141 141
142 142
143 Future testCreateLoopingLink() { 143 Future testCreateLoopingLink(_) {
144 return new Directory('').createTemp() 144 return new Directory('').createTemp()
145 .then((dir) => dir.path) 145 .then((dir) => dir.path)
146 .then((String base) => 146 .then((String base) =>
147 new Directory(join(base, 'a', 'b', 'c')).create(recursive: true) 147 new Directory(join(base, 'a', 'b', 'c')).create(recursive: true)
148 .then((_) => new Link(join(base, 'a', 'b', 'c', 'd')) 148 .then((_) => new Link(join(base, 'a', 'b', 'c', 'd'))
149 .create(join(base, 'a', 'b'))) 149 .create(join(base, 'a', 'b')))
150 .then((_) => new Link(join(base, 'a', 'b', 'c', 'e')) 150 .then((_) => new Link(join(base, 'a', 'b', 'c', 'e'))
151 .create(join(base, 'a'))) 151 .create(join(base, 'a')))
152 .then((_) => new Directory(join(base, 'a')) 152 .then((_) => new Directory(join(base, 'a'))
153 .list(recursive: true, followLinks: false).last) 153 .list(recursive: true, followLinks: false).last)
154 // This directory listing must terminate, even though it contains loops. 154 // This directory listing must terminate, even though it contains loops.
155 .then((_) => new Directory(join(base, 'a')) 155 .then((_) => new Directory(join(base, 'a'))
156 .list(recursive: true, followLinks: true).last) 156 .list(recursive: true, followLinks: true).last)
157 // This directory listing must terminate, even though it contains loops. 157 // This directory listing must terminate, even though it contains loops.
158 .then((_) => new Directory(join(base, 'a', 'b', 'c')) 158 .then((_) => new Directory(join(base, 'a', 'b', 'c'))
159 .list(recursive: true, followLinks: true).last) 159 .list(recursive: true, followLinks: true).last)
160 .then((_) => new Directory(base).delete(recursive: true)) 160 .then((_) => new Directory(base).delete(recursive: true))
161 .then((_) => FutureExpect.isFalse(new Directory(base).exists())) 161 .then((_) => FutureExpect.isFalse(new Directory(base).exists()))
162 ); 162 );
163 } 163 }
164 164
165 165
166 Future testRename() { 166 Future testRename(_) {
167 Future testRename(String base , String target) { 167 Future testRename(String base , String target) {
168 Link link1; 168 Link link1;
169 Link link2; 169 Link link2;
170 return new Link(join(base, 'c')).create(target) 170 return new Link(join(base, 'c')).create(target)
171 .then((link) { 171 .then((link) {
172 link1 = link; 172 link1 = link;
173 Expect.isTrue(link1.existsSync()); 173 Expect.isTrue(link1.existsSync());
174 return link1.rename(join(base, 'd')); 174 return link1.rename(join(base, 'd'));
175 }) 175 })
176 .then((link) { 176 .then((link) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 for (var v in expected.values) { 264 for (var v in expected.values) {
265 Expect.equals('Found', v); 265 Expect.equals('Found', v);
266 } 266 }
267 }) 267 })
268 ); 268 );
269 } 269 }
270 } 270 }
271 return Future.wait(futures); 271 return Future.wait(futures);
272 } 272 }
273 273
274 Future checkExists(String filePath) =>
275 new File(filePath).exists().then((exists) => Expect.isTrue(exists));
Søren Gjesse 2013/09/17 11:55:30 (exists) => Expect.isTrue(exists) can be written j
276
277 Future testRelativeLinks(_) {
278 return new Directory('').createTemp().then((tempDirectory) {
279 String temp = tempDirectory.path;
280 String oldWorkingDirectory = Directory.current.path;
281 // Make directories and files to test links.
282 return new Directory(join(temp, 'dir1', 'dir2')).create(recursive: true)
283 .then((_) => new File(join(temp, 'dir1', 'file1')).create())
284 .then((_) => new File(join(temp, 'dir1', 'dir2', 'file2')).create())
285 // Make links whose path and/or target is given by a relative path.
286 .then((_) => new Link(join(temp, 'dir1', 'link1_2')).create('dir2'))
287 .then((_) => Directory.current = temp)
288 .then((_) => new Link('link0_2').create(join('dir1', 'dir2')))
289 .then((_) => new Link(join('dir1', 'link1_0')).create('..'))
290 .then((_) => Directory.current = 'dir1')
291 .then((_) => new Link(join('..', 'link0_1')).create('dir1'))
292 .then((_) => new Link(join('dir2', 'link2_1')).create(join(temp, 'dir1')))
293 .then((_) => new Link(join(temp, 'dir1', 'dir2', 'link2_0'))
294 .create(join('..', '..')))
295 // Test that the links go to the right targets.
296 .then((_) => checkExists(join('..', 'link0_1', 'file1')))
297 .then((_) => checkExists(join('..', 'link0_2', 'file2')))
298 .then((_) => checkExists(join('link1_0', 'dir1', 'file1')))
299 .then((_) => checkExists(join('link1_2', 'file2')))
300 .then((_) => checkExists(join('dir2', 'link2_0', 'dir1', 'file1')))
301 .then((_) => checkExists(join('dir2', 'link2_1', 'file1')))
302 // Clean up
303 .whenComplete(() => Directory.current = oldWorkingDirectory)
304 .whenComplete(() => tempDirectory.delete(recursive: true));
305 });
306 }
307
274 main() { 308 main() {
275 asyncStart(); 309 asyncStart();
276 testCreate() 310 testCreate()
277 .then((_) => testCreateLoopingLink()) 311 .then(testCreateLoopingLink)
278 .then((_) => testRename()) 312 .then(testRename)
313 .then(testRelativeLinks)
279 .then((_) => asyncEnd()); 314 .then((_) => asyncEnd());
280 } 315 }
OLDNEW
« no previous file with comments | « sdk/lib/io/link.dart ('k') | tests/standalone/io/link_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698