2
0

More than 5 years have passed since last update.

Vim の "make test" を読み解く 第 4 回 (単体 new-style-testing の実行)

Posted at

今回は、単体の new-style-testing のファイルが実行されるときの手順を見ていきます。以下は test_*.vim のテストを実行して、結果ファイルの test_*.res を作成するターゲットとルールです。

src/testdir/Makefile
.vim.res:
    @echo "$(VIMPROG)" > vimcmd
    @echo "$(RUN_VIMTEST)" >> vimcmd
    $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL)
    @rm vimcmd

vimcmd というファイルでは、Vim のバイナリ名や実行時のオプションを一時的に覚えておいて、テスト側から参照できるようにしているみたいです。shared.vim から参照していて、いくつかのファイルから source されていました。テストが終わるたびに削除されます。

ルールの 3 行目が肝心のテスト実行箇所ですが、これだとちょっと分かりづらいので実際の実行時の値を見てみます。以下は test_assert.vim を実行しているときのプロンプトの例です。

VIMRUNTIME=../../runtime; export VIMRUNTIME;  ../vim -f  -u unix.vim -U NONE --noplugin --not-a-term -S runtest.vim test_assert.vim --cmd 'au SwapExists * let v:swapchoice = "e"' > /dev/null
  1. $VIMRUNTIME を現在のリポジトリのものに設定
  2. -f (GUI のみ?) fork せず foreground で実行
  3. -u unix.vim unix.vim を vimrc ファイルとして読み込む
  4. -U NONE gvimrc の読み込みをスキップする
  5. --noplugin プラグインを読み込まない
  6. --not-a-term 後述するように標準出力を /dev/null に捨てているが、その警告を出さない
  7. -S runtest.vim ファイルを読み込んだ後に runtest.vim を読み込む (source する、実行する)
  8. test_assert.vim Vimに読み込ませるファイルの指定、テストの場合このファイルにテストの実行内容が記述してある
  9. --cmd 'au SwapExists * let v:swapchoice = "e"' スワップファイルが存在していても無視してファイルを編集するための自動コマンドの設定
  10. > /dev/null 標準出力を /dev/null に捨てる

要するに、test_assert.vim を普通のファイルとして開いて、その中に書いてあるテスト内容を runtest.vim で実行するという形になっています。runtest.vim の内容については次回以降に見ていきます。

unix.vim の内容は以下の通り。

  • 'shell' を sh に設定
  • $HOME を g:tester_HOME に覚えておく
  • setup.vim を source する

中で読み込まれている setup.vim の内容は以下の通り。

  • 多重読み込みの抑止
  • runtimepath と packpath をテスト用ディレクトリに設定
  • 環境変数の変更
    • $XAUTHORITY は実際のものを使用する
    • $HISTFILE を空にする
    • $HOME をテスト用ディレクトリに設定

第 4 回はここまで。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0