テスト(Autotest.mk)実行方法の変更
authorj8takagi <j8takagi@nifty.com>
Thu, 24 Jan 2013 03:32:52 +0000 (12:32 +0900)
committerj8takagi <j8takagi@nifty.com>
Thu, 24 Jan 2013 03:32:52 +0000 (12:32 +0900)
test/template/Define.mk
test/template/Group.mk
test/template/Makefile
test/template/Test.mk

index b3c73af..e736c50 100644 (file)
@@ -7,9 +7,6 @@ DEFINE_INCLUDED = 1
 # 現在の日時
 DATE = $(shell date +"%F %T")
 
-# 現在のディレクトリー
-CURRDIR = $(shell pwd)
-
 # Makefile
 MAKEFILE := Makefile
 
@@ -17,39 +14,22 @@ MAKEFILE := Makefile
 # コマンド
 ######################################################################
 
-MV ?= mv
-
-CP ?= cp
-
-CAT ?= cat
-
-MKDIR ?= mkdir -p
-
-RM ?= rm -f
-
-ECHO ?= echo
-
-TIME ?= time
-
-DIFF ?= diff -c
-
-DEV_NULL ?= /dev/null
-
-CHMOD ?= chmod
-
-GREP ?= grep
-
-LINECOUNT ?= wc -l
-
-FIND ?= find
-
-TR ?= tr
-
-EXPR ?= expr
-
-LN ?= ln -s
-
-SED ?= sed
+CAT := cat
+CHMOD := chmod
+CP := cp
+DEV_NULL := /dev/null
+DIFF := diff -c
+ECHO := echo
+EXPR := expr
+FIND := find
+GREP := grep
+LINECOUNT := wc -l
+LN := ln -s
+MKDIR := mkdir -p
+MV := mv
+SED := sed
+TIME := time
+TR := tr
 
 ######################################################################
 # テストグループとテストでの共通マクロ
@@ -64,7 +44,7 @@ endef
 # chk_file_ext: 指定されたファイルが実在する場合、エラー
 # 用例: $(call chk_file_ext,file)
 define chk_file_ext
-    $(if $(wildcard $1),$(error $1 exists in $(CURRDIR)))
+    $(if $(wildcard $1),$(error $1 exists in $(CURDIR)))
 endef
 
 # 指定したディレクトリーを作成
@@ -116,7 +96,7 @@ TEST_MAKEFILE := Test.mk
 MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE)
 
 # すべてのMakefile群の絶対パス
-MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file))
+MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURDIR)/$(file))
 
 ######################################################################
 # テストのディレクトリー
index 01d5a27..79bb68b 100644 (file)
@@ -8,18 +8,20 @@
 # make time     : すべてのテストを実行し、実行時間をログファイルに出力
 # make create   : TESTNAMEで指定されたテストを新規に作成
 # make clean    : すべてのテストで、"make" で生成されたファイルをクリア
-# make cleantime: すべてのテストで、実行時間のログファイルをクリア
+# make time-clean: すべてのテストで、実行時間のログファイルをクリア
 
 SHELL = /bin/sh
 
 include Define.mk
 
+verbose ?= 1
+
 ######################################################################
 # テストグループのディレクトリー
 ######################################################################
 
 # グループディレクトリー
-GROUP_DIR := $(CURRDIR)
+GROUP_DIR := $(CURDIR)
 
 # グループ名。ディレクトリ名から取得
 GROUP := $(notdir $(GROUP_DIR))
@@ -50,16 +52,18 @@ TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE))
 # 引数は、テストのリスト、グループファイル、テストファイル
 # 用例: $(call group_log,files_test_log,file_group_log)
 define group_log
+    $(if $(filter 1,$(verbose)),$(ECHO) '$(CURDIR) - $(words $1) tests')
     $(foreach target,$1,$(call group_log_each,$(target),$2))
+    $(if $(filter 1,$(verbose)),$(ECHO))
 endef
 
 # テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル
 # 用例: $(call group_log_each,file_test_log,file_group_log)
 define group_log_each
+    $(if $(filter 1,$(verbose)),$(ECHO) -n '.')
     $(ECHO) $(dir $1) >>$2;
     if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi
     $(ECHO) >>$2;
-
 endef
 
 # 成功したテストの数。テストグループログファイルから取得
@@ -78,29 +82,30 @@ TEST_TIME_FILES := $(foreach test,$(TESTS),$(test)/$(TIME_FILE))
 # 引数は、グループ名、グループログファイル、グループレポートファイル
 # 用例: $(call group_report,name,file_log,file_report)
 define group_report
-    $(ECHO) "$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in $(GROUP_DIR)/$2" >$3;
+    $(ECHO) '$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in $(GROUP_DIR)/$2' >$3
     if test $(FAIL_TEST) -eq 0; then $(ECHO) "$1: All tests are succeded." >>$3; fi
 endef
 
 # リストで指定したディレクトリーでmakeを実行
-# 用例: $(call make_tests,list_dir,target)
-define make_tests
-    $(foreach dir,$1,$(call make_test_each,$(dir),$2))
+# 用例: $(call make_targets,list_dir,target)
+define make_targets
+    $(if $(filter 1,$(verbose)),$(ECHO) '$(CURDIR) - $2';)
+    $(foreach dir,$1,$(call make_target_each,$(dir),$2))
 endef
 
 # 指定したディレクトリーでmakeを実行
-# 用例: $(call make_test_each,tests,target)
-define make_test_each
+# 用例: $(call make_target_each,tests,target)
+define make_target_each
     $(MAKE) $2 -sC $1;
-
 endef
 
-.PHONY: check checkall time create clean cleantime
+.PHONY: check checkall time create clean time-clean
 
 check checkall: clean $(GROUP_REPORT_FILE)
        @$(CAT) $(GROUP_REPORT_FILE)
+       @exit $(FAIL_TEST)
 
-time: cleantime $(GROUP_TIME_FILE)
+time: time-clean $(GROUP_TIME_FILE)
        @$(CAT) $(GROUP_TIME_FILE)
 
 create:
@@ -108,12 +113,12 @@ create:
        @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES))
 
 clean:
-       @$(call make_tests,$(TESTS),$@)
-       @$(RM) $(GROUP_RES_FILES)
+       @$(call make_targets,$(TESTS),$@)
+       @$(RM) $(GROUP_RES_FILES);
 
-cleantime:
-       @$(call make_tests,$(TESTS),$@)
-       @$(RM) $(GROUP_TIME_FILE)
+time-clean:
+       @$(call make_targets,$(TESTS),$@)
+       @$(RM) $(GROUP_TIME_FILE);
 
 $(GROUP_REPORT_FILE): $(GROUP_LOG_FILE)
        @$(call group_report,$(GROUP),$^,$@)
index d5acfb9..e88f17a 100644 (file)
@@ -28,5 +28,5 @@ copymk:
        @$(CP) $(MAKEFILES) $(GROUPDIR)/
 
 linkmk:
-       @$(LN) $(CURRDIR)/$(GROUP_MAKEFILE) $(GROUPDIR)/Makefile
+       @$(LN) $(CURDIR)/$(GROUP_MAKEFILE) $(GROUPDIR)/Makefile
        @$(LN) $(MAKEFILES_ABS) $(GROUPDIR)/
index 11b8cbf..e72ba6d 100644 (file)
@@ -9,9 +9,9 @@
 # make set     : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない
 # make reset   : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き
 # make time    : CMDの実行にかかった時間をTIME_FILEに保存し、出力
-# make cleantime: "make time" で作成されたファイルをクリア
+# make time-clean: "make time" で作成されたファイルをクリア
 # make clean   : "make" で作成されたファイルをクリア
-# make cleanall: "make" と "make set" で作成されたファイルをクリア
+# make all-clean: "make" と "make set" で作成されたファイルをクリア
 SHELL = /bin/bash
 
 ######################################################################
@@ -49,7 +49,7 @@ define exec_cmd
     if test ! -x $1; then $(CHMOD) u+x $1; fi
     ./$1 >>$2 2>$3
     if test -s $3; then $(CAT) $3 >>$2; fi
-    $(MV) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp
+    $(MV) $2 $2.tmp && $(SED) -e "s%$(CURDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp
     $(call rm_null,$3)
 endef
 
@@ -67,7 +67,7 @@ endef
 define test_log
     $(call desc_log,$3)
     if test ! -s $2; then RES=Success; else RES=Failure; fi; $(ECHO) "$1: Test $$RES $(DATE)" >>$3
-    $(ECHO) "Details in $(CURRDIR)/$(DETAIL_FILE)" >>$3
+    $(ECHO) "Details in $(CURDIR)/$(DETAIL_FILE)" >>$3
 endef
 
 # NODISPが設定されていない時は、ログファイルを表示
@@ -97,12 +97,12 @@ define echo_hr
 endef
 
 # テスト名。カレントディレクトリー名から取得
-TEST = $(notdir $(CURRDIR))
+TEST = $(notdir $(CURDIR))
 
 # コマンドファイルのソース
 CMDSRC_FILE ?= $(CMD_FILE)
 
-.PHONY: check set reset clean cleanall time cleantime
+.PHONY: check set reset clean all-clean time time-clean
 
 check: clean $(DETAIL_FILE)
        @$(call disp_test_log,$(LOG_FILE))
@@ -116,20 +116,20 @@ set: $(CMD_FILE)
        @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE))
        @$(CAT) $(TEST0_FILE)
 
-reset: cleanall $(CMD_FILE)
+reset: all-clean $(CMD_FILE)
        @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE))
        @$(CAT) $(TEST0_FILE)
 
 clean:
        @$(RM) $(TEST_RES_FILES)
 
-cleanall: clean
+all-clean: clean
        @$(RM) $(TEST0_FILE)
 
-time: cleantime $(TIME_FILE)
+time: time-clean $(TIME_FILE)
        @$(CAT) $(TIME_FILE)
 
-cleantime:
+time-clean:
        @$(RM) $(TIME_FILE)
 
 $(TEST1_FILE): $(CMD_FILE)