Fix the Mac OS directory watcher tests on the bots.

R=rnystrom@google.com
BUG=15024

Review URL: https://codereview.chromium.org//58903015

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/watcher@30328 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkgs/watcher/test/directory_watcher/mac_os_test.dart b/pkgs/watcher/test/directory_watcher/mac_os_test.dart
index 78ff889..b6a65e6 100644
--- a/pkgs/watcher/test/directory_watcher/mac_os_test.dart
+++ b/pkgs/watcher/test/directory_watcher/mac_os_test.dart
@@ -50,6 +50,29 @@
       () {
     withPermutations((i, j, k) =>
         writeFile("dir/sub/sub-$i/sub-$j/file-$k.txt"));
+
+    // We sleep here because a narrow edge case caused by two interacting bugs
+    // can produce events that aren't expected if we start the watcher too
+    // soon after creating the files above. Here's what happens:
+    //
+    // * We create "dir/sub" and its contents above.
+    //
+    // * We initialize the watcher watching "dir".
+    //
+    // * Due to issue 14373, the watcher can receive native events describing
+    //   the creation of "dir/sub" and its contents despite the fact that they
+    //   occurred before the watcher was started.
+    //
+    // * Usually the above events will occur while the watcher is doing its
+    //   initial scan of "dir/sub" and be ignored, but occasionally they will
+    //   occur afterwards.
+    //
+    // * When processing the bogus CREATE events, the watcher has to assume that
+    //   they could mean something other than CREATE (issue 14793). Thus it
+    //   assumes that the files or directories in question could have changed
+    //   and emits CHANGE events or additional REMOVE/CREATE pairs for them.
+    schedule(() => new Future.delayed(new Duration(seconds: 2)));
+
     startWatcher(dir: "dir");
 
     renameDir("dir/sub", "sub");