Rya*_*son 6 testing emacs user-interface
我是Emacs包的维护者,其整个目的与用户交互有关.每当我对代码进行更改时,我都必须手动测试它以查看它是否有效.如果我能做一些自动化测试会很好,但我不知道如何以这样做的方式模拟用户输入.有没有办法运行一个交互式功能,提示用户,然后通过模拟键入响应该提示(包括像Cj这样的组合键)?
新:我已经重新实现了我的with-simulated-input宏execute-kbd-macro,所以它现在也可以在批处理模式下工作.您可以在此处查看新实施.
我在Emacs SX网站上的一个问题中找到了答案.基本上,unread-command-events在将其转换为正确的格式后,您必须将所需的键序列放入其中.例如:
(let ((unread-command-events (listify-key-sequence (kbd "blu RET"))))
(ido-completing-read "Select a color: " '("yellow" "blue")))
Run Code Online (Sandbox Code Playgroud)
适当地返回"blue".
有一点需要注意的是,您必须确保您的键序列肯定会终止命令的交互部分,否则命令将继续等待输入.确保终止的一种方法是将"Cg"附加到键序列,如果命令在到达键序列结束时尚未完成,则将中止命令.如果命令完成,那么当let-binding超出范围时,任何未使用的输入都将被丢弃,因此Cg事件不会发出错误信号.所以更合适的测试可能是:
;; Runs successfully
(condition-case nil
(let ((unread-command-events (listify-key-sequence (kbd "blu RET C-g"))))
(ido-completing-read "Select a color: " '("yellow" "blue")))
(quit (error "Reached end of `unread-command-events' without terminating")))
;; Throws an error
(condition-case nil
(let ((unread-command-events (listify-key-sequence (kbd "blu C-g"))))
(ido-completing-read "Select a color: " '("yellow" "blue")))
(quit (error "Reached end of `unread-command-events' without terminating")))
Run Code Online (Sandbox Code Playgroud)
这种方法的一个重要警告是,尽管允许您完全非交互式地运行交互式功能,但它不能在批处理模式emacs会话中工作,可能是因为emacs根本不以批处理模式处理键盘输入.
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |