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

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

Issue 19263003: Add FileSystemWatcher class to dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Cleanup Created 7 years, 4 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
(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 watcher = new FileSystemWatcher();
14 watcher.watchPath(dir.path);
15 var file = new File(dir.path + '/file');
16
17 bool gotEvent = false;
18 var port = new ReceivePort();
19 watcher.listen((event) {
20 if (event is FileSystemCreateEvent &&
21 event.path.endsWith('file')) {
22 Expect.isFalse(gotEvent);
23 gotEvent = true;
24 watcher.close();
25 }
26 }, onDone: () {
27 Expect.isTrue(gotEvent);
28 port.close();
29 dir.deleteSync(recursive: true);
30 }, onError: (e) {
31 dir.deleteSync(recursive: true);
32 throw e;
33 });
34
35 file.createSync();
36 }
37
38
39 void testWatchModifyFile() {
40 var dir = new Directory('').createTempSync();
41 var watcher = new FileSystemWatcher();
42 var file = new File(dir.path + '/file');
43 file.createSync();
44
45 watcher.watchPath(dir.path);
46
47 bool gotEvent = false;
48 var port = new ReceivePort();
49 watcher.listen((event) {
50 if (event is FileSystemModifyEvent) {
51 gotEvent = true;
52 Expect.isTrue(event.path.endsWith('file'));
53 watcher.close();
54 }
55 }, onDone: () {
56 Expect.isTrue(gotEvent);
57 port.close();
58 dir.deleteSync(recursive: true);
59 }, onError: (e) {
60 dir.deleteSync(recursive: true);
61 throw e;
62 });
63
64 file.writeAsStringSync('a');
65 }
66
67
68 void testWatchMoveFile() {
69 var dir = new Directory('').createTempSync();
70 var watcher = new FileSystemWatcher();
71 var file = new File(dir.path + '/file');
72 file.createSync();
73
74 watcher.watchPath(dir.path);
75
76 bool gotEvent = false;
77 var port = new ReceivePort();
78 watcher.listen((event) {
79 if (event is FileSystemMoveEvent) {
80 Expect.isFalse(gotEvent);
81 gotEvent = true;
82 Expect.isTrue(event.path.endsWith('file'));
83 Expect.isTrue(event.destination.endsWith('file2'));
84 watcher.close();
85 }
86 }, onDone: () {
87 Expect.isTrue(gotEvent);
88 port.close();
89 dir.deleteSync(recursive: true);
90 }, onError: (e) {
91 dir.deleteSync(recursive: true);
92 throw e;
93 });
94
95 file.renameSync(dir.path + '/file2');
96 }
97
98
99 void testWatchDeleteFile() {
100 var dir = new Directory('').createTempSync();
101 var watcher = new FileSystemWatcher();
102 var file = new File(dir.path + '/file');
103 file.createSync();
104
105 watcher.watchPath(dir.path);
106
107 bool gotEvent = false;
108 var port = new ReceivePort();
109 watcher.listen((event) {
110 if (event is FileSystemDeleteEvent) {
111 Expect.isFalse(gotEvent);
112 gotEvent = true;
113 Expect.isTrue(event.path.endsWith('file'));
114 watcher.close();
115 }
116 }, onDone: () {
117 Expect.isTrue(gotEvent);
118 port.close();
119 dir.deleteSync(recursive: true);
120 }, onError: (e) {
121 dir.deleteSync(recursive: true);
122 throw e;
123 });
124
125 file.deleteSync();
126 }
127
128
129 void testUnwatch() {
130 var dir = new Directory('').createTempSync();
131 var watcher = new FileSystemWatcher();
132 var file = new File(dir.path + '/file');
133 file.createSync();
134
135 watcher.watchPath(dir.path);
136
137 bool gotEvent = false;
138 var port = new ReceivePort();
139 watcher.listen((event) {
140 if (event is FileSystemModifyEvent && !gotEvent) {
141 gotEvent = true;
142 Expect.isTrue(event.path.endsWith('file'));
143 watcher.unwatchPath(dir.path);
144 file.writeAsStringSync('');
145 new Timer(const Duration(milliseconds: 50), watcher.close);
146 }
147 }, onDone: () {
148 Expect.isTrue(gotEvent);
149 port.close();
150 dir.deleteSync(recursive: true);
151 }, onError: (e) {
152 dir.deleteSync(recursive: true);
153 throw e;
154 });
155
156 file.writeAsStringSync('a');
157 }
158
159
160 void testWatchOnlyModifyFile() {
161 var dir = new Directory('').createTempSync();
162 var watcher = new FileSystemWatcher();
163 var file = new File(dir.path + '/file');
164
165 watcher.watchPath(dir.path, events: FileSystemWatcher.MODIFY_EVENT);
166
167 bool gotEvent = false;
168 var port = new ReceivePort();
169 watcher.listen((event) {
170 gotEvent = true;
171 Expect.isTrue(event is FileSystemModifyEvent);
172 Expect.isTrue(event.path.endsWith('file'));
173 watcher.close();
174 }, onDone: () {
175 Expect.isTrue(gotEvent);
176 port.close();
177 dir.deleteSync(recursive: true);
178 }, onError: (e) {
179 dir.deleteSync(recursive: true);
180 throw e;
181 });
182
183 file.createSync();
184 file.writeAsStringSync('a');
185 }
186
187
188 void testDoubleWatch() {
189 var dir = new Directory('').createTempSync();
190 var watcher = new FileSystemWatcher();
191
192 watcher.watchPath(dir.path);
193 Expect.throws(() => watcher.watchPath(dir.path));
194
195 watcher.close();
196 dir.deleteSync();
197 }
198
199 void testMultipleEvents() {
200 var dir = new Directory('').createTempSync();
201 var watcher = new FileSystemWatcher();
202 var file = new File(dir.path + '/file');
203 var file2 = new File(dir.path + '/file2');
204
205 watcher.watchPath(dir.path);
206
207 var port = new ReceivePort();
208 int state = 0;
209 watcher.listen((event) {
210 switch (state) {
211 case 0:
212 Expect.isTrue(event is FileSystemCreateEvent);
213 state = 1;
214 break;
215
216 case 1:
217 if (event is FileSystemCreateEvent) break;
218 Expect.isTrue(event is FileSystemModifyEvent);
219 state = 2;
220 break;
221
222 case 2:
223 if (event is FileSystemModifyEvent) break;
224 Expect.isTrue(event is FileSystemMoveEvent);
225 state = 3;
226 break;
227
228 case 3:
229 if (event is FileSystemMoveEvent) break;
230 Expect.isTrue(event is FileSystemDeleteEvent);
231 watcher.close();
232 state = 4;
233 break;
234
235 case 4:
236 Expect.isTrue(event is FileSystemDeleteEvent);
237 break;
238 }
239 }, onDone: () {
240 port.close();
241 dir.deleteSync();
242 Expect.equals(4, state);
243 });
244
245 file.createSync();
246 file.writeAsStringSync('a');
247 file.renameSync(file2.path);
248 file2.deleteSync();
249 }
250
251
252 void main() {
253 testWatchCreateFile();
254 testWatchModifyFile();
255 testWatchMoveFile();
256 testWatchDeleteFile();
257 testUnwatch();
258 testWatchOnlyModifyFile();
259 testDoubleWatch();
260 testMultipleEvents();
261 }
OLDNEW
« sdk/lib/io/file_system_watcher.dart ('K') | « sdk/lib/io/iolib_sources.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698