前回 では、src/testdir/Makefile の中身を読んで、個々のテストがどのように開始されるのかまで理解しました。今回はそのテストの詳細に入っていこうかと思っていたのですが、その前に src/testdir/README.txt の内容を理解しておこうと思います。
このディレクトリは Vim の様々な機能のテストを含んでいます。インデントスクリプトのテストについては runtime/indent/testdir/README.txt を参照してください。
もし意味が通るなら、新しいテストメソッドは既に存在しているファイルに追加してください。コメント行を付けて、その他のテストから分けるのが良いでしょう。
数字付きのテストは古いもので、名前付きのテストに切り替わっています。数字付きのテストにはこれ以上追加しないでください。
それから、Vim script である新しいスタイルのテストと、 ノーマルモードコマンドを使う古いスタイルのテストを選択することができます。可能であれば新しいスタイルのテストを使ってください。+eval 機能なしで実行する必要があるときに古いスタイルのテストを使用します。
新しいスタイルのテストを追加する:
test_<subject>.vim というファイルを作成します。
Make_all.mak 内の NEW_TESTS_RES に、test_<subject>.vim をアルファベット順で追加します。
Make_all.mak 内の NEW_TESTS にも "test_<subject>" というエントリを追加します。
単体のテストを走らせるには "make test_<subject>" を実行します。
においてテストを個々に実行する代わりに、"test_alot" に含めることができます。副作用のない素早いテストにはこれを使ってください。1 つの Vim のインスタンスがたくさんのテストを実行し、都度 Vim を開始する必要がないので幾分早いです。
使用できるもの (例については test_assert.vim を参照):
assert_equal(), assert_true(), assert_false(), その他の呼び出し。
期待するエラーに対しては assert_fails() を使用します。
例外がテストを中止することを防ぐには try/catch を使用します。
メモリ割り当てを失敗させるには alloc_fail() を使用します。これによりメモリ割り当ての失敗が適切に取り扱われるか確認することができます。割り当ての ID を加えるためにソースコードを変更する必要があります。alloc_id() の上にある LAST_ID_USED を使用されている最も大きい ID に更新してください。
(↑の節の内容が古くなっているようです。PR 出そうかな。 -> b45125b で拾ってもらえました。)
例えば、char_avail() がしばらく FALSE を返さなければならないなどのように Vim の振る舞いを変えたい場合、test_override() を使用します。CursorMovedI 自動コマンドを起こしたい場合などの例として、test_cursor_func.vim を参照してください。
テスト内にまだ直されていないバグがある場合、これが正しく動くべきということを明確にするために "Skipped" という文字列付きで例外を投げることができます。
さらなるヘルプについては runtest.vim の先頭を参照してください。
画面ダンプテストを追加する:
新しいスタイルのテストを書くのとほとんど同じです。加えて、"terminal-dumptest" のヘルプを見てください。照合するダンプを "dumps/Test_func_name.dump" に置いてください。
古いスタイルのテストを追加する:
- test_<subject>.in および test_<subject>.ok というファイルを作成します。
- Make_all.mak 内の SCRIPTS_ALL に、test_<subject>.out をアルファベット順で追加します。
- src/testdir/ で単体のテストを走らせるには "make test_<subject>.out" を実行します。src/ で単体のテストを走らせるには "make test_<subject>" を実行します。
- src/Makefile にもエントリを追加します。
これらのファイルはすべてがタイプされたように使用されることに留意してください:
- コメントを加えるには :" (Ex コマンドのコメントです) を使用します。
- 改行はエンターを押したように働きます。最後の行でそれが起きた場合、ビープ音が聞こえるでしょう。