GNU bug report logs -
#65851
29.1.50; `ert-simulate-command' and non-local exits
Previous Next
To reply to this bug, email your comments to 65851 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#65851
; Package
emacs
.
(Sun, 10 Sep 2023 10:18:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Sebastian Miele <iota <at> whxvd.name>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sun, 10 Sep 2023 10:18:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
In GNU Emacs 29.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.38, cairo version 1.17.8) of 2023-09-06 built on huette
When a command exits non-locally (e.g., by calling `user-error'), the
command loop seems to still do what `ert-simulate-command' in that case
currently does not (e.g., run `post-command-hook', and set
`last-command').
At the moment, the Emacs sources have less than 40 uses of
`ert-simulate-command'. None of them seems to be wrapped in anything
like `(should-error …)'. So this has not become an issue in Emacs
testing so far.
Also, in the tests I am currently writing, I could live without
`ert-simulate-command' handling non-local exits like the command loop
does, because I do not need `ert-simulate-command' in that particular
cases.
I do not really know the details of what the command loop actually does.
But wouldn't something like the following be more "in line" with what
the command loop does?
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 98a017c8a8e..e7c670b27c9 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -173,28 +173,26 @@ ert-simulate-command
(cl-assert (listp command) t)
(cl-assert (commandp (car command)) t)
(cl-assert (not unread-command-events) t)
- (let (return-value)
- ;; For the order of things here see command_loop_1 in keyboard.c.
- ;;
- ;; The command loop will reset the command-related variables so
- ;; there is no reason to let-bind them. They are set here,
- ;; however, to be able to test several commands in a row and how
- ;; they affect each other.
- (setq deactivate-mark nil
- this-original-command (car command)
- ;; remap through active keymaps
- this-command (or (command-remapping this-original-command)
- this-original-command))
- (run-hooks 'pre-command-hook)
- (setq return-value (apply (car command) (cdr command)))
+ ;; For the order of things here see command_loop_1 in keyboard.c.
+ ;;
+ ;; The command loop will reset the command-related variables so
+ ;; there is no reason to let-bind them. They are set here,
+ ;; however, to be able to test several commands in a row and how
+ ;; they affect each other.
+ (setq deactivate-mark nil
+ this-original-command (car command)
+ ;; remap through active keymaps
+ this-command (or (command-remapping this-original-command)
+ this-original-command))
+ (run-hooks 'pre-command-hook)
+ (unwind-protect (apply (car command) (cdr command))
(run-hooks 'post-command-hook)
(setq real-last-command (car command)
last-command this-command)
(when (boundp 'last-repeatable-command)
(setq last-repeatable-command real-last-command))
(when (and deactivate-mark transient-mark-mode) (deactivate-mark))
- (cl-assert (not unread-command-events) t)
- return-value))
+ (cl-assert (not unread-command-events) t)))
(defmacro ert-simulate-keys (keys &rest body)
"Execute BODY with KEYS as pseudo-interactive input."
This bug report was last modified 1 year and 78 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.