OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import "dart:async"; | |
6 import "package:expect/expect.dart"; | |
7 import "dart:io"; | |
8 import "dart:isolate"; | |
9 | |
10 | |
11 void testWatchCreateFile() { | |
12 var dir = new Directory('').createTempSync(); | |
13 var file = new File(dir.path + '/file'); | |
14 | |
15 var watcher = dir.watch(); | |
16 | |
17 var port = new ReceivePort(); | |
18 var sub; | |
19 sub = watcher.listen((event) { | |
20 if (event is FileSystemCreateEvent && | |
21 event.path.endsWith('file')) { | |
22 port.close(); | |
23 sub.cancel(); | |
24 dir.deleteSync(recursive: true); | |
25 } | |
26 }, onError: (e) { | |
27 dir.deleteSync(recursive: true); | |
28 throw e; | |
29 }); | |
30 | |
31 file.createSync(); | |
32 } | |
33 | |
34 | |
35 void testWatchModifyFile() { | |
36 var dir = new Directory('').createTempSync(); | |
37 var file = new File(dir.path + '/file'); | |
38 file.createSync(); | |
39 | |
40 var watcher = dir.watch(); | |
41 | |
42 var port = new ReceivePort(); | |
Søren Gjesse
2013/09/03 12:19:58
Use asyncStart/asyncEnd - in all tests.
Anders Johnsen
2013/09/03 12:43:32
Done.
| |
43 var sub; | |
44 sub = watcher.listen((event) { | |
45 if (event is FileSystemModifyEvent) { | |
46 Expect.isTrue(event.path.endsWith('file')); | |
47 sub.cancel(); | |
48 port.close(); | |
49 dir.deleteSync(recursive: true); | |
50 } | |
51 }, onError: (e) { | |
52 dir.deleteSync(recursive: true); | |
53 throw e; | |
54 }); | |
55 | |
56 file.writeAsStringSync('a'); | |
57 } | |
58 | |
59 | |
60 void testWatchMoveFile() { | |
61 var dir = new Directory('').createTempSync(); | |
62 var file = new File(dir.path + '/file'); | |
63 file.createSync(); | |
64 | |
65 var watcher = dir.watch(); | |
66 | |
67 var port = new ReceivePort(); | |
68 var sub; | |
69 sub = watcher.listen((event) { | |
70 if (event is FileSystemMoveEvent) { | |
71 Expect.isTrue(event.path.endsWith('file')); | |
72 Expect.isTrue(event.destination.endsWith('file2')); | |
73 sub.cancel(); | |
74 port.close(); | |
75 dir.deleteSync(recursive: true); | |
76 } | |
77 }, onError: (e) { | |
78 dir.deleteSync(recursive: true); | |
79 throw e; | |
80 }); | |
81 | |
82 file.renameSync(dir.path + '/file2'); | |
83 } | |
84 | |
85 | |
86 void testWatchDeleteFile() { | |
87 var dir = new Directory('').createTempSync(); | |
88 var file = new File(dir.path + '/file'); | |
89 file.createSync(); | |
90 | |
91 var watcher = dir.watch(); | |
92 | |
93 var port = new ReceivePort(); | |
94 var sub; | |
95 sub = watcher.listen((event) { | |
96 if (event is FileSystemDeleteEvent) { | |
97 Expect.isTrue(event.path.endsWith('file')); | |
98 sub.cancel(); | |
99 port.close(); | |
100 dir.deleteSync(recursive: true); | |
101 } | |
102 }, onDone: () { | |
103 Expect.isTrue(gotEvent); | |
104 }, onError: (e) { | |
105 dir.deleteSync(recursive: true); | |
106 throw e; | |
107 }); | |
108 | |
109 file.deleteSync(); | |
110 } | |
111 | |
112 | |
113 void testWatchOnlyModifyFile() { | |
114 var dir = new Directory('').createTempSync(); | |
115 var file = new File(dir.path + '/file'); | |
116 | |
117 var watcher = dir.watch(events: FileSystemEvent.MODIFY); | |
118 | |
119 var port = new ReceivePort(); | |
120 var sub; | |
121 sub = watcher.listen((event) { | |
122 Expect.isTrue(event is FileSystemModifyEvent); | |
123 Expect.isTrue(event.path.endsWith('file')); | |
124 sub.cancel(); | |
125 port.close(); | |
126 dir.deleteSync(recursive: true); | |
127 }, onError: (e) { | |
128 dir.deleteSync(recursive: true); | |
129 throw e; | |
130 }); | |
131 | |
132 file.createSync(); | |
133 file.writeAsStringSync('a'); | |
134 } | |
135 | |
136 | |
137 void testMultipleEvents() { | |
138 var dir = new Directory('').createTempSync(); | |
139 var file = new File(dir.path + '/file'); | |
140 var file2 = new File(dir.path + '/file2'); | |
141 | |
142 var watcher = dir.watch(); | |
143 | |
144 var port = new ReceivePort(); | |
145 int state = 0; | |
146 var sub; | |
147 sub = watcher.listen((event) { | |
148 switch (state) { | |
149 case 0: | |
150 Expect.isTrue(event is FileSystemCreateEvent); | |
151 state = 1; | |
152 break; | |
153 | |
154 case 1: | |
155 if (event is FileSystemCreateEvent) break; | |
156 Expect.isTrue(event is FileSystemModifyEvent); | |
157 state = 2; | |
158 break; | |
159 | |
160 case 2: | |
161 if (event is FileSystemModifyEvent) break; | |
162 Expect.isTrue(event is FileSystemMoveEvent); | |
163 state = 3; | |
164 break; | |
165 | |
166 case 3: | |
167 if (event is FileSystemMoveEvent) break; | |
168 Expect.isTrue(event is FileSystemDeleteEvent); | |
169 sub.cancel(); | |
170 port.close(); | |
171 dir.deleteSync(); | |
172 break; | |
173 } | |
174 }); | |
175 | |
176 file.createSync(); | |
177 file.writeAsStringSync('a'); | |
178 file.renameSync(file2.path); | |
179 file2.deleteSync(); | |
180 } | |
181 | |
182 | |
183 void testWatchRecursive() { | |
184 var dir = new Directory('').createTempSync(); | |
185 if (Platform.isLinux) { | |
186 Expect.throws(() => dir.watch(recursive: true)); | |
187 return; | |
188 } | |
189 var dir2 = new Directory(dir.path + '/dir'); | |
190 dir2.createSync(); | |
191 var file = new File(dir.path + '/dir/file'); | |
192 | |
193 var watcher = dir.watch(recursive: true); | |
194 | |
195 var port = new ReceivePort(); | |
196 var sub; | |
197 sub = watcher.listen((event) { | |
198 if (event.path.endsWith('file')) { | |
199 sub.cancel(); | |
200 port.close(); | |
201 dir.deleteSync(recursive: true); | |
202 } | |
203 }, onError: (e) { | |
204 dir.deleteSync(recursive: true); | |
205 throw e; | |
206 }); | |
207 | |
208 file.createSync(); | |
209 } | |
210 | |
211 | |
212 void testWatchNonRecursive() { | |
213 var dir = new Directory('').createTempSync(); | |
214 var dir2 = new Directory(dir.path + '/dir'); | |
215 dir2.createSync(); | |
216 var file = new File(dir.path + '/dir/file'); | |
217 | |
218 var watcher = dir.watch(recursive: false); | |
219 | |
220 var port = new ReceivePort(); | |
221 var sub; | |
222 sub = watcher.listen((event) { | |
223 if (event.path.endsWith('file')) { | |
224 throw "File change event not expected"; | |
225 } | |
226 }, onError: (e) { | |
227 dir.deleteSync(recursive: true); | |
228 throw e; | |
229 }); | |
230 | |
231 file.createSync(); | |
232 | |
233 new Timer(const Duration(milliseconds: 300), () { | |
234 sub.cancel(); | |
235 port.close(); | |
236 dir.deleteSync(recursive: true); | |
237 }); | |
238 } | |
239 | |
240 | |
241 void main() { | |
242 testWatchCreateFile(); | |
243 testWatchModifyFile(); | |
244 testWatchMoveFile(); | |
245 testWatchDeleteFile(); | |
246 testWatchOnlyModifyFile(); | |
247 testMultipleEvents(); | |
248 testWatchNonRecursive(); | |
249 } | |
OLD | NEW |