]> git.eshelyaron.com Git - emacs.git/commitdiff
Some fixes in filenotify-tests.el for cygwin
authorMichael Albinus <michael.albinus@gmx.de>
Mon, 6 Jun 2016 16:25:28 +0000 (18:25 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Mon, 6 Jun 2016 16:25:28 +0000 (18:25 +0200)
* test/lisp/filenotify-tests.el (file-notify--test-timeout):
Reintroduce value for cygwin, it's needed on slow systems.
(file-notify--wait-for-events): Move up definition.
(file-notify--test-no-descriptors): Use `file-notify--wait-for-events'.
(file-notify--test-with-events-check, file-notify--test-with-events)
(file-notify-test08-watched-file-in-watched-dir):
Use :random rather than `random.
(file-notify-test06-many-events): Do not skip for cygwin.

test/lisp/filenotify-tests.el

index a7f89cfcc9f7d19b5a94108253ba0e38dc5d15be..518a1eb1f5aafe94a897eef2424681187df591ce 100644 (file)
@@ -73,14 +73,23 @@ It is different for local and remote file notification libraries.")
   (cond
    ((file-remote-p temporary-file-directory) 6)
    ((string-equal (file-notify--test-library) "w32notify") 4)
+   ((eq system-type 'cygwin) 6)
    (t 3)))
 
+(defmacro file-notify--wait-for-events (timeout until)
+  "Wait for and return file notification events until form UNTIL is true.
+TIMEOUT is the maximum time to wait for, in seconds."
+  `(with-timeout (,timeout (ignore))
+     (while (null ,until)
+       (read-event nil nil file-notify--test-read-event-timeout))))
+
 (defun file-notify--test-no-descriptors ()
   "Check that `file-notify-descriptors' is an empty hash table.
 Return nil when any other file notification watch is still active."
   ;; Give read events a last chance.
-  (unless (zerop (hash-table-count file-notify-descriptors))
-    (read-event nil nil file-notify--test-read-event-timeout))
+  (file-notify--wait-for-events
+   (file-notify--test-timeout)
+   (zerop (hash-table-count file-notify-descriptors)))
   ;; Now check.
   (zerop (hash-table-count file-notify-descriptors)))
 
@@ -331,20 +340,13 @@ and the event to `file-notify--test-events'."
   (expand-file-name
    (make-temp-name "file-notify-test") temporary-file-directory))
 
-(defmacro file-notify--wait-for-events (timeout until)
-  "Wait for and return file notification events until form UNTIL is true.
-TIMEOUT is the maximum time to wait for, in seconds."
-  `(with-timeout (,timeout (ignore))
-     (while (null ,until)
-       (read-event nil nil file-notify--test-read-event-timeout))))
-
 (defun file-notify--test-with-events-check (events)
   "Check whether received events match one of the EVENTS alternatives."
   (let (result)
     (dolist (elt events result)
       (setq result
             (or result
-                (if (eq (car elt) 'random)
+                (if (eq (car elt) :random)
                     (equal (sort (cdr elt) 'string-lessp)
                            (sort (mapcar #'cadr file-notify--test-events)
                                  'string-lessp))
@@ -366,7 +368,7 @@ TIMEOUT is the maximum time to wait for, in seconds."
   "Run BODY collecting events and then compare with EVENTS.
 EVENTS is either a simple list of events, or a list of lists of
 events, which represent different possible results.  The first
-event of a list could be the pseudo event `random', which is
+event of a list could be the pseudo event `:random', which is
 just an indicator for comparison.
 
 Don't wait longer than timeout seconds for the events to be
@@ -377,7 +379,7 @@ delivered."
            (apply
             'max
             (mapcar
-             (lambda (x) (length (if (eq (car x) 'random) (cdr x) x)))
+             (lambda (x) (length (if (eq (car x) :random) (cdr x) x)))
              events)))
           create-lockfiles)
      ;; Flush pending events.
@@ -862,8 +864,6 @@ delivered."
   "Check that events are not dropped."
   :tags '(:expensive-test)
   (skip-unless (file-notify--test-local-enabled))
-  ;; Under cygwin events arrive in random order.  Impossible to define a test.
-  (skip-unless (not (eq system-type 'cygwin)))
 
   (should
    (setq file-notify--test-tmpfile
@@ -902,6 +902,12 @@ delivered."
              (let (r)
                (dotimes (_i n r)
                  (setq r (append '(deleted renamed) r)))))
+            ;; cygwin fires `changed' and `deleted' events, sometimes
+            ;; in random order.
+            ((eq system-type 'cygwin)
+             (let ((r '(:random)))
+               (dotimes (_i n r)
+                 (setq r (append r '(changed deleted))))))
             (t (make-list n 'renamed)))
           (let ((source-file-list source-file-list)
                 (target-file-list target-file-list))
@@ -1090,7 +1096,7 @@ the file watch."
                      events)))
             ;; gvfs-monitor-dir returns the events in random order.
             (when (string-equal "gvfs-monitor-dir" (file-notify--test-library))
-              (setq events (cons 'random events)))
+              (setq events (cons :random events)))
 
             ;; Run the test.
             (file-notify--test-with-events events
@@ -1109,7 +1115,7 @@ the file watch."
         ;; directory and the file monitor.  The `stopped' event is
         ;; from the file monitor.  It's undecided in which order the
         ;; the directory and the file monitor are triggered.
-        (file-notify--test-with-events '(random deleted deleted stopped)
+        (file-notify--test-with-events '(:random deleted deleted stopped)
           (delete-file file-notify--test-tmpfile1))
         (should (file-notify-valid-p file-notify--test-desc1))
         (should-not (file-notify-valid-p file-notify--test-desc2))