Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim の "make test" を読み解く 第 2 回

$
0
0

前回に引き続き、src/Makefile の中身を見ていきます。今回はmake testで実行されるターゲットのうち、一番最初に実行されてかつ一番重要と思われる scripttests についてです。中身の大部分は Vim 本体の機能のテストです。

src/Makefile, scripttests

src/Makefile
scripttests:$(MAKE)-fMakefile$(VIMTARGET)iftest-n"$(MAKEMO)"-a-f$(PODIR)/Makefile;then\cd$(PODIR);$(MAKE)-fMakefilecheckVIM=../$(VIMTARGET);\fi-iftest$(VIMTARGET)!=vim-a!-rvim;then\ln-s$(VIMTARGET)vim;\ficdtestdir;$(MAKE)-fMakefile$(GUI_TESTTARGET)VIMPROG=../$(VIMTARGET)$(GUI_TESTARG)SCRIPTSOURCE=../$(SCRIPTSOURCE)

まず一番初めに Vim 自身の make を行っています。あらかじめ make してあった場合は一瞬で終わるはずです。

次に src/po に入って、翻訳された Vim message (?) の内容に問題がないかを確認しています。実際に日本語の例を見てみると雰囲気が分かるかと思いますが、オリジナルの各 msgid に対しそれぞれの言語の訳が存在しています。この訳の形式が間違っていないかのチェックのようです。機会があれば別途詳細を調べる予定。

src/po/ja.po
msgid "Overwrite existing file \"%s\"?"
msgstr "既存のファイル \"%s\" を上書きしますか?"

その次はmakeで出来上がるバイナリ名が "vim" でないときのために、symbolic link を作成しています。configure の--with-vim-nameオプションでバイナリ名を変えられるみたいですが、そんな需要があるのか? -> :help 90.3に記述がありました。新しいバージョンをしばらくの間試すときに、別名でビルドするためのオプションのようです。

最後に src/testdir に移動して、さらに make の処理を続けます。

src/testdir/Makefile, default

src/testdir/Makefile
default:nonguinongui:nolog $(SCRIPTS_FIRST) $(SCRIPTS) newtests reportnolog:-rm-ftest.logmessagesnewtests:newtestssilent@/bin/sh-c"if test -f messages && grep -q 'SKIPPED\|FAILED' messages; then cat messages; fi"newtestssilent:$(NEW_TESTS)# New style of tests uses Vim script with assert calls.  These are easier
# to write and a lot easier to read and debug.
# Limitation: Only works with the +eval feature.
RUN_VIMTEST=VIMRUNTIME=$(SCRIPTSOURCE);export VIMRUNTIME;$(VALGRIND)$(VIMPROG)-f$(GUI_FLAG)-u unix.vim

.vim.res:writevimcmd@echo"$(VIMPROG)">vimcmd@echo"$(RUN_VIMTEST)">>vimcmd$(RUN_VIMTEST)$(NO_INITS)-Sruntest.vim$*.vim$(REDIR_TEST_TO_NULL)@rmvimcmdreport:@echo@echo 'Test results:'@/bin/sh-c"iftest-ftest.log;\thencattest.log;echoTESTFAILURE;exit1;\elseechoALLDONE;\fi"
src/testdir/Make_all.mak
# Test targets that use runtest.vim.
# Keep test_alot*.res as the last one, sort the others.
# test_largefile.res is omitted, it uses too much resources to run on CI.
NEW_TESTS_RES=\
    test_arabic.res \
    test_arglist.res \
    test_assert.res \
        :

GUI でなければdefaultnonguiが実行されます。nologは単純にログの削除ですね。どうやらテストを実行するとtest.logmessagesというファイルが作られるようです。

$(SCRIPTS_FIRST)は一番最初に実行される script で、テストが実行可能な環境 (状況?) か調べる script のようです。また$(SCRIPTS)はいわゆるold-style-testingで、今後追加されることはあまりなくてnew-style-testingへの移行も行われていると聞きました。こちらの 2 つについては今後機会があれば詳細を見ていきます。今回はスキップ。

newtests -> newtestssilent -> $(NEW_TESTS_RES)と進みます。$(NEW_TESTS_RES)は src/testdir/Make_all.mak にあって、make testで得られるべき出力結果test_*.resの一覧が定義してあります。.vim.resに定義してあるコマンドによってテストスクリプトが実行され、これらの出力結果が得られます。ここの詳細は次回のトピックにする予定です。ところでwritevimcmdってなんでしょう。.vim.resの依存ターゲットのようですが、何を指しているのか分からなかった。。。ちなみにここのコメントにあるように、test_largefile はmake testの対象からは外されているようです。

newtestsでは、messages 内に SKIPPED もしくは FAILED があると messages を表示しています。私が実行した結果では FAILED こそありませんでしたが、SKIPPED は 10 個ほどありました。

reportで前回言及した ALL DONE と TEST FAILURE の表示を行っています。これを見ると test.log というファイルが存在しているとスクリプトテストとしては失敗ということになるようです。

第 2 回はここまで。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>