我如何将密钥输入终端以进行单元测试
How can I feed keys in to a terminal for unittesting purposes
我正在为 Vim 开发一个插件,我想测试它在启动时在用户编辑文件 e.t.c 时是否正常运行。
为此,我想启动一个终端,然后向其中输入密钥。
我正在考虑通过 python 脚本来完成这一切。有办法吗?
在伪python中它可能看起来像这样:
#start a terminal. Here konsole
konsole = os.system('konsole --width=200 --height=150')
#start vim in that terminal
konsole.feed_keys("vim\n")
#run the vim function to be tested
konsole.feed_keys(":let my_list = MyVimFunction()\n")
#save the return value to the file system
konsole.feed_keys(":writefile(my_list, '/tmp/result')\n")
#load result into python
with open('/tmp/result', 'r') as myfile:
data = myfile.read()
#validate the result
assertEqual('expect result', data)
我认为您应该使用单元测试在 Vim 中验证插件的核心功能。 Vim 插件种类繁多,但大多数都提供一些额外的映射或命令,供用户调用,它们通常会在缓冲区、输出或打开时留下一些副作用 windows .这可以从 Vim 内部验证。有多种方法,我的方法是 runVimTests test framework;插件页面有几个替代品的链接。
随着核心功能的涵盖,几乎没有什么可以测试的了 "interactively"。 (我的意思是诸如忘记调试输出、执行时间过长、显示混乱之类的东西。)由于您通常是 Vim 和您自己的插件的重度用户,所以这基本上涵盖了它。
当然,如果您的插件将自身紧密嵌入 Vim(如 "IDE for XXX";虽然这通常不受欢迎),您可以考虑一些外部测试驱动程序。也许其他人会提供一些通用的、终端驱动的测试框架的指针。我几乎可以肯定这样的存在。
虽然我正在维护一个 plugin 允许对 VimL 函数进行 运行 单元测试并将结果提供给 quickfix window,但我使用另一个在一些操作后检查缓冲区状态的几个工具,甚至 运行 来自 travis -> vim运行ner+rspec 的东西,以及 VimFlavour 用于安装依赖项。 (我依稀记得受 vim运行ner 启发的 Python 替代方案)
大部分情况下效果很好。唉,它使用客户端-服务器功能和 :redir
(而不是最近的 execute()
功能)。即使使用 :silent
,:redir
也会捕获它 returns 给客户端的噪音。因此,有时我会反对因非常奇怪的原因而失败的测试。我还发现自己插入了一些伪暂停以确保 Vim 已经完成解释我提供的内容。
您会在我的一些插件中找到使用示例。例如参见 [=19=])
我正在为 Vim 开发一个插件,我想测试它在启动时在用户编辑文件 e.t.c 时是否正常运行。
为此,我想启动一个终端,然后向其中输入密钥。 我正在考虑通过 python 脚本来完成这一切。有办法吗?
在伪python中它可能看起来像这样:
#start a terminal. Here konsole
konsole = os.system('konsole --width=200 --height=150')
#start vim in that terminal
konsole.feed_keys("vim\n")
#run the vim function to be tested
konsole.feed_keys(":let my_list = MyVimFunction()\n")
#save the return value to the file system
konsole.feed_keys(":writefile(my_list, '/tmp/result')\n")
#load result into python
with open('/tmp/result', 'r') as myfile:
data = myfile.read()
#validate the result
assertEqual('expect result', data)
我认为您应该使用单元测试在 Vim 中验证插件的核心功能。 Vim 插件种类繁多,但大多数都提供一些额外的映射或命令,供用户调用,它们通常会在缓冲区、输出或打开时留下一些副作用 windows .这可以从 Vim 内部验证。有多种方法,我的方法是 runVimTests test framework;插件页面有几个替代品的链接。
随着核心功能的涵盖,几乎没有什么可以测试的了 "interactively"。 (我的意思是诸如忘记调试输出、执行时间过长、显示混乱之类的东西。)由于您通常是 Vim 和您自己的插件的重度用户,所以这基本上涵盖了它。
当然,如果您的插件将自身紧密嵌入 Vim(如 "IDE for XXX";虽然这通常不受欢迎),您可以考虑一些外部测试驱动程序。也许其他人会提供一些通用的、终端驱动的测试框架的指针。我几乎可以肯定这样的存在。
虽然我正在维护一个 plugin 允许对 VimL 函数进行 运行 单元测试并将结果提供给 quickfix window,但我使用另一个在一些操作后检查缓冲区状态的几个工具,甚至 运行 来自 travis -> vim运行ner+rspec 的东西,以及 VimFlavour 用于安装依赖项。 (我依稀记得受 vim运行ner 启发的 Python 替代方案)
大部分情况下效果很好。唉,它使用客户端-服务器功能和 :redir
(而不是最近的 execute()
功能)。即使使用 :silent
,:redir
也会捕获它 returns 给客户端的噪音。因此,有时我会反对因非常奇怪的原因而失败的测试。我还发现自己插入了一些伪暂停以确保 Vim 已经完成解释我提供的内容。
您会在我的一些插件中找到使用示例。例如参见 [=19=])