]> code.delx.au - gnu-emacs/blobdiff - test/lisp/filenotify-tests.el
Adapt filenotify-tests.el according latest tests
[gnu-emacs] / test / lisp / filenotify-tests.el
index 9f0c0ed0dc1609f87226d5170f7c93ed03d727f3..49a861d91a441936f892a79e922adfbf4d58458c 100644 (file)
@@ -140,7 +140,7 @@ being the result.")
          (setq desc
                (file-notify-add-watch
                 file-notify-test-remote-temporary-file-directory
-                '(change) 'ignore))))
+                '(change) #'ignore))))
       (setq file-notify--test-remote-enabled-checked (cons t desc))
       (when desc (file-notify-rm-watch desc))))
   ;; Return result.
@@ -180,7 +180,7 @@ remote host, or nil."
   (message "Library: `%s'" (file-notify--test-library))
   (should
    (setq file-notify--test-desc
-         (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+         (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
 
   ;; Cleanup.
   (file-notify--test-cleanup))
@@ -199,23 +199,23 @@ remote host, or nil."
   ;; Check, that different valid parameters are accepted.
   (should
    (setq file-notify--test-desc
-         (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+         (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          temporary-file-directory '(attribute-change) 'ignore)))
+          temporary-file-directory '(attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          temporary-file-directory '(change attribute-change) 'ignore)))
+          temporary-file-directory '(change attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          file-notify--test-tmpfile '(change attribute-change) 'ignore)))
+          file-notify--test-tmpfile '(change attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (delete-file file-notify--test-tmpfile)
 
@@ -238,7 +238,7 @@ remote host, or nil."
   (should
    (equal (should-error
            (file-notify-add-watch
-            file-notify--test-tmpfile1 '(change attribute-change) 'ignore))
+            file-notify--test-tmpfile1 '(change attribute-change) #'ignore))
           `(file-notify-error
             "Directory does not exist" ,file-notify--test-tmpfile)))
 
@@ -361,7 +361,7 @@ longer than timeout seconds for the events to be delivered."
            (setq file-notify--test-desc
                  (file-notify-add-watch
                   file-notify--test-tmpfile
-                  '(change) 'file-notify--test-event-handler)))
+                  '(change) #'file-notify--test-event-handler)))
           (file-notify--test-with-events
               (cond
                ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -381,7 +381,7 @@ longer than timeout seconds for the events to be delivered."
         (setq file-notify--test-desc
               (file-notify-add-watch
                file-notify--test-tmpfile
-               '(change) 'file-notify--test-event-handler)))
+               '(change) #'file-notify--test-event-handler)))
         (file-notify--test-with-events
            (cond
             ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -397,7 +397,6 @@ longer than timeout seconds for the events to be delivered."
               '((changed deleted stopped)
                 (changed changed deleted stopped)))
             (t '(changed changed deleted stopped)))
-          (read-event nil nil file-notify--test-read-event-timeout)
           (write-region
            "another text" nil file-notify--test-tmpfile nil 'no-message)
           (read-event nil nil file-notify--test-read-event-timeout)
@@ -414,7 +413,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not raise `deleted' and `stopped'
@@ -429,11 +428,10 @@ longer than timeout seconds for the events to be delivered."
               ((string-equal (file-notify--test-library) "kqueue")
                '(created changed deleted stopped))
               (t '(created changed deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check copy of files inside a directory.
@@ -445,7 +443,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not distinguish between `changed' and
@@ -464,7 +462,6 @@ longer than timeout seconds for the events to be delivered."
                '(created changed created changed deleted stopped))
               (t '(created changed created changed
                    deleted deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
@@ -475,7 +472,7 @@ longer than timeout seconds for the events to be delivered."
            (read-event nil nil file-notify--test-read-event-timeout)
            (set-file-times file-notify--test-tmpfile '(0 0))
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check rename of files inside a directory.
@@ -487,7 +484,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not raise `deleted' and `stopped'
@@ -502,14 +499,13 @@ longer than timeout seconds for the events to be delivered."
               ((string-equal (file-notify--test-library) "kqueue")
                '(created changed renamed deleted stopped))
               (t '(created changed renamed deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
            (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
            ;; After the rename, we won't get events anymore.
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check attribute change.  Does not work for cygwin.
@@ -521,20 +517,22 @@ longer than timeout seconds for the events to be delivered."
           (setq file-notify--test-desc
                 (file-notify-add-watch
                  file-notify--test-tmpfile
-                 '(attribute-change) 'file-notify--test-event-handler)))
+                 '(attribute-change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not distinguish between `changed' and
-              ;; `attribute-changed'.
+              ;; `attribute-changed'.  Under MS Windows 7, we get
+              ;; four `changed' events, and under MS Windows 10 just
+              ;; two.  Strange.
               ((string-equal (file-notify--test-library) "w32notify")
-               '(changed changed changed changed))
+               '((changed changed)
+                 (changed changed changed changed)))
               ;; For kqueue and in the remote case, `write-region'
               ;; raises also an `attribute-changed' event.
               ((or (string-equal (file-notify--test-library) "kqueue")
                    (file-remote-p temporary-file-directory))
                '(attribute-changed attribute-changed attribute-changed))
               (t '(attribute-changed attribute-changed)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
@@ -670,6 +668,7 @@ longer than timeout seconds for the events to be delivered."
               (file-notify-add-watch
                file-notify--test-tmpfile
                '(change) #'file-notify--test-event-handler)))
+       (should (file-notify-valid-p file-notify--test-desc))
         (file-notify--test-with-events
             (cond
              ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -685,8 +684,6 @@ longer than timeout seconds for the events to be delivered."
               '((changed deleted stopped)
                 (changed changed deleted stopped)))
             (t '(changed changed deleted stopped)))
-          (should (file-notify-valid-p file-notify--test-desc))
-         (read-event nil nil file-notify--test-read-event-timeout)
           (write-region
            "another text" nil file-notify--test-tmpfile nil 'no-message)
          (read-event nil nil file-notify--test-read-event-timeout)
@@ -707,6 +704,7 @@ longer than timeout seconds for the events to be delivered."
               (file-notify-add-watch
                temporary-file-directory
                '(change) #'file-notify--test-event-handler)))
+       (should (file-notify-valid-p file-notify--test-desc))
        (file-notify--test-with-events
         (cond
          ;; w32notify does not raise `deleted' and `stopped' events
@@ -721,8 +719,6 @@ longer than timeout seconds for the events to be delivered."
          ((string-equal (file-notify--test-library) "kqueue")
           '(created changed deleted stopped))
          (t '(created changed deleted deleted stopped)))
-        (should (file-notify-valid-p file-notify--test-desc))
-        (read-event nil nil file-notify--test-read-event-timeout)
         (write-region
          "any text" nil file-notify--test-tmpfile nil 'no-message)
         (read-event nil nil file-notify--test-read-event-timeout)
@@ -743,9 +739,9 @@ longer than timeout seconds for the events to be delivered."
 
   (unwind-protect
       (progn
-        (setq file-notify--test-tmpfile
-             (file-name-as-directory (file-notify--test-make-temp-name)))
-        (make-directory file-notify--test-tmpfile)
+       (should
+        (setq file-notify--test-tmpfile
+              (make-temp-file "file-notify-test-parent" t)))
        (should
         (setq file-notify--test-desc
               (file-notify-add-watch
@@ -765,9 +761,9 @@ longer than timeout seconds for the events to be delivered."
 
   (unwind-protect
       (progn
-       (setq file-notify--test-tmpfile
-             (file-name-as-directory (file-notify--test-make-temp-name)))
-        (make-directory file-notify--test-tmpfile)
+       (should
+        (setq file-notify--test-tmpfile
+              (make-temp-file "file-notify-test-parent" t)))
        (should
         (setq file-notify--test-desc
               (file-notify-add-watch
@@ -795,13 +791,14 @@ longer than timeout seconds for the events to be delivered."
   ;; Under cygwin events arrive in random order.  Impossible to define a test.
   (skip-unless (not (eq system-type 'cygwin)))
 
-  (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
-  (make-directory file-notify--test-tmpfile)
+  (should
+   (setq file-notify--test-tmpfile
+        (make-temp-file "file-notify-test-parent" t)))
   (should
    (setq file-notify--test-desc
         (file-notify-add-watch
          file-notify--test-tmpfile
-         '(change) 'file-notify--test-event-handler)))
+         '(change) #'file-notify--test-event-handler)))
   (unwind-protect
       (let ((n 1000)
             source-file-list target-file-list
@@ -1058,6 +1055,47 @@ the file watch."
 (file-notify--deftest-remote file-notify-test08-watched-file-in-watched-dir
   "Check `file-notify-test08-watched-file-in-watched-dir' for remote files.")
 
+(ert-deftest file-notify-test09-sufficient-ressources ()
+  "Check that file notification does not use too many ressources."
+  :tags '(:expensive-test)
+  (skip-unless (file-notify--test-local-enabled))
+  ;; This test is intended for kqueue only.
+  (skip-unless (string-equal (file-notify--test-library) "kqueue"))
+
+  (should
+   (setq file-notify--test-tmpfile
+        (make-temp-file "file-notify-test-parent" t)))
+  (unwind-protect
+      (let ((temporary-file-directory file-notify--test-tmpfile)
+           descs)
+       (should-error
+        (while t
+          ;; We watch directories, because we want to reach the upper
+          ;; limit.  Watching a file might not be sufficient, because
+          ;; most of the libraries implement this as watching the
+          ;; upper directory.
+          (setq file-notify--test-tmpfile1
+                (make-temp-file "file-notify-test-parent" t)
+                descs
+                (cons
+                 (should
+                  (file-notify-add-watch
+                   file-notify--test-tmpfile1 '(change) #'ignore))
+                 descs)))
+        :type 'file-notify-error)
+       ;; Remove watches.  If we don't do it prior removing
+       ;; directories, Emacs crashes in batch mode.
+       (dolist (desc descs)
+        (file-notify-rm-watch desc))
+       ;; Remove directories.
+        (delete-directory file-notify--test-tmpfile 'recursive))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test09-sufficient-ressources
+  "Check `file-notify-test09-sufficient-ressources' for remote files.")
+
 (defun file-notify-test-all (&optional interactive)
   "Run all tests for \\[file-notify]."
   (interactive "p")