emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113289: * automated/file-notify-tests.el


From: Michael Albinus
Subject: [Emacs-diffs] trunk r113289: * automated/file-notify-tests.el
Date: Fri, 05 Jul 2013 14:06:20 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113289
revision-id: address@hidden
parent: address@hidden
committer: Michael Albinus <address@hidden>
branch nick: trunk
timestamp: Fri 2013-07-05 16:06:14 +0200
message:
  * automated/file-notify-tests.el
  (file-notify-test-remote-temporary-file-directory): Use
  `null-device' on w32.
  (file-notify--test-tmpfile, file-notify--test-tmpfile1)
  (file-notify--test-results, file-notify--test-event)
  (file-notify--deftest-remote, file-notify--event-test)
  (file-notify--test-event-handler)
  (file-notify--test-make-temp-name): Renamed, in order to mark them
  internal.
  (tramp-message-show-message, tramp-read-passwd): Tweak them for
  better fitting in noninteractive tests.
  (file-notify-test00-availability): Renamed from `file-notify-test0'.
  (file-notify-test01-add-watch): Renamed from `file-notify-test1'.
  Use `temporary-file-directory '.
  (file-notify-test01-add-watch-remote): New test.
  (file-notify-test02-events): Renamed from `file-notify-test2'.
  (file-notify-test02-events-remote): Renamed from `file-notify-test3'.
  (file-notify-test03-autorevert): Renamed from
  `file-notify-test4'.  Use timeouts.
  (file-notify-test03-autorevert-remote): Renamed from
  `file-notify-test5'.
modified:
  test/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-8588
  test/automated/file-notify-tests.el 
filenotifytests.el-20130702144123-sxglvo6zs3jcj8w1-1
=== modified file 'test/ChangeLog'
--- a/test/ChangeLog    2013-07-04 09:43:17 +0000
+++ b/test/ChangeLog    2013-07-05 14:06:14 +0000
@@ -1,3 +1,27 @@
+2013-07-05  Michael Albinus  <address@hidden>
+
+       * automated/file-notify-tests.el
+       (file-notify-test-remote-temporary-file-directory): Use
+       `null-device' on w32.
+       (file-notify--test-tmpfile, file-notify--test-tmpfile1)
+       (file-notify--test-results, file-notify--test-event)
+       (file-notify--deftest-remote, file-notify--event-test)
+       (file-notify--test-event-handler)
+       (file-notify--test-make-temp-name): Renamed, in order to mark them
+       internal.
+       (tramp-message-show-message, tramp-read-passwd): Tweak them for
+       better fitting in noninteractive tests.
+       (file-notify-test00-availability): Renamed from `file-notify-test0'.
+       (file-notify-test01-add-watch): Renamed from `file-notify-test1'.
+       Use `temporary-file-directory '.
+       (file-notify-test01-add-watch-remote): New test.
+       (file-notify-test02-events): Renamed from `file-notify-test2'.
+       (file-notify-test02-events-remote): Renamed from `file-notify-test3'.
+       (file-notify-test03-autorevert): Renamed from
+       `file-notify-test4'.  Use timeouts.
+       (file-notify-test03-autorevert-remote): Renamed from
+       `file-notify-test5'.
+
 2013-07-04  Michael Albinus  <address@hidden>
 
        * automated/file-notify-tests.el: New package.

=== modified file 'test/automated/file-notify-tests.el'
--- a/test/automated/file-notify-tests.el       2013-07-04 09:43:17 +0000
+++ b/test/automated/file-notify-tests.el       2013-07-05 14:06:14 +0000
@@ -21,27 +21,77 @@
 
 ;; Some of the tests are intended to run over remote files.  Set
 ;; `file-notify-test-remote-temporary-file-directory' to a suitable
-;; value.  The remote host must also provide the `inotifywait' program.
+;; value.  It must NOT require an interactive password prompt, when
+;; running the tests in batch mode.
+
+;; If you want to skip tests for remote files, set this variable to
+;; `null-device'.
 
 ;;; Code:
 
 (require 'ert)
 (require 'filenotify)
 
-(ert-deftest file-notify-test0 ()
-  "Test availability of \\[file-notify]."
+;; There is no default value on w32 systems, which could work out of the box.
+(defconst file-notify-test-remote-temporary-file-directory
+  (if (eq system-type 'windows-nt) null-device "/ssh::/tmp")
+  "Temporary directory for Tramp tests.")
+
+(defvar file-notify--test-tmpfile nil)
+(defvar file-notify--test-tmpfile1 nil)
+(defvar file-notify--test-results nil)
+(defvar file-notify--test-event nil)
+
+(require 'tramp)
+(setq tramp-verbose 0
+      tramp-message-show-message nil)
+(when noninteractive (defalias 'tramp-read-passwd 'ignore))
+
+(defmacro file-notify--deftest-remote (test docstring)
+  "Define ert `TEST-remote' for remote files."
+  `(when (ignore-errors
+          (and
+           (file-remote-p file-notify-test-remote-temporary-file-directory)
+           (file-directory-p file-notify-test-remote-temporary-file-directory)
+           (file-writable-p file-notify-test-remote-temporary-file-directory)))
+     ;; Define the test.
+     (ert-deftest ,(intern (concat (symbol-name test) "-remote")) ()
+       ,docstring
+       (let* ((temporary-file-directory
+              file-notify-test-remote-temporary-file-directory)
+             (ert-test (ert-get-test ',test))
+             (most-recent-result (ert-test-most-recent-result ert-test))
+             result)
+        (unwind-protect
+            (progn
+              (setq result
+                    (condition-case err
+                        (ert-run-test ert-test)
+                      ((error quit)
+                       (ert-fail err))))
+              (when (ert-test-failed-p result)
+                (ert-fail
+                 (cadr (ert-test-result-with-condition-condition result)))))
+          ;; Reset status of TEST.
+          (setf (ert-test-most-recent-result ert-test) most-recent-result))))))
+
+(ert-deftest file-notify-test00-availability ()
+  "Test availability of `file-notify'."
   (should (memq file-notify-support '(gfilenotify inotify w32notify))))
 
-(ert-deftest file-notify-test1 ()
-  "Add watch via \\[file-notify-add-watch]."
+(ert-deftest file-notify-test01-add-watch ()
+  "Check `file-notify-add-watch'."
   (let (desc)
     ;; Check, that different valid parameters are accepted.
-    (should (setq desc (file-notify-add-watch "/" '(change) 'ignore)))
-    (file-notify-rm-watch desc)
-    (should (setq desc (file-notify-add-watch "/" '(attribute-change) 
'ignore)))
-    (file-notify-rm-watch desc)
-    (should (setq desc (file-notify-add-watch
-                       "/" '(change attribute-change) 'ignore)))
+    (should (setq desc (file-notify-add-watch
+                       temporary-file-directory '(change) 'ignore)))
+    (file-notify-rm-watch desc)
+    (should (setq desc (file-notify-add-watch
+                       temporary-file-directory '(attribute-change) 'ignore)))
+    (file-notify-rm-watch desc)
+    (should (setq desc (file-notify-add-watch
+                       temporary-file-directory
+                       '(change attribute-change) 'ignore)))
     (file-notify-rm-watch desc)
 
     ;; Check error handling.
@@ -52,121 +102,85 @@
      (equal (should-error (file-notify-add-watch 1 2 3))
            '(wrong-type-argument 1)))
     (should
-     (equal (should-error (file-notify-add-watch "/" 2 3))
+     (equal (should-error (file-notify-add-watch temporary-file-directory 2 3))
            '(wrong-type-argument 2)))
     (should
-     (equal (should-error (file-notify-add-watch "/" '(change) 3))
+     (equal (should-error (file-notify-add-watch
+                          temporary-file-directory '(change) 3))
            '(wrong-type-argument 3)))))
 
-(defvar file-notify-test-tmpfile nil)
-(defvar file-notify-test-tmpfile1 nil)
-(defvar file-notify-test-results nil)
-(defconst file-notify-test-remote-temporary-file-directory "/ssh::/tmp"
-  "Temporary directory for Tramp tests.")
-
-(defvar tramp-verbose)
-(setq tramp-verbose 0)
-(defvar file-notify--event)
-
-(defun file-notify-test-run-remote-test ()
-  "Check, whether the remote tests can be run."
-  (ignore-errors
-    (and
-     (file-directory-p file-notify-test-remote-temporary-file-directory)
-     (file-writable-p file-notify-test-remote-temporary-file-directory))))
-
-(defun file-notify-event-test ()
-  "Ert test function to be called by `file-notify-test-event-handler'.
-We cannot pass arguments, so we assume that `file-notify--event'
+(file-notify--deftest-remote file-notify-test01-add-watch
+  "Check `file-notify-add-watch' for remote files.")
+
+(defun file-notify--test-event-test ()
+  "Ert test function to be called by `file-notify--test-event-handler'.
+We cannot pass arguments, so we assume that `file-notify--test-event'
 is bound somewhere."
-  (message "Event %S" file-notify--event)
+  ;(message "Event %S" file-notify--test-event)
   ;; Check the file name.
   (should
-   (string-equal (file-notify--event-file-name file-notify--event)
-                file-notify-test-tmpfile))
+   (string-equal (file-notify--event-file-name file-notify--test-event)
+                file-notify--test-tmpfile))
   ;; Check the second file name if exists.
-  (when (eq (nth 1 file-notify--event) 'renamed)
+  (when (eq (nth 1 file-notify--test-event) 'renamed)
     (should
      (string-equal
-      (file-notify--event-file1-name file-notify--event)
-      file-notify-test-tmpfile1))))
-
-(defun file-notify-test-event-handler (file-notify--event)
-  "Run a test over FILE-NOTIFY--EVENT.
-Save the result in `file-notify-test-results', for later analysis."
-  (let ((result (ert-run-test (make-ert-test :body 'file-notify-event-test))))
-    (setq file-notify-test-results
-         (append file-notify-test-results `(,result)))))
-
-(defun file-notify-test-make-temp-name ()
+      (file-notify--event-file1-name file-notify--test-event)
+      file-notify--test-tmpfile1))))
+
+(defun file-notify--test-event-handler (file-notify--test-event)
+  "Run a test over FILE-NOTIFY--TEST-EVENT.
+Save the result in `file-notify--test-results', for later analysis."
+  (let ((result
+        (ert-run-test (make-ert-test :body 'file-notify--test-event-test))))
+    (setq file-notify--test-results
+         (append file-notify--test-results `(,result)))))
+
+(defun file-notify--test-make-temp-name ()
   "Create a temporary file name for test."
   (expand-file-name
    (make-temp-name "file-notify-test") temporary-file-directory))
 
-(ert-deftest file-notify-test2 ()
+(ert-deftest file-notify-test02-events ()
   "Check file creation/removal notifications."
   (let (desc)
     (unwind-protect
        (progn
-         (setq file-notify-test-results nil
-               file-notify-test-tmpfile (file-notify-test-make-temp-name)
-               file-notify-test-tmpfile1 (file-notify-test-make-temp-name)
+         (setq file-notify--test-results nil
+               file-notify--test-tmpfile (file-notify--test-make-temp-name)
+               file-notify--test-tmpfile1 (file-notify--test-make-temp-name)
                desc
                (file-notify-add-watch
-                file-notify-test-tmpfile
-                '(change) 'file-notify-test-event-handler))
+                file-notify--test-tmpfile
+                '(change) 'file-notify--test-event-handler))
 
          ;; Check creation and removal.
-         (write-region "any text" nil file-notify-test-tmpfile)
-         (delete-file file-notify-test-tmpfile)
+         (write-region "any text" nil file-notify--test-tmpfile)
+         (delete-file file-notify--test-tmpfile)
 
          ;; Check copy and rename.
-         (write-region "any text" nil file-notify-test-tmpfile)
-         (copy-file file-notify-test-tmpfile file-notify-test-tmpfile1)
-         (delete-file file-notify-test-tmpfile)
-         (delete-file file-notify-test-tmpfile1)
+         (write-region "any text" nil file-notify--test-tmpfile)
+         (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+         (delete-file file-notify--test-tmpfile)
+         (delete-file file-notify--test-tmpfile1)
 
-         (write-region "any text" nil file-notify-test-tmpfile)
-         (rename-file file-notify-test-tmpfile file-notify-test-tmpfile1)
-         (delete-file file-notify-test-tmpfile1))
+         (write-region "any text" nil file-notify--test-tmpfile)
+         (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+         (delete-file file-notify--test-tmpfile1))
 
       ;; Wait for events, and exit.
       (sit-for 5 'nodisplay)
       (file-notify-rm-watch desc)
-      (ignore-errors (delete-file file-notify-test-tmpfile))
-      (ignore-errors (delete-file file-notify-test-tmpfile1))))
+      (ignore-errors (delete-file file-notify--test-tmpfile))
+      (ignore-errors (delete-file file-notify--test-tmpfile1))))
 
-  (dolist (result file-notify-test-results)
+  (dolist (result file-notify--test-results)
     ;(message "%s" (ert-test-result-messages result))
     (when (ert-test-failed-p result)
       (ert-fail (cadr (ert-test-result-with-condition-condition result))))))
 
-;; TODO: When the remote test fails, suppress FAILED indication for TEST.
-(defmacro file-notify-test-remote (test)
-  "Run ert TEST for remote files."
-  `(let* ((temporary-file-directory
-          file-notify-test-remote-temporary-file-directory)
-         (ert-test (ert-get-test ,test))
-         (most-recent-result (ert-test-most-recent-result ert-test))
-         result)
-     (unwind-protect
-        (progn
-          (setq result
-                (condition-case err
-                    (ert-run-test (ert-get-test ,test))
-                  ((error quit)
-                   (ert-fail err))))
-          (when (ert-test-failed-p result)
-            (ert-fail
-             (cadr (ert-test-result-with-condition-condition result)))))
-       ;; Reset status of TEST.
-       (setf (ert-test-most-recent-result ert-test) most-recent-result))))
-
-(when (file-notify-test-run-remote-test)
-  (ert-deftest file-notify-test3 ()
-    "Check file creation/removal notification for remote files."
-    (file-notify-test-remote 'file-notify-test2))
-) ;; (file-notify-test-run-remote-test)
+(file-notify--deftest-remote file-notify-test02-events
+  "Check file creation/removal notifications for remote files.")
 
 ;; autorevert runs only in interactive mode.
 (defvar auto-revert-remote-files)
@@ -174,50 +188,58 @@
 (require 'autorevert)
 (when (null noninteractive)
 
-  (ert-deftest file-notify-test4 ()
+  (ert-deftest file-notify-test03-autorevert ()
     "Check autorevert via file notification.
 This test is skipped in batch mode."
     ;; `auto-revert-buffers' runs every 5".  And we must wait, until
     ;; the file has been reverted.
-    (let ((wait 10)
+    (let ((timeout 10)
          buf)
       (unwind-protect
          (progn
-           (setq file-notify-test-tmpfile (file-notify-test-make-temp-name))
+           (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
 
-           (write-region "any text" nil file-notify-test-tmpfile)
-           (setq buf (find-file-noselect file-notify-test-tmpfile))
+           (write-region "any text" nil file-notify--test-tmpfile)
+           (setq buf (find-file-noselect file-notify--test-tmpfile))
            (with-current-buffer buf
              (should (string-equal (buffer-string) "any text"))
              (auto-revert-mode 1)
+
              ;; `auto-revert-buffers' runs every 5".
-             (sit-for wait)
+             (with-timeout (timeout (ignore))
+               (while (null auto-revert-notify-watch-descriptor)
+                 (sit-for 0.1 'nodisplay)))
 
              ;; Check, that file notification has been used.
              (should auto-revert-mode)
              (should auto-revert-use-notify)
              (should auto-revert-notify-watch-descriptor)
 
-             ;; Modify file.
+             ;; Modify file.  We wait for a second, in order to
+             ;; have another timestamp.
+             (sit-for 1)
              (shell-command
               (format "echo -n 'another text' >%s"
-                      (or (file-remote-p file-notify-test-tmpfile 'localname)
-                          file-notify-test-tmpfile)))
-             (sit-for wait)
+                      (or (file-remote-p file-notify--test-tmpfile 'localname)
+                          file-notify--test-tmpfile)))
 
              ;; Check, that the buffer has been reverted.
+             (with-current-buffer (get-buffer-create "*Messages*")
+               (with-timeout (timeout (ignore))
+                 (while
+                     (null (string-match
+                            (format "Reverting buffer `%s'." (buffer-name buf))
+                            (buffer-string)))
+                   (sit-for 0.1 'nodisplay))))
              (should (string-equal (buffer-string) "another text"))))
 
        ;; Exit.
        (ignore-errors (kill-buffer buf))
-       (ignore-errors (delete-file file-notify-test-tmpfile)))))
+       (ignore-errors (delete-file file-notify--test-tmpfile)))))
 
-  (when (file-notify-test-run-remote-test)
-    (ert-deftest file-notify-test5 ()
-      "Check autorevert via file notification for remote files.
-This test is skipped in batch mode."
-      (file-notify-test-remote 'file-notify-test4))
-    ) ;; (file-notify-test-run-remote-test)
+  (file-notify--deftest-remote file-notify-test03-autorevert
+    "Check autorevert via file notification for remote files.
+This test is skipped in batch mode.")
   ) ;; (null noninteractive)
 
 (defun file-notify-test-all (&optional interactive)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]