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

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: Update Mac OS X impl. 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
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 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 }
OLDNEW
« sdk/lib/io/file_system_entity.dart ('K') | « sdk/lib/io/file_system_entity.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698