Chromium Code Reviews| 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..b47ce1f93145a9a6fc53d9b32b787c557cb9c796 |
| --- /dev/null |
| +++ b/tests/standalone/io/file_system_watcher_test.dart |
| @@ -0,0 +1,190 @@ |
| +// 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 file = new File(dir.path + '/file'); |
| + |
| + var watcher = dir.watch(); |
| + |
| + var port = new ReceivePort(); |
| + var sub; |
| + sub = watcher.listen((event) { |
| + if (event is FileSystemCreateEvent && |
| + event.path.endsWith('file')) { |
| + port.close(); |
| + sub.cancel(); |
| + dir.deleteSync(recursive: true); |
|
Søren Gjesse
2013/08/26 07:51:55
Failure for all other events (for all tests)?
Anders Johnsen
2013/09/03 11:36:23
Sadly, no. I had this, but some platforms put in e
|
| + } |
|
Søren Gjesse
2013/08/26 07:51:55
Add an onDone handler and expect it no be called (
Anders Johnsen
2013/09/03 11:36:23
As we stop it by canceling the subscription, there
|
| + }, onError: (e) { |
| + dir.deleteSync(recursive: true); |
| + throw e; |
| + }); |
| + |
| + file.createSync(); |
| +} |
| + |
| + |
| +void testWatchModifyFile() { |
| + var dir = new Directory('').createTempSync(); |
| + var file = new File(dir.path + '/file'); |
| + file.createSync(); |
| + |
| + var watcher = dir.watch(); |
| + |
| + var port = new ReceivePort(); |
| + var sub; |
| + sub = watcher.listen((event) { |
| + if (event is FileSystemModifyEvent) { |
| + Expect.isTrue(event.path.endsWith('file')); |
| + sub.cancel(); |
| + 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 file = new File(dir.path + '/file'); |
| + file.createSync(); |
| + |
| + var watcher = dir.watch(); |
| + |
| + var port = new ReceivePort(); |
| + var sub; |
| + sub = watcher.listen((event) { |
| + if (event is FileSystemMoveEvent) { |
| + Expect.isTrue(event.path.endsWith('file')); |
| + Expect.isTrue(event.destination.endsWith('file2')); |
| + sub.cancel(); |
| + 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 file = new File(dir.path + '/file'); |
| + file.createSync(); |
| + |
| + var watcher = dir.watch(); |
| + |
| + var port = new ReceivePort(); |
| + var sub; |
| + sub = watcher.listen((event) { |
| + if (event is FileSystemDeleteEvent) { |
| + Expect.isTrue(event.path.endsWith('file')); |
| + sub.cancel(); |
| + port.close(); |
| + dir.deleteSync(recursive: true); |
| + } |
| + }, onDone: () { |
| + Expect.isTrue(gotEvent); |
| + }, onError: (e) { |
| + dir.deleteSync(recursive: true); |
| + throw e; |
| + }); |
| + |
| + file.deleteSync(); |
| +} |
| + |
| + |
| +void testWatchOnlyModifyFile() { |
| + var dir = new Directory('').createTempSync(); |
| + var file = new File(dir.path + '/file'); |
| + |
| + var watcher = dir.watch(events: FileSystemEvent.MODIFY_EVENT); |
| + |
| + var port = new ReceivePort(); |
| + var sub; |
| + sub = watcher.listen((event) { |
| + Expect.isTrue(event is FileSystemModifyEvent); |
| + Expect.isTrue(event.path.endsWith('file')); |
| + sub.cancel(); |
| + port.close(); |
| + dir.deleteSync(recursive: true); |
| + }, onError: (e) { |
| + dir.deleteSync(recursive: true); |
| + throw e; |
| + }); |
| + |
| + file.createSync(); |
| + file.writeAsStringSync('a'); |
| +} |
| + |
| + |
| +void testMultipleEvents() { |
| + var dir = new Directory('').createTempSync(); |
| + var file = new File(dir.path + '/file'); |
| + var file2 = new File(dir.path + '/file2'); |
| + |
| + var watcher = dir.watch(); |
| + |
| + var port = new ReceivePort(); |
| + int state = 0; |
| + var sub; |
| + sub = 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); |
| + sub.cancel(); |
| + port.close(); |
| + dir.deleteSync(); |
| + break; |
| + } |
| + }); |
| + |
| + file.createSync(); |
| + file.writeAsStringSync('a'); |
| + file.renameSync(file2.path); |
| + file2.deleteSync(); |
| +} |
| + |
| + |
| +void main() { |
| + testWatchCreateFile(); |
| + testWatchModifyFile(); |
| + testWatchMoveFile(); |
| + testWatchDeleteFile(); |
| + testWatchOnlyModifyFile(); |
| + testMultipleEvents(); |
| +} |