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

Side by Side Diff: utils/tests/pub/io_test.dart

Issue 13332009: Make listDir and createSymlink synchronous in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 7 years, 8 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 | « utils/tests/pub/descriptor/tar.dart ('k') | no next file » | 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) 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:io'; 7 import 'dart:io';
8 8
9 import 'package:pathos/path.dart' as path; 9 import 'package:pathos/path.dart' as path;
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
11 11
12 import '../../pub/io.dart'; 12 import '../../pub/io.dart';
13 import '../../pub/utils.dart'; 13 import '../../pub/utils.dart';
14 import 'test_pub.dart'; 14 import 'test_pub.dart';
15 15
16 main() { 16 main() {
17 initConfig(); 17 initConfig();
18 18
19 group('listDir', () { 19 group('listDir', () {
20 test('lists a simple directory non-recursively', () { 20 test('lists a simple directory non-recursively', () {
21 expect(withTempDir((temp) { 21 expect(withTempDir((temp) {
22 var future = defer(() { 22 writeTextFile(path.join(temp, 'file1.txt'), '');
23 writeTextFile(path.join(temp, 'file1.txt'), ''); 23 writeTextFile(path.join(temp, 'file2.txt'), '');
24 writeTextFile(path.join(temp, 'file2.txt'), ''); 24 createDir(path.join(temp, 'subdir'));
25 createDir(path.join(temp, 'subdir')); 25 writeTextFile(path.join(temp, 'subdir', 'file3.txt'), '');
26 writeTextFile(path.join(temp, 'subdir', 'file3.txt'), ''); 26
27 return listDir(temp); 27 expect(listDir(temp), unorderedEquals([
28 });
29 expect(future, completion(unorderedEquals([
30 path.join(temp, 'file1.txt'), 28 path.join(temp, 'file1.txt'),
31 path.join(temp, 'file2.txt'), 29 path.join(temp, 'file2.txt'),
32 path.join(temp, 'subdir') 30 path.join(temp, 'subdir')
33 ]))); 31 ]));
34 return future;
35 }), completes); 32 }), completes);
36 }); 33 });
37 34
38 test('lists a simple directory recursively', () { 35 test('lists a simple directory recursively', () {
39 expect(withTempDir((temp) { 36 expect(withTempDir((temp) {
40 var future = defer(() { 37 writeTextFile(path.join(temp, 'file1.txt'), '');
41 writeTextFile(path.join(temp, 'file1.txt'), ''); 38 writeTextFile(path.join(temp, 'file2.txt'), '');
42 writeTextFile(path.join(temp, 'file2.txt'), ''); 39 createDir(path.join(temp, 'subdir'));
43 createDir(path.join(temp, 'subdir')); 40 writeTextFile(path.join(temp, 'subdir', 'file3.txt'), '');
44 writeTextFile(path.join(temp, 'subdir', 'file3.txt'), '');
45 return listDir(temp, recursive: true);
46 });
47 41
48 expect(future, completion(unorderedEquals([ 42 expect(listDir(temp, recursive: true), unorderedEquals([
49 path.join(temp, 'file1.txt'), 43 path.join(temp, 'file1.txt'),
50 path.join(temp, 'file2.txt'), 44 path.join(temp, 'file2.txt'),
51 path.join(temp, 'subdir'), 45 path.join(temp, 'subdir'),
52 path.join(temp, 'subdir', 'file3.txt'), 46 path.join(temp, 'subdir', 'file3.txt'),
53 ]))); 47 ]));
54 return future;
55 }), completes); 48 }), completes);
56 }); 49 });
57 50
58 test('ignores hidden files by default', () { 51 test('ignores hidden files by default', () {
59 expect(withTempDir((temp) { 52 expect(withTempDir((temp) {
60 var future = defer(() { 53 writeTextFile(path.join(temp, 'file1.txt'), '');
61 writeTextFile(path.join(temp, 'file1.txt'), ''); 54 writeTextFile(path.join(temp, 'file2.txt'), '');
62 writeTextFile(path.join(temp, 'file2.txt'), ''); 55 writeTextFile(path.join(temp, '.file3.txt'), '');
63 writeTextFile(path.join(temp, '.file3.txt'), ''); 56 createDir(path.join(temp, '.subdir'));
64 createDir(path.join(temp, '.subdir')); 57 writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
65 writeTextFile(path.join(temp, '.subdir', 'file3.txt'), ''); 58
66 return listDir(temp, recursive: true); 59 expect(listDir(temp, recursive: true), unorderedEquals([
67 });
68 expect(future, completion(unorderedEquals([
69 path.join(temp, 'file1.txt'), 60 path.join(temp, 'file1.txt'),
70 path.join(temp, 'file2.txt') 61 path.join(temp, 'file2.txt')
71 ]))); 62 ]));
72 return future;
73 }), completes); 63 }), completes);
74 }); 64 });
75 65
76 test('includes hidden files when told to', () { 66 test('includes hidden files when told to', () {
77 expect(withTempDir((temp) { 67 expect(withTempDir((temp) {
78 var future = defer(() { 68 writeTextFile(path.join(temp, 'file1.txt'), '');
79 writeTextFile(path.join(temp, 'file1.txt'), ''); 69 writeTextFile(path.join(temp, 'file2.txt'), '');
80 writeTextFile(path.join(temp, 'file2.txt'), ''); 70 writeTextFile(path.join(temp, '.file3.txt'), '');
81 writeTextFile(path.join(temp, '.file3.txt'), ''); 71 createDir(path.join(temp, '.subdir'));
82 createDir(path.join(temp, '.subdir')); 72 writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
83 writeTextFile(path.join(temp, '.subdir', 'file3.txt'), ''); 73
84 return listDir(temp, recursive: true, includeHiddenFiles: true); 74 expect(listDir(temp, recursive: true, includeHiddenFiles: true),
85 }); 75 unorderedEquals([
86 expect(future, completion(unorderedEquals([
87 path.join(temp, 'file1.txt'), 76 path.join(temp, 'file1.txt'),
88 path.join(temp, 'file2.txt'), 77 path.join(temp, 'file2.txt'),
89 path.join(temp, '.file3.txt'), 78 path.join(temp, '.file3.txt'),
90 path.join(temp, '.subdir'), 79 path.join(temp, '.subdir'),
91 path.join(temp, '.subdir', 'file3.txt') 80 path.join(temp, '.subdir', 'file3.txt')
92 ]))); 81 ]));
93 return future;
94 }), completes); 82 }), completes);
95 }); 83 });
96 84
97 test('returns the unresolved paths for symlinks', () { 85 test('returns the unresolved paths for symlinks', () {
98 expect(withTempDir((temp) { 86 expect(withTempDir((temp) {
99 var dirToList = path.join(temp, 'dir-to-list'); 87 var dirToList = path.join(temp, 'dir-to-list');
100 var future = defer(() { 88 createDir(path.join(temp, 'dir1'));
101 createDir(path.join(temp, 'dir1')); 89 writeTextFile(path.join(temp, 'dir1', 'file1.txt'), '');
102 writeTextFile(path.join(temp, 'dir1', 'file1.txt'), ''); 90 createDir(path.join(temp, 'dir2'));
103 createDir(path.join(temp, 'dir2')); 91 writeTextFile(path.join(temp, 'dir2', 'file2.txt'), '');
104 writeTextFile(path.join(temp, 'dir2', 'file2.txt'), ''); 92 createDir(dirToList);
105 createDir(dirToList); 93 createSymlink(
106 return createSymlink(path.join(temp, 'dir1'), 94 path.join(temp, 'dir1'),
107 path.join(dirToList, 'linked-dir1')); 95 path.join(dirToList, 'linked-dir1'));
108 }).then((_) { 96 createDir(path.join(dirToList, 'subdir'));
109 createDir(path.join(dirToList, 'subdir')); 97 createSymlink(
110 return createSymlink( 98 path.join(temp, 'dir2'),
111 path.join(temp, 'dir2'), 99 path.join(dirToList, 'subdir', 'linked-dir2'));
112 path.join(dirToList, 'subdir', 'linked-dir2')); 100
113 }).then((_) => listDir(dirToList, recursive: true)); 101 expect(listDir(dirToList, recursive: true), unorderedEquals([
114 expect(future, completion(unorderedEquals([
115 path.join(dirToList, 'linked-dir1'), 102 path.join(dirToList, 'linked-dir1'),
116 path.join(dirToList, 'linked-dir1', 'file1.txt'), 103 path.join(dirToList, 'linked-dir1', 'file1.txt'),
117 path.join(dirToList, 'subdir'), 104 path.join(dirToList, 'subdir'),
118 path.join(dirToList, 'subdir', 'linked-dir2'), 105 path.join(dirToList, 'subdir', 'linked-dir2'),
119 path.join(dirToList, 'subdir', 'linked-dir2', 'file2.txt'), 106 path.join(dirToList, 'subdir', 'linked-dir2', 'file2.txt'),
120 ]))); 107 ]));
121 return future;
122 }), completes); 108 }), completes);
123 }); 109 });
124 110
125 test('works with recursive symlinks', () { 111 test('works with recursive symlinks', () {
126 expect(withTempDir((temp) { 112 expect(withTempDir((temp) {
127 var future = defer(() { 113 writeTextFile(path.join(temp, 'file1.txt'), '');
128 writeTextFile(path.join(temp, 'file1.txt'), ''); 114 createSymlink(temp, path.join(temp, 'linkdir'));
129 return createSymlink(temp, path.join(temp, 'linkdir')); 115
130 }).then((_) => listDir(temp, recursive: true)); 116 expect(listDir(temp, recursive: true), unorderedEquals([
131 expect(future, completion(unorderedEquals([
132 path.join(temp, 'file1.txt'), 117 path.join(temp, 'file1.txt'),
133 path.join(temp, 'linkdir') 118 path.join(temp, 'linkdir')
134 ]))); 119 ]));
135 return future;
136 }), completes); 120 }), completes);
137 }); 121 });
138 }); 122 });
139 123
140 testExistencePredicate("entryExists", entryExists, 124 testExistencePredicate("entryExists", entryExists,
141 forFile: true, 125 forFile: true,
142 forFileSymlink: true, 126 forFileSymlink: true,
143 forMultiLevelFileSymlink: true, 127 forMultiLevelFileSymlink: true,
144 forDirectory: true, 128 forDirectory: true,
145 forDirectorySymlink: true, 129 forDirectorySymlink: true,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 createDir(path); 186 createDir(path);
203 expect(predicate(path), equals(forDirectory)); 187 expect(predicate(path), equals(forDirectory));
204 }), completes); 188 }), completes);
205 }); 189 });
206 190
207 test('returns $forDirectorySymlink for a symlink to a directory', () { 191 test('returns $forDirectorySymlink for a symlink to a directory', () {
208 expect(withTempDir((temp) { 192 expect(withTempDir((temp) {
209 var targetPath = path.join(temp, "dir"); 193 var targetPath = path.join(temp, "dir");
210 var symlinkPath = path.join(temp, "linkdir"); 194 var symlinkPath = path.join(temp, "linkdir");
211 createDir(targetPath); 195 createDir(targetPath);
212 return createSymlink(targetPath, symlinkPath).then((_) { 196 createSymlink(targetPath, symlinkPath);
213 expect(predicate(symlinkPath), equals(forDirectorySymlink)); 197 expect(predicate(symlinkPath), equals(forDirectorySymlink));
214 });
215 }), completes); 198 }), completes);
216 }); 199 });
217 200
218 test('returns $forMultiLevelDirectorySymlink for a multi-level symlink to ' 201 test('returns $forMultiLevelDirectorySymlink for a multi-level symlink to '
219 'a directory', () { 202 'a directory', () {
220 expect(withTempDir((temp) { 203 expect(withTempDir((temp) {
221 var targetPath = path.join(temp, "dir"); 204 var targetPath = path.join(temp, "dir");
222 var symlink1Path = path.join(temp, "link1dir"); 205 var symlink1Path = path.join(temp, "link1dir");
223 var symlink2Path = path.join(temp, "link2dir"); 206 var symlink2Path = path.join(temp, "link2dir");
224 createDir(targetPath); 207 createDir(targetPath);
225 return createSymlink(targetPath, symlink1Path) 208 createSymlink(targetPath, symlink1Path);
226 .then((_) => createSymlink(symlink1Path, symlink2Path)) 209 createSymlink(symlink1Path, symlink2Path);
227 .then((_) { 210 expect(predicate(symlink2Path),
228 expect(predicate(symlink2Path),
229 equals(forMultiLevelDirectorySymlink)); 211 equals(forMultiLevelDirectorySymlink));
230 });
231 }), completes); 212 }), completes);
232 }); 213 });
233 214
234 test('returns $forBrokenSymlink for a broken symlink', () { 215 test('returns $forBrokenSymlink for a broken symlink', () {
235 expect(withTempDir((temp) { 216 expect(withTempDir((temp) {
236 var targetPath = path.join(temp, "dir"); 217 var targetPath = path.join(temp, "dir");
237 var symlinkPath = path.join(temp, "linkdir"); 218 var symlinkPath = path.join(temp, "linkdir");
238 createDir(targetPath); 219 createDir(targetPath);
239 return createSymlink(targetPath, symlinkPath).then((_) { 220 createSymlink(targetPath, symlinkPath);
240 deleteEntry(targetPath); 221 deleteEntry(targetPath);
241 expect(predicate(symlinkPath), equals(forBrokenSymlink)); 222 expect(predicate(symlinkPath), equals(forBrokenSymlink));
242 });
243 }), completes); 223 }), completes);
244 }); 224 });
245 225
246 test('returns $forMultiLevelBrokenSymlink for a multi-level broken symlink', 226 test('returns $forMultiLevelBrokenSymlink for a multi-level broken symlink',
247 () { 227 () {
248 expect(withTempDir((temp) { 228 expect(withTempDir((temp) {
249 var targetPath = path.join(temp, "dir"); 229 var targetPath = path.join(temp, "dir");
250 var symlink1Path = path.join(temp, "link1dir"); 230 var symlink1Path = path.join(temp, "link1dir");
251 var symlink2Path = path.join(temp, "link2dir"); 231 var symlink2Path = path.join(temp, "link2dir");
252 createDir(targetPath); 232 createDir(targetPath);
253 return createSymlink(targetPath, symlink1Path) 233 createSymlink(targetPath, symlink1Path);
254 .then((_) => createSymlink(symlink1Path, symlink2Path)) 234 createSymlink(symlink1Path, symlink2Path);
255 .then((_) { 235 deleteEntry(targetPath);
256 deleteEntry(targetPath); 236 expect(predicate(symlink2Path), equals(forMultiLevelBrokenSymlink));
257 expect(predicate(symlink2Path), equals(forMultiLevelBrokenSymlink));
258 });
259 }), completes); 237 }), completes);
260 }); 238 });
261 239
262 // Windows doesn't support symlinking to files. 240 // Windows doesn't support symlinking to files.
263 if (Platform.operatingSystem != 'windows') { 241 if (Platform.operatingSystem != 'windows') {
264 test('returns $forFileSymlink for a symlink to a file', () { 242 test('returns $forFileSymlink for a symlink to a file', () {
265 expect(withTempDir((temp) { 243 expect(withTempDir((temp) {
266 var targetPath = path.join(temp, "test.txt"); 244 var targetPath = path.join(temp, "test.txt");
267 var symlinkPath = path.join(temp, "link.txt"); 245 var symlinkPath = path.join(temp, "link.txt");
268 writeTextFile(targetPath, "contents"); 246 writeTextFile(targetPath, "contents");
269 return createSymlink(targetPath, symlinkPath).then((_) { 247 createSymlink(targetPath, symlinkPath);
270 expect(predicate(symlinkPath), equals(forFileSymlink)); 248 expect(predicate(symlinkPath), equals(forFileSymlink));
271 });
272 }), completes); 249 }), completes);
273 }); 250 });
274 251
275 test('returns $forMultiLevelFileSymlink for a multi-level symlink to a ' 252 test('returns $forMultiLevelFileSymlink for a multi-level symlink to a '
276 'file', () { 253 'file', () {
277 expect(withTempDir((temp) { 254 expect(withTempDir((temp) {
278 var targetPath = path.join(temp, "test.txt"); 255 var targetPath = path.join(temp, "test.txt");
279 var symlink1Path = path.join(temp, "link1.txt"); 256 var symlink1Path = path.join(temp, "link1.txt");
280 var symlink2Path = path.join(temp, "link2.txt"); 257 var symlink2Path = path.join(temp, "link2.txt");
281 writeTextFile(targetPath, "contents"); 258 writeTextFile(targetPath, "contents");
282 return createSymlink(targetPath, symlink1Path) 259 createSymlink(targetPath, symlink1Path);
283 .then((_) => createSymlink(symlink1Path, symlink2Path)) 260 createSymlink(symlink1Path, symlink2Path);
284 .then((_) { 261 expect(predicate(symlink2Path), equals(forMultiLevelFileSymlink));
285 expect(predicate(symlink2Path), equals(forMultiLevelFileSymlink));
286 });
287 }), completes); 262 }), completes);
288 }); 263 });
289 } 264 }
290 }); 265 });
291 } 266 }
OLDNEW
« no previous file with comments | « utils/tests/pub/descriptor/tar.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698