ert-x: Move window selection logic to its own macro
* lisp/emacs-lisp/ert-x.el (ert-with-buffer-selected): New macro to temporarily display a buffer in a selected window and evaluate a body. (ert-with-test-buffer-selected): Use the new macro. * test/lisp/whitespace-tests.el (ert-test-with-buffer-selected/current) (ert-test-with-buffer-selected/selected) (ert-test-with-buffer-selected/nil-buffer) (ert-test-with-buffer-selected/modification-hooks) (ert-test-with-buffer-selected/read-only) (ert-test-with-buffer-selected/return-value): Add tests. (Bug#60189)
This commit is contained in:
parent
823c49cea8
commit
286c48137f
2 changed files with 55 additions and 10 deletions
|
@ -102,25 +102,36 @@ the name of the test and the result of NAME-FORM."
|
||||||
(indent 1))
|
(indent 1))
|
||||||
`(ert--call-with-test-buffer ,name-form (lambda () ,@body)))
|
`(ert--call-with-test-buffer ,name-form (lambda () ,@body)))
|
||||||
|
|
||||||
(cl-defmacro ert-with-test-buffer-selected ((&key name)
|
(cl-defmacro ert-with-buffer-selected (buffer-or-name &body body)
|
||||||
&body body)
|
"Display a buffer in a temporary selected window and run BODY.
|
||||||
"Create a test buffer, switch to it, and run BODY.
|
|
||||||
|
|
||||||
This extends `ert-with-test-buffer' by displaying the test
|
If BUFFER-OR-NAME is nil, the current buffer is used.
|
||||||
buffer (whose name is derived from NAME) in a temporary window.
|
|
||||||
The temporary window becomes the `selected-window' before BODY is
|
The buffer is made the current buffer, and the temporary window
|
||||||
evaluated. The modification hooks `before-change-functions' and
|
becomes the `selected-window', before BODY is evaluated. The
|
||||||
|
modification hooks `before-change-functions' and
|
||||||
`after-change-functions' are not inhibited during the evaluation
|
`after-change-functions' are not inhibited during the evaluation
|
||||||
of BODY, which makes it easier to use `execute-kbd-macro' to
|
of BODY, which makes it easier to use `execute-kbd-macro' to
|
||||||
simulate user interaction. The window configuration is restored
|
simulate user interaction. The window configuration is restored
|
||||||
before returning, even if BODY exits nonlocally. The return
|
before returning, even if BODY exits nonlocally. The return
|
||||||
value is the last form in BODY."
|
value is the last form in BODY."
|
||||||
(declare (debug ((":name" form) body)) (indent 1))
|
(declare (debug (form body)) (indent 1))
|
||||||
`(ert-with-test-buffer (:name ,name)
|
`(save-window-excursion
|
||||||
(save-window-excursion
|
(with-current-buffer (or ,buffer-or-name (current-buffer))
|
||||||
(with-selected-window (display-buffer (current-buffer))
|
(with-selected-window (display-buffer (current-buffer))
|
||||||
,@body))))
|
,@body))))
|
||||||
|
|
||||||
|
(cl-defmacro ert-with-test-buffer-selected ((&key name) &body body)
|
||||||
|
"Create a test buffer, switch to it, and run BODY.
|
||||||
|
|
||||||
|
This combines `ert-with-test-buffer' and
|
||||||
|
`ert-with-buffer-selected'. The return value is the last form in
|
||||||
|
BODY."
|
||||||
|
(declare (debug ((":name" form) body)) (indent 1))
|
||||||
|
`(ert-with-test-buffer (:name ,name)
|
||||||
|
(ert-with-buffer-selected (current-buffer)
|
||||||
|
,@body)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun ert-kill-all-test-buffers ()
|
(defun ert-kill-all-test-buffers ()
|
||||||
"Kill all test buffers that are still live."
|
"Kill all test buffers that are still live."
|
||||||
|
|
|
@ -82,6 +82,40 @@
|
||||||
(should-not (buffer-live-p buffer-1))
|
(should-not (buffer-live-p buffer-1))
|
||||||
(should (buffer-live-p buffer-2))))))
|
(should (buffer-live-p buffer-2))))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/current ()
|
||||||
|
(let ((origbuf (current-buffer)))
|
||||||
|
(ert-with-test-buffer ()
|
||||||
|
(let ((buf (current-buffer)))
|
||||||
|
(should (not (eq buf origbuf)))
|
||||||
|
(with-current-buffer origbuf
|
||||||
|
(ert-with-buffer-selected buf
|
||||||
|
(should (eq (current-buffer) buf))))))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/selected ()
|
||||||
|
(ert-with-test-buffer ()
|
||||||
|
(ert-with-buffer-selected (current-buffer)
|
||||||
|
(should (eq (window-buffer) (current-buffer))))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/nil-buffer ()
|
||||||
|
(ert-with-test-buffer ()
|
||||||
|
(let ((buf (current-buffer)))
|
||||||
|
(ert-with-buffer-selected nil
|
||||||
|
(should (eq (window-buffer) buf))))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/modification-hooks ()
|
||||||
|
(ert-with-test-buffer ()
|
||||||
|
(ert-with-buffer-selected (current-buffer)
|
||||||
|
(should (null inhibit-modification-hooks)))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/read-only ()
|
||||||
|
(ert-with-test-buffer ()
|
||||||
|
(ert-with-buffer-selected (current-buffer)
|
||||||
|
(should (null inhibit-read-only))
|
||||||
|
(should (null buffer-read-only)))))
|
||||||
|
|
||||||
|
(ert-deftest ert-test-with-buffer-selected/return-value ()
|
||||||
|
(should (equal (ert-with-buffer-selected nil "foo") "foo")))
|
||||||
|
|
||||||
(ert-deftest ert-test-with-test-buffer-selected/selected ()
|
(ert-deftest ert-test-with-test-buffer-selected/selected ()
|
||||||
(ert-with-test-buffer-selected ()
|
(ert-with-test-buffer-selected ()
|
||||||
(should (eq (window-buffer) (current-buffer)))))
|
(should (eq (window-buffer) (current-buffer)))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue