2016-11-17 5 views
2

私はVimのプラグインで作業していますが、起動時にユーザがファイルを編集するときに正しく動作することをテストしたいと思います。ユニットテスト目的で端末にキーを入力する方法

これを行うには、端末を起動してキーを入力したいと思います。 私はすべて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) 

答えて

3

私はあなたがユニットテストを使用して、Vimの内部のプラグインのコア機能を検証するべきだと思います。さまざまなVimプラグインがありますが、ほとんどの場合、ユーザが呼び出すための追加のマッピングやコマンドが用意されています。通常、バッファや出力、開いたウィンドウにいくつかの副作用が残されています。これはVimの内部から検証できます。それには様々なアプローチがありますが、私はrunVimTests test frameworkです。プラグインのページにはいくつかの選択肢へのリンクがあります。

このようにコア機能がカバーされているため、「対話的に」テストすることはほとんどありません。 (私はデバッグの出力を忘れてしまったり、実行時間が長すぎたり、表示がうまくいかないなどのことを意味します。通常はVimとプラグインのユーザが大勢ですから、ほとんどはそれをカバーしています。あなたのプラグインが(「XXX用IDE」のように、これは通常、眉をひそめているが)のVimにしっかりと自分自身を埋め込む場合


はもちろん、あなたには、いくつかの外部のテストドライバーを考慮することができます。多分、他の人たちは、汎用の端末駆動型テストフレームワークへのポインタに貢献するでしょう。私はそのような存在がほぼ確実だ。

+0

非常に便利な答えにインスタンスを参照してください。私はこれを受け入れるように設定しました。これは私がすることに決めたものに近いからです。 すべてのテストコードを.vimrcファイルに入れます。これをtempdirにコピーします。 次に、私はこのようにvimを起動します: 'cd $ tmpdir && HOME =。 vim -X' そして、プラグインがロードされた後、vim8-timerで実際のテストを開始します。 – XPlatformer

+0

ありがとう、と幸せなテスト;これを最初から体系的に行うことは、否定できない利点があります!あなたのアプローチは良いと思います。 Vimバージョン8に頼りたくない場合は、 ':autocmd VimEnter * call StartTests()'を使ってそれらを起動することもできます。 –

+0

autocmdと素晴らしいアイデアですが、スクリプトにはとにかくvim8が必要です:-) – XPlatformer

2

私は、VimL関数で単体テストを実行し、結果をQuickfixウィンドウに与えることを許可しているpluginを維持していますが、いくつかのアクションの後でバッファの状態をチェックし、 travis - > vimrunner + rspecのもの、および依存関係をインストールするためのVimFlavourです。 (vimrunnerに触発されたPythonの代替手段を漠然と思い出す)

ほとんどの場合うまく動作します。悲しいことに、クライアントサーバ機能と:redir(最近の​​機能の代わりに)を使用しています。 :silentを使用しても、:redirはノイズをキャッチしてクライアントに返します。したがって、時には非常に奇妙な理由で失敗するテストと戦うこともあります。私はVimが私がそれを養ったものを解釈し終わったことを確かめるために擬似休止を挿入しています。

いくつかの私のプラグインで使用例が見つかります。 lh-bracketsまたはlh-cppテスト(.travis.ymlファイル+ .rspec/ディレクトリ+ Rakefile + Gemfile + vim-UTからいくつかのヘルパー)あなたとリュックHermitteから

関連する問題