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

Unified 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 side-by-side diff with in-line comments
Download patch
« sdk/lib/io/file_system_watcher.dart ('K') | « sdk/lib/io/iolib_sources.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/standalone/io/file_system_watcher_test.dart
diff --git a/tests/standalone/io/file_system_watcher_test.dart b/tests/standalone/io/file_system_watcher_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..66e4396f5470392a61450a6cf98ea7fa39e46618
--- /dev/null
+++ b/tests/standalone/io/file_system_watcher_test.dart
@@ -0,0 +1,261 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "dart:io";
+import "dart:isolate";
+
+
+void testWatchCreateFile() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ watcher.watchPath(dir.path);
+ var file = new File(dir.path + '/file');
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ if (event is FileSystemCreateEvent &&
+ event.path.endsWith('file')) {
+ Expect.isFalse(gotEvent);
+ gotEvent = true;
+ watcher.close();
+ }
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.createSync();
+}
+
+
+void testWatchModifyFile() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+ file.createSync();
+
+ watcher.watchPath(dir.path);
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ if (event is FileSystemModifyEvent) {
+ gotEvent = true;
+ Expect.isTrue(event.path.endsWith('file'));
+ watcher.close();
+ }
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.writeAsStringSync('a');
+}
+
+
+void testWatchMoveFile() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+ file.createSync();
+
+ watcher.watchPath(dir.path);
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ if (event is FileSystemMoveEvent) {
+ Expect.isFalse(gotEvent);
+ gotEvent = true;
+ Expect.isTrue(event.path.endsWith('file'));
+ Expect.isTrue(event.destination.endsWith('file2'));
+ watcher.close();
+ }
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.renameSync(dir.path + '/file2');
+}
+
+
+void testWatchDeleteFile() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+ file.createSync();
+
+ watcher.watchPath(dir.path);
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ if (event is FileSystemDeleteEvent) {
+ Expect.isFalse(gotEvent);
+ gotEvent = true;
+ Expect.isTrue(event.path.endsWith('file'));
+ watcher.close();
+ }
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.deleteSync();
+}
+
+
+void testUnwatch() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+ file.createSync();
+
+ watcher.watchPath(dir.path);
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ if (event is FileSystemModifyEvent && !gotEvent) {
+ gotEvent = true;
+ Expect.isTrue(event.path.endsWith('file'));
+ watcher.unwatchPath(dir.path);
+ file.writeAsStringSync('');
+ new Timer(const Duration(milliseconds: 50), watcher.close);
+ }
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.writeAsStringSync('a');
+}
+
+
+void testWatchOnlyModifyFile() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+
+ watcher.watchPath(dir.path, events: FileSystemWatcher.MODIFY_EVENT);
+
+ bool gotEvent = false;
+ var port = new ReceivePort();
+ watcher.listen((event) {
+ gotEvent = true;
+ Expect.isTrue(event is FileSystemModifyEvent);
+ Expect.isTrue(event.path.endsWith('file'));
+ watcher.close();
+ }, onDone: () {
+ Expect.isTrue(gotEvent);
+ port.close();
+ dir.deleteSync(recursive: true);
+ }, onError: (e) {
+ dir.deleteSync(recursive: true);
+ throw e;
+ });
+
+ file.createSync();
+ file.writeAsStringSync('a');
+}
+
+
+void testDoubleWatch() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+
+ watcher.watchPath(dir.path);
+ Expect.throws(() => watcher.watchPath(dir.path));
+
+ watcher.close();
+ dir.deleteSync();
+}
+
+void testMultipleEvents() {
+ var dir = new Directory('').createTempSync();
+ var watcher = new FileSystemWatcher();
+ var file = new File(dir.path + '/file');
+ var file2 = new File(dir.path + '/file2');
+
+ watcher.watchPath(dir.path);
+
+ var port = new ReceivePort();
+ int state = 0;
+ watcher.listen((event) {
+ switch (state) {
+ case 0:
+ Expect.isTrue(event is FileSystemCreateEvent);
+ state = 1;
+ break;
+
+ case 1:
+ if (event is FileSystemCreateEvent) break;
+ Expect.isTrue(event is FileSystemModifyEvent);
+ state = 2;
+ break;
+
+ case 2:
+ if (event is FileSystemModifyEvent) break;
+ Expect.isTrue(event is FileSystemMoveEvent);
+ state = 3;
+ break;
+
+ case 3:
+ if (event is FileSystemMoveEvent) break;
+ Expect.isTrue(event is FileSystemDeleteEvent);
+ watcher.close();
+ state = 4;
+ break;
+
+ case 4:
+ Expect.isTrue(event is FileSystemDeleteEvent);
+ break;
+ }
+ }, onDone: () {
+ port.close();
+ dir.deleteSync();
+ Expect.equals(4, state);
+ });
+
+ file.createSync();
+ file.writeAsStringSync('a');
+ file.renameSync(file2.path);
+ file2.deleteSync();
+}
+
+
+void main() {
+ testWatchCreateFile();
+ testWatchModifyFile();
+ testWatchMoveFile();
+ testWatchDeleteFile();
+ testUnwatch();
+ testWatchOnlyModifyFile();
+ testDoubleWatch();
+ testMultipleEvents();
+}
« 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