New macro 'ert-with-message-capture'
* lisp/emacs-lisp/ert-x.el (ert-with-message-capture): New macro. (Bug#25158) * test/lisp/autorevert-tests.el (auto-revert--wait-for-revert) (auto-revert-test00-auto-revert-mode) (auto-revert-test01-auto-revert-several-files) (auto-revert-test02-auto-revert-deleted-file) (auto-revert-test03-auto-revert-tail-mode) (auto-revert-test04-auto-revert-mode-dired): * test/lisp/filenotify-tests.el (file-notify-test03-autorevert): Use ert-with-message-capture.
This commit is contained in:
parent
8ba27b7ce2
commit
ef3d8d6f72
3 changed files with 123 additions and 119 deletions
|
@ -285,6 +285,30 @@ BUFFER defaults to current buffer. Does not modify BUFFER."
|
|||
(kill-buffer clone)))))))
|
||||
|
||||
|
||||
(defmacro ert-with-message-capture (var &rest body)
|
||||
"Execute BODY while collecting anything written with `message' in VAR.
|
||||
|
||||
Capture all messages produced by `message' when it is called from
|
||||
Lisp, and concatenate them separated by newlines into one string.
|
||||
|
||||
This is useful for separating the issuance of messages by the
|
||||
code under test from the behavior of the *Messages* buffer."
|
||||
(declare (debug (symbolp body))
|
||||
(indent 1))
|
||||
(let ((g-advice (cl-gensym)))
|
||||
`(let* ((,var "")
|
||||
(,g-advice (lambda (func &rest args)
|
||||
(if (or (null args) (equal (car args) ""))
|
||||
(apply func args)
|
||||
(let ((msg (apply #'format-message args)))
|
||||
(setq ,var (concat ,var msg "\n"))
|
||||
(funcall func "%s" msg))))))
|
||||
(advice-add 'message :around ,g-advice)
|
||||
(unwind-protect
|
||||
(progn ,@body)
|
||||
(advice-remove 'message ,g-advice)))))
|
||||
|
||||
|
||||
(provide 'ert-x)
|
||||
|
||||
;;; ert-x.el ends here
|
||||
|
|
|
@ -24,24 +24,29 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(require 'ert-x)
|
||||
(require 'autorevert)
|
||||
(setq auto-revert-notify-exclude-dir-regexp "nothing-to-be-excluded"
|
||||
auto-revert-stop-on-user-input nil)
|
||||
|
||||
(defconst auto-revert--timeout 10
|
||||
"Time to wait until a message appears in the *Messages* buffer.")
|
||||
"Time to wait for a message.")
|
||||
|
||||
(defvar auto-revert--messages nil
|
||||
"Used to collect messages issued during a section of a test.")
|
||||
|
||||
(defun auto-revert--wait-for-revert (buffer)
|
||||
"Wait until the *Messages* buffer reports reversion of BUFFER."
|
||||
"Wait until a message reports reversion of BUFFER.
|
||||
This expects `auto-revert--messages' to be bound by
|
||||
`ert-with-message-capture' before calling."
|
||||
(with-timeout (auto-revert--timeout nil)
|
||||
(with-current-buffer "*Messages*"
|
||||
(while
|
||||
(null (string-match
|
||||
(format-message "Reverting buffer `%s'." (buffer-name buffer))
|
||||
(buffer-string)))
|
||||
(if (with-current-buffer buffer auto-revert-use-notify)
|
||||
(read-event nil nil 0.1)
|
||||
(sleep-for 0.1))))))
|
||||
(while
|
||||
(null (string-match
|
||||
(format-message "Reverting buffer `%s'." (buffer-name buffer))
|
||||
auto-revert--messages))
|
||||
(if (with-current-buffer buffer auto-revert-use-notify)
|
||||
(read-event nil nil 0.1)
|
||||
(sleep-for 0.1)))))
|
||||
|
||||
(ert-deftest auto-revert-test00-auto-revert-mode ()
|
||||
"Check autorevert for a file."
|
||||
|
@ -51,41 +56,38 @@
|
|||
buf)
|
||||
(unwind-protect
|
||||
(progn
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(setq buf (find-file-noselect tmpfile))
|
||||
(with-current-buffer buf
|
||||
(should (string-equal (buffer-string) "any text"))
|
||||
;; `buffer-stale--default-function' checks for
|
||||
;; `verify-visited-file-modtime'. We must ensure that it
|
||||
;; returns nil.
|
||||
(sleep-for 1)
|
||||
(auto-revert-mode 1)
|
||||
(should auto-revert-mode)
|
||||
(with-current-buffer buf
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(should (string-equal (buffer-string) "any text"))
|
||||
;; `buffer-stale--default-function' checks for
|
||||
;; `verify-visited-file-modtime'. We must ensure that it
|
||||
;; returns nil.
|
||||
(sleep-for 1)
|
||||
(auto-revert-mode 1)
|
||||
(should auto-revert-mode)
|
||||
|
||||
;; Modify file. We wait for a second, in order to have
|
||||
;; another timestamp.
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
;; Modify file. We wait for a second, in order to have
|
||||
;; another timestamp.
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf))
|
||||
(should (string-match "another text" (buffer-string)))
|
||||
|
||||
;; When the buffer is modified, it shall not be reverted.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(set-buffer-modified-p t)
|
||||
(sleep-for 1)
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(set-buffer-modified-p t)
|
||||
(sleep-for 1)
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer hasn't been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
;; Check, that the buffer hasn't been reverted.
|
||||
(auto-revert--wait-for-revert buf))
|
||||
(should-not (string-match "any text" (buffer-string)))))
|
||||
|
||||
;; Exit.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors
|
||||
(with-current-buffer buf (set-buffer-modified-p nil))
|
||||
(kill-buffer buf))
|
||||
|
@ -106,13 +108,11 @@
|
|||
(make-temp-file (expand-file-name "auto-revert-test" tmpdir1)))
|
||||
buf1 buf2)
|
||||
(unwind-protect
|
||||
(progn
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(write-region "any text" nil tmpfile1 nil 'no-message)
|
||||
(setq buf1 (find-file-noselect tmpfile1))
|
||||
(write-region "any text" nil tmpfile2 nil 'no-message)
|
||||
(setq buf2 (find-file-noselect tmpfile2))
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(write-region "any text" nil tmpfile1 nil 'no-message)
|
||||
(setq buf1 (find-file-noselect tmpfile1))
|
||||
(write-region "any text" nil tmpfile2 nil 'no-message)
|
||||
(setq buf2 (find-file-noselect tmpfile2))
|
||||
|
||||
(dolist (buf (list buf1 buf2))
|
||||
(with-current-buffer buf
|
||||
|
@ -148,7 +148,6 @@
|
|||
(should (string-match "another text" (buffer-string))))))
|
||||
|
||||
;; Exit.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors
|
||||
(dolist (buf (list buf1 buf2))
|
||||
(with-current-buffer buf (set-buffer-modified-p nil))
|
||||
|
@ -165,8 +164,6 @@
|
|||
buf)
|
||||
(unwind-protect
|
||||
(progn
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(setq buf (find-file-noselect tmpfile))
|
||||
(with-current-buffer buf
|
||||
|
@ -184,42 +181,36 @@
|
|||
'before-revert-hook
|
||||
(lambda () (delete-file buffer-file-name))
|
||||
nil t)
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer hasn't been reverted. File
|
||||
;; notification should be disabled, falling back to
|
||||
;; polling.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
(auto-revert--wait-for-revert buf))
|
||||
;; Check, that the buffer hasn't been reverted. File
|
||||
;; notification should be disabled, falling back to
|
||||
;; polling.
|
||||
(should (string-match "any text" (buffer-string)))
|
||||
(should-not auto-revert-use-notify)
|
||||
|
||||
;; Once the file has been recreated, the buffer shall be
|
||||
;; reverted.
|
||||
(kill-local-variable 'before-revert-hook)
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(sleep-for 1)
|
||||
(write-region "another text" nil tmpfile nil 'no-message)
|
||||
(auto-revert--wait-for-revert buf))
|
||||
;; Check, that the buffer has been reverted.
|
||||
(should (string-match "another text" (buffer-string)))
|
||||
|
||||
;; An empty file shall still be reverted.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 1)
|
||||
(write-region "" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(sleep-for 1)
|
||||
(write-region "" nil tmpfile nil 'no-message)
|
||||
(auto-revert--wait-for-revert buf))
|
||||
;; Check, that the buffer has been reverted.
|
||||
(should (string-equal "" (buffer-string)))))
|
||||
|
||||
;; Exit.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors
|
||||
(with-current-buffer buf (set-buffer-modified-p nil))
|
||||
(kill-buffer buf))
|
||||
|
@ -232,9 +223,7 @@
|
|||
(let ((tmpfile (make-temp-file "auto-revert-test"))
|
||||
buf)
|
||||
(unwind-protect
|
||||
(progn
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(setq buf (find-file-noselect tmpfile))
|
||||
(with-current-buffer buf
|
||||
|
@ -259,7 +248,6 @@
|
|||
(string-match "modified text\nanother text" (buffer-string)))))
|
||||
|
||||
;; Exit.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors (kill-buffer buf))
|
||||
(ignore-errors (delete-file tmpfile)))))
|
||||
|
||||
|
@ -283,33 +271,29 @@
|
|||
(should
|
||||
(string-match name (substring-no-properties (buffer-string))))
|
||||
|
||||
;; Delete file. We wait for a second, in order to have
|
||||
;; another timestamp.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 1)
|
||||
(delete-file tmpfile)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
;; Delete file. We wait for a second, in order to have
|
||||
;; another timestamp.
|
||||
(sleep-for 1)
|
||||
(delete-file tmpfile)
|
||||
(auto-revert--wait-for-revert buf))
|
||||
;; Check, that the buffer has been reverted.
|
||||
(should-not
|
||||
(string-match name (substring-no-properties (buffer-string))))
|
||||
|
||||
;; Make dired buffer modified. Check, that the buffer has
|
||||
;; been still reverted.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(set-buffer-modified-p t)
|
||||
(sleep-for 1)
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
(ert-with-message-capture auto-revert--messages
|
||||
;; Make dired buffer modified. Check, that the buffer has
|
||||
;; been still reverted.
|
||||
(set-buffer-modified-p t)
|
||||
(sleep-for 1)
|
||||
(write-region "any text" nil tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(auto-revert--wait-for-revert buf)
|
||||
(auto-revert--wait-for-revert buf))
|
||||
;; Check, that the buffer has been reverted.
|
||||
(should
|
||||
(string-match name (substring-no-properties (buffer-string))))))
|
||||
|
||||
;; Exit.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors
|
||||
(with-current-buffer buf (set-buffer-modified-p nil))
|
||||
(kill-buffer buf))
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(require 'ert-x)
|
||||
(require 'filenotify)
|
||||
(require 'tramp)
|
||||
|
||||
|
@ -703,21 +704,19 @@ delivered."
|
|||
(should auto-revert-notify-watch-descriptor)
|
||||
|
||||
;; Modify file. We wait for a second, in order to have
|
||||
;; another timestamp.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 1)
|
||||
(write-region
|
||||
"another text" nil file-notify--test-tmpfile nil 'no-message)
|
||||
;; another timestamp.
|
||||
(ert-with-message-capture captured-messages
|
||||
(sleep-for 1)
|
||||
(write-region
|
||||
"another text" nil file-notify--test-tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(file-notify--wait-for-events
|
||||
timeout
|
||||
(string-match
|
||||
;; Check, that the buffer has been reverted.
|
||||
(file-notify--wait-for-events
|
||||
timeout
|
||||
(string-match
|
||||
(format-message "Reverting buffer `%s'." (buffer-name buf))
|
||||
(buffer-string))))
|
||||
(should (string-match "another text" (buffer-string)))
|
||||
captured-messages))
|
||||
(should (string-match "another text" (buffer-string))))
|
||||
|
||||
;; Stop file notification. Autorevert shall still work via polling.
|
||||
(file-notify-rm-watch auto-revert-notify-watch-descriptor)
|
||||
|
@ -728,27 +727,24 @@ delivered."
|
|||
|
||||
;; Modify file. We wait for two seconds, in order to
|
||||
;; have another timestamp. One second seems to be too
|
||||
;; short.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(narrow-to-region (point-max) (point-max)))
|
||||
(sleep-for 2)
|
||||
(write-region
|
||||
"foo bla" nil file-notify--test-tmpfile nil 'no-message)
|
||||
;; short.
|
||||
(ert-with-message-capture captured-messages
|
||||
(sleep-for 2)
|
||||
(write-region
|
||||
"foo bla" nil file-notify--test-tmpfile nil 'no-message)
|
||||
|
||||
;; Check, that the buffer has been reverted.
|
||||
(with-current-buffer (get-buffer-create "*Messages*")
|
||||
(file-notify--wait-for-events
|
||||
timeout
|
||||
(string-match
|
||||
(format-message "Reverting buffer `%s'." (buffer-name buf))
|
||||
(buffer-string))))
|
||||
(should (string-match "foo bla" (buffer-string))))
|
||||
;; Check, that the buffer has been reverted.
|
||||
(file-notify--wait-for-events
|
||||
timeout
|
||||
(string-match
|
||||
(format-message "Reverting buffer `%s'." (buffer-name buf))
|
||||
captured-messages))
|
||||
(should (string-match "foo bla" (buffer-string)))))
|
||||
|
||||
;; The environment shall be cleaned up.
|
||||
(file-notify--test-cleanup-p))
|
||||
|
||||
;; Cleanup.
|
||||
(with-current-buffer "*Messages*" (widen))
|
||||
(ignore-errors (kill-buffer buf))
|
||||
(file-notify--test-cleanup))))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue