Index: packages/watcher/test/directory_watcher/shared.dart |
diff --git a/packages/watcher/test/directory_watcher/shared.dart b/packages/watcher/test/directory_watcher/shared.dart |
index ff48cb2aaaf17ff46b7b5bc035e4d4b2b3dd5610..148eee26384b27fe7de45df5e0fd0ec32ac87b63 100644 |
--- a/packages/watcher/test/directory_watcher/shared.dart |
+++ b/packages/watcher/test/directory_watcher/shared.dart |
@@ -92,6 +92,23 @@ void sharedTests() { |
]); |
}); |
+ // Regression test for b/30768513. |
+ test("doesn't crash when the directory is moved immediately after a subdir " |
+ "is added", () { |
+ writeFile("dir/a.txt"); |
+ writeFile("dir/b.txt"); |
+ |
+ startWatcher(path: "dir"); |
+ |
+ createDir("dir/subdir"); |
+ renameDir("dir", "moved_dir"); |
+ createDir("dir"); |
+ inAnyOrder([ |
+ isRemoveEvent("dir/a.txt"), |
+ isRemoveEvent("dir/b.txt") |
+ ]); |
+ }); |
+ |
group("moves", () { |
test('notifies when a file is moved within the watched directory', () { |
writeFile("old.txt"); |
@@ -246,6 +263,37 @@ void sharedTests() { |
expectModifyEvent("new/file.txt"); |
}); |
+ test('notifies when a file is replaced by a subdirectory', () { |
+ writeFile("new"); |
+ writeFile("old/file.txt"); |
+ startWatcher(); |
+ |
+ deleteFile("new"); |
+ renameDir("old", "new"); |
+ inAnyOrder([ |
+ isRemoveEvent("new"), |
+ isRemoveEvent("old/file.txt"), |
+ isAddEvent("new/file.txt") |
+ ]); |
+ }); |
+ |
+ test('notifies when a subdirectory is replaced by a file', () { |
+ writeFile("old"); |
+ writeFile("new/file.txt"); |
+ startWatcher(); |
+ |
+ renameDir("new", "newer"); |
+ renameFile("old", "new"); |
+ inAnyOrder([ |
+ isRemoveEvent("new/file.txt"), |
+ isAddEvent("newer/file.txt"), |
+ isRemoveEvent("old"), |
+ isAddEvent("new") |
+ ]); |
+ }, onPlatform: { |
+ "mac-os": new Skip("https://github.com/dart-lang/watcher/issues/21") |
+ }); |
+ |
test('emits events for many nested files added at once', () { |
withPermutations((i, j, k) => |
writeFile("sub/sub-$i/sub-$j/file-$k.txt")); |