From: j8takagi Date: Tue, 23 Nov 2010 15:19:43 +0000 (+0900) Subject: セルフテストの更新 X-Git-Tag: 0.2p3~55 X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=autotest_mk.git;a=commitdiff_plain;h=11955ffc4ad0425b6fe1e732bb411c78297b124f セルフテストの更新 --- diff --git a/selftest/unittest/Define.beta.mk b/selftest/unittest/Define.beta.mk deleted file mode 100644 index b9ba0ff..0000000 --- a/selftest/unittest/Define.beta.mk +++ /dev/null @@ -1,149 +0,0 @@ -###################################################################### -# テストグループのディレクトリー -###################################################################### -# テストグループとテストの両方で使う変数を定義したファイル -DEF_FILE := Define.mk - -# テストのMakefileにインクルードするファイル -TEST_MAKEFILE := Test.mk - -# テストグループログファイル -GROUP_LOG_FILE := $(shell echo $(GROUP) | tr '[a-z]' '[A-Z]').log - -# テストグループ実行時間ファイル -GROUP_TIME_FILE := $(shell echo $(GROUP) | tr '[a-z]' '[A-Z]')_time.log - -###################################################################### -# テストのディレクトリー -###################################################################### -# Makefile -MAKEFILE := Makefile - -# 現在の日時 -DATE = $(shell date +"%F %T") - -# テストコマンドファイル -CMD_FILE := cmd - -# テスト説明ファイル -DESC_FILE := desc.txt - -# テスト想定結果ファイル -TEST0_FILE := 0.txt - -# テスト結果ファイル -TEST1_FILE := 1.txt - -# テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.txt - -# テストエラーファイル -ERR_FILE := err.txt - -# テストログファイル -LOG_FILE := test.log - -# 実行時間ファイル -TIME_FILE := time.log - -###################################################################### -# コマンド -###################################################################### - -CP := cp - -CAT := cat - -MKDIR := mkdir - -RM := rm -f - -ECHO := echo - -TIME := /usr/bin/time - -DIFF := diff -c - -DEV_NULL := /dev/null - -CHMOD := chmod - -# TESTディレクトリーのMakefileを作成 -# 用例: $(call create_testmakefile,file) -define create_testmkfile - $(RM) $1 - $(foreach mkfile, $(DEF_FILE) $(TEST_MAKEFILE), $(ECHO) "include ../$(mkfile)" >>$1; ) -endef - -# 説明ファイルの内容を、引数のファイルに出力。 -# 用例: $(call desc_log,file_out) -define desc_log - $(if $(wildcard $(DESC_FILE)),$(CAT) $(DESC_FILE) >>$1) -endef - -# テスト実行の経過時間をファイルに出力。引数は、テスト名、コマンドファイル、出力ファイル -# 用例: $(call time_cmd,name,file_cmd,file_out) -define time_cmd - $(TIME) -f "$1: %E" >>$3 $2>$(DEV_NULL) - $(CAT) $3 -endef - -# テスト実行コマンド。引数は、コマンドファイル、出力ファイル、エラーファイル -# ファイルの内容と、CMD_FILE実行の標準出力を、出力ファイルに保存。 -# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 -# 用例: $(call exec_cmd,file_cmd,file_out,file_err) -define exec_cmd - $(CHMOD) u+x $1 - $(CAT) $1 >$2 - ./$1 >>$2 2>$3 - if test -s $3; then $(CAT) $3 >>$2; else $(RM) $3; fi -endef - -# 2つのファイルを比較し、差分ファイルを作成。引数は、ファイル0、ファイル1、差分ファイル -# 用例: $(call diff_testfiles,file0,file1) -define diff_testfiles - diff $1 $2 >$3 2>&1 - if test ! -s $3; then $(RM) $3; fi -endef - -# 差分ファイルの内容をログファイルに出力。引数は、テスト名、差分ファイル、ログファイル -# 用例: $(call test_log,name,file_diff,file_log) -define test_log - $(ECHO) "$1: Test $(if $(wildcard $2),Failure,Success) $(DATE)" >>$3 -endef - -# テストごとのログファイルをグループログファイルに出力。引数は、テストのリスト、グループログファイル -# 用例: $(call group_log_each,tests,file_group_log) -define group_log_each - $(foreach target,$1,$(call group_log,$(target),$2)) -endef - -# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル -# 用例: $(call group_log_each,tests,file_group_log) -define group_log - $(ECHO) >>$2 - if test -s $1/$(LOG_FILE); then $(CAT) $1/$(LOG_FILE) >>$2; else $(ECHO) $1 ": no log." >>$2; fi -endef - -LOG_GROUP = for target in $^; do ($(ECHO) <$$target/$(LOG_FILE) && $(CAT) <$$target/$(LOG_FILE)) >>$@ || $(ECHO) $$target ": no log." >>$@; done - -REPORT_GROUP = $(ECHO) "$(GROUP): $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in `pwd`/$(GROUP_LOG_FILE)"; \ - if test $(FAIL_TEST) -eq 0; then $(ECHO) "$(GROUP): All tests are succeded."; fi - -LOG_TIME_REPORT = for target in ^; do ($(ECHO)<$$target/$(LOG_FILE) && $(CAT) <$$target/$(TIME_FILE)) >>$@ || $(ECHO) $$target ": no time." >>$@; done - -###################################################################### -# エラー -###################################################################### - -# chk_var_null: 変数がNULLの場合、エラー -# 用例: $(call chk_var_null, var) -define chk_var_null - $(if $($1),,$(error $1 is NULL)) -endef - -# chk_file_ext: 変数で指定されたファイルが実在する場合、エラー -# 用例: $(call chk_file_ext, var) -define chk_file_ext - $(if $(wildcard $($1)),$(error $(wildcard $($1)) exists)) -endef diff --git a/selftest/unittest/Define.mk b/selftest/unittest/Define.mk index 4537b43..97be24c 100644 --- a/selftest/unittest/Define.mk +++ b/selftest/unittest/Define.mk @@ -1,6 +1,12 @@ +# autotest.mk > test_template > Define.mk +# 自動テスト用の変数、マクロ定義 + +SHELL=/bin/sh + ###################################################################### # テストグループのディレクトリー ###################################################################### + # テストグループとテストの両方で使う変数を定義したファイル DEF_FILE := Define.mk @@ -10,72 +16,79 @@ TEST_MAKEFILE := Test.mk ###################################################################### # テストのディレクトリー ###################################################################### + # Makefile -MAKEFILE := Makefile +MAKEFILE ?= Makefile # 現在の日時 DATE = $(shell date +"%F %T") # テストコマンドファイル -CMD_FILE := cmd +CMD_FILE ?= cmd # テスト説明ファイル -DESC_FILE := desc.txt +DESC_FILE ?= desc.txt # テスト想定結果ファイル -TEST0_FILE := 0.txt +TEST0_FILE ?= 0.txt # テスト結果ファイル -TEST1_FILE := 1.txt +TEST1_FILE ?= 1.txt # テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.txt +DIFF_FILE ?= diff.txt # テストエラーファイル -ERR_FILE := err.txt +ERR_FILE ?= err.txt # テストログファイル -LOG_FILE := test.log +LOG_FILE ?= test.log # 実行時間ファイル -TIME_FILE := time.log +TIME_FILE ?= time.log ###################################################################### # コマンド ###################################################################### -CP := cp +CP ?= cp -CAT := cat +CAT ?= cat -MKDIR := mkdir +MKDIR ?= mkdir -RM := rm -f +RM ?= rm -f -ECHO := echo +ECHO ?= echo -TIME := /usr/bin/time +TIME ?= /usr/bin/time --quiet -DIFF := diff -c +DIFF ?= diff -c -DEV_NULL := /dev/null +DEV_NULL ?= /dev/null -CHMOD := chmod +CHMOD ?= chmod ###################################################################### # エラー ###################################################################### -# chk_var_null: 変数がNULLの場合、エラー +# chk_var_null: 引数がNULLの場合、エラー # 用例: $(call chk_var_null,var) define chk_var_null $(if $1,,$(error NULL argument)) endef -# chk_file_ext: 変数で指定されたファイルが実在する場合、エラー -# 用例: $(call chk_file_ext,var) +# chk_file_ext: 指定されたファイルが実在する場合、エラー +# 用例: $(call chk_file_ext,file) define chk_file_ext - $(if $(wildcard $1),$(error $(wildcard $1) exists)) + $(if $(wildcard $1),$(error $1 exists in $(shell pwd))) +endef + +# chk_file_notext: 指定されたファイルが実在しない場合、エラー +# 用例: $(call chk_file_notext,file) +define chk_file_notext + if test ! -s $1; then $(error $1 not exists in $(shell pwd)); fi endef ###################################################################### @@ -83,21 +96,21 @@ endef ###################################################################### # 指定したディレクトリーを作成 -# 用例: $(call create_testdir,name) -define create_testdir +# 用例: $(call create_dir,name) +define create_dir $(call chk_var_null,$1) $(call chk_file_ext,$1) $(MKDIR) $1 endef -# TESTディレクトリーのMakefileを作成 -# 用例: $(call create_testmakefile,file) -define create_testmkfile +# テストごとのMakefileを作成 +# 用例: $(call create_makefile,file) +define create_makefile $(RM) $1 $(foreach mkfile,$(DEF_FILE) $(TEST_MAKEFILE),$(ECHO) "include ../$(mkfile)" >>$1; ) endef -# リストで指定したディレクトリーでMakeを実行 +# リストで指定したディレクトリーでmakeを実行 # 用例: $(call make_tests,list_dir,target) define make_tests $(foreach dir,$1,$(call make_test_each,$(dir),$2)) @@ -126,7 +139,7 @@ endef # 引数は、テスト名、コマンドファイル、出力ファイル # 用例: $(call time_cmd,name,file_cmd,file_out) define time_cmd - $(TIME) -f"$1: %E" -o $3 ./$2 >$(DEV_NULL) + $(TIME) -f"$1: %E" -o $3 ./$2 >$(DEV_NULL) 2>&1 endef # テスト実行コマンド。引数は、コマンドファイル、出力ファイル、エラーファイル @@ -134,7 +147,6 @@ endef # エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 # 用例: $(call exec_cmd,file_cmd,file_out,file_err) define exec_cmd - $(CHMOD) u+x $1 $(CAT) $1 >$2 ./$1 >>$2 2>$3 if test -s $3; then $(CAT) $3 >>$2; fi @@ -142,7 +154,7 @@ define exec_cmd endef # 2つのファイルを比較し、差分ファイルを作成。 -# 引数は、ファイルのリスト(セパレーターは空白)、差分ファイル +# 引数は、2ファイルのリスト、差分ファイル # 用例: $(call diff_files,files,file_out) define diff_files $(DIFF) $1 >$2 2>&1 @@ -166,14 +178,14 @@ endef # テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル # 用例: $(call group_log_each,file_test_log,file_group_log) define group_log_each - if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1): no log >>$2; fi + if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi echo >>$2; endef # テストの結果を、グループログファイルを元にレポート。 # 引数は、グループログファイル -# 用例: $(call group_report,name,file_log_file_report) +# 用例: $(call group_report,name,file_log,file_report) define group_report $(ECHO) "$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in $2" >$3; if test $(FAIL_TEST) -eq 0; then $(ECHO) "$1: All tests are succeded." >>$3; fi diff --git a/selftest/unittest/Makefile b/selftest/unittest/Makefile index 874ea47..bdae65f 100644 --- a/selftest/unittest/Makefile +++ b/selftest/unittest/Makefile @@ -11,6 +11,8 @@ # make clean : すべてのテストで、"make" で生成されたファイルをクリア # make cleanall: すべてのテストで、"make" と "make set" で生成されたファイルをクリア +SHELL = /bin/sh + ###################################################################### # テストグループの定義 ###################################################################### @@ -54,41 +56,38 @@ GROUP_TIME_FILE := $(shell echo $(GROUP) | tr '[a-z]' '[A-Z]')_time.log # ターゲット ###################################################################### -.PHONY: check report create time clean cleanall +.PHONY: check checkall time create clean cleantime + +check checkall: clean $(GROUP_REPORT_FILE) + @$(CAT) $(GROUP_REPORT_FILE) + +time: cleantime $(GROUP_TIME_FILE) + @$(CAT) $(GROUP_TIME_FILE) -check: clean report +create: + @$(call create_dir,$(TEST)) + @$(call create_makefile,$(TEST)/$(MAKEFILE)) + +clean: + @$(call make_tests,$(TESTS),$@) + @$(RM) $(GROUP_REPORT_FILE) $(GROUP_LOG_FILE) $(GROUP_TIME_FILE) -report: $(GROUP_REPORT_FILE) - @$(CAT) $^ +cleantime: + @$(call make_tests,$(TESTS),$@) + @$(RM) $(GROUP_TIME_FILE) $(GROUP_REPORT_FILE): $(GROUP_LOG_FILE) @$(call group_report,$(GROUP),$^,$@) $(GROUP_LOG_FILE): $(TEST_LOG_FILES) + @$(call make_tests,$(TESTS),$(MAKECMDGOALS)) @$(call group_log,$^,$@) -$(TEST_LOG_FILES): - @$(MAKE) check -sC $(call dir,$@) - -create: - @$(call create_testdir,$(TEST)) - @$(call create_testmkfile,$(TEST)/$(MAKEFILE)) - -time: cleantime time_report - -time_report: $(GROUP_TIME_FILE) - @$(CAT) $^ +$(GROUP_TIME_FILE): cleantime $(TEST_TIME_FILES) + @$(call group_log,$(TEST_TIME_FILES),$@) -$(GROUP_TIME_FILE): $(TEST_TIME_FILES) - @$(call group_log,$^,$@) +$(TEST_LOG_FILES): + @$(MAKE) check -sC $(dir $@) $(TEST_TIME_FILES): - @$(MAKE) time -sC $(call dir,$@) - -cleantime: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_TIME_FILE) - -clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_REPORT_FILE) $(GROUP_LOG_FILE) + @$(MAKE) time -sC $(dir $@) diff --git a/selftest/unittest/Test.mk b/selftest/unittest/Test.mk index eb2ef28..10fe274 100644 --- a/selftest/unittest/Test.mk +++ b/selftest/unittest/Test.mk @@ -13,6 +13,8 @@ # make clean : "make" で作成されたファイルをクリア # make cleanall: "make" と "make set" で作成されたファイルをクリア +SHELL = /bin/sh + # テスト名。カレントディレクトリー名から取得 TEST = $(notdir $(shell pwd)) @@ -20,9 +22,14 @@ TEST = $(notdir $(shell pwd)) check: clean $(LOG_FILE) +checkall: check $(TIME_FILE) + @$(CAT) $(TIME_FILE) >>$(LOG_FILE) + set: $(TEST0_FILE) + @$(CAT) $^ reset: cleanall $(TEST0_FILE) + @$(CAT) $(TEST0_FILE) time: cleantime $(TIME_FILE) @@ -35,6 +42,10 @@ clean: cleanall: clean @$(RM) $(TEST0_FILE) +$(CMD_FILE): + @$(call chk_file_notext,$@) + @$(CHMOD) u+x $@ + $(TEST0_FILE) $(TEST1_FILE): $(CMD_FILE) @-$(call exec_cmd,$^,$@,$(ERR_FILE)) @@ -47,4 +58,4 @@ $(LOG_FILE): $(DIFF_FILE) @$(call test_log,$(TEST),$^,$@) $(TIME_FILE): $(CMD_FILE) - @$(call time_cmd,$(TEST),$^,$@) + @-$(call time_cmd,$(TEST),$^,$@)