From b28737297c67a30322051100910d2152d7bfb9fd Mon Sep 17 00:00:00 2001 From: j8takagi Date: Mon, 7 Mar 2011 00:27:22 +0900 Subject: [PATCH] =?utf8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=94=A8=E3=81=AEMak?= =?utf8?q?efile=E3=82=92template=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?utf8?q?=E3=83=BC=E3=81=AB=E9=9B=86=E7=B4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- test/system/Makefile | 2 + test/system/casl2/Define.mk | 154 +------------------------------- test/system/casl2/Makefile | 132 +--------------------------- test/system/casl2/Test.mk | 149 +------------------------------ test/system/comet2/Define.mk | 154 +------------------------------- test/system/comet2/Makefile | 132 +--------------------------- test/system/comet2/Test.mk | 149 +------------------------------ test/system/dumpword/Define.mk | 154 +------------------------------- test/system/dumpword/Makefile | 132 +--------------------------- test/system/dumpword/Test.mk | 149 +------------------------------ test/template/Define.mk | 155 +++++++++++++++++++++++++++++++++ test/template/Group.mk | 131 ++++++++++++++++++++++++++++ test/template/Makefile | 32 +++++++ test/template/Test.mk | 148 +++++++++++++++++++++++++++++++ test/unit/Define.mk | 154 +------------------------------- test/unit/Makefile | 132 +--------------------------- test/unit/Test.mk | 149 +------------------------------ 17 files changed, 480 insertions(+), 1728 deletions(-) mode change 100644 => 120000 test/system/casl2/Define.mk mode change 100644 => 120000 test/system/casl2/Makefile mode change 100644 => 120000 test/system/casl2/Test.mk mode change 100644 => 120000 test/system/comet2/Define.mk mode change 100644 => 120000 test/system/comet2/Makefile mode change 100644 => 120000 test/system/comet2/Test.mk mode change 100644 => 120000 test/system/dumpword/Define.mk mode change 100644 => 120000 test/system/dumpword/Makefile mode change 100644 => 120000 test/system/dumpword/Test.mk create mode 100644 test/template/Define.mk create mode 100644 test/template/Group.mk create mode 100644 test/template/Makefile create mode 100644 test/template/Test.mk mode change 100644 => 120000 test/unit/Define.mk mode change 100644 => 120000 test/unit/Makefile mode change 100644 => 120000 test/unit/Test.mk diff --git a/test/system/Makefile b/test/system/Makefile index 1340f45..beda22c 100644 --- a/test/system/Makefile +++ b/test/system/Makefile @@ -4,6 +4,8 @@ define make_dirs $(foreach d,$1,$(MAKE) -sC $d $2) endef +.PHONY: check clean + check: @$(call make_dirs,$(CMDS),$@; ) diff --git a/test/system/casl2/Define.mk b/test/system/casl2/Define.mk deleted file mode 100644 index ff5b4b0..0000000 --- a/test/system/casl2/Define.mk +++ /dev/null @@ -1,153 +0,0 @@ -# autotest.mk > test_template > Define.mk -# 自動テスト用の変数、マクロ定義 - -ifndef DEFINE_INCLUDED -DEFINE_INCLUDED = 1 - -# 現在の日時 -DATE = $(shell date +"%F %T") - -# 現在のディレクトリー -CURRDIR = $(shell pwd) - -# Makefile -MAKEFILE := Makefile - -###################################################################### -# コマンド -###################################################################### - -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 - -###################################################################### -# テストグループとテストでの共通マクロ -###################################################################### - -# 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,file) -define chk_file_ext - $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) -endef - -# 指定したディレクトリーを作成 -# 引数は、ディレクトリー名 -# 用例: $(call create_dir,name) -define create_dir - $(call chk_var_null,$1) - $(call chk_file_ext,$1) - $(MKDIR) $1 -endef - -# テストディレクトリーのMakefileを作成 -# 引数は、Makefile名、依存ファイル群 -# 用例: $(call create_makefile,file,list_include_file) -define create_makefile - $(RM) $1 - $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; ) - $(if $(filter $(SRC),c),$(call puts_cmd_c,$1)) -endef - -# C言語の関数をテストするための設定を、指定されたファイルに出力 -# 引数は、ファイル名 -# 用例: $(call puts_cmd_c,file) -define puts_cmd_c - $(ECHO) >>$1 - $(ECHO) "CC := gcc" >>$1 - $(ECHO) "CFLAGS := -Wall" >>$1 - $(ECHO) >>$1 - $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1 - $(ECHO) >>$1 - $(ECHO) "CMDSRC_FILE := cmd.c" >>$1 - $(ECHO) "TESTTARGET_FILES := # Set test target files" >>$1 - $(ECHO) >>$1 - $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1 - $(ECHO) " ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1 -endef - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# テストグループとテストの変数を定義したMakefile -DEFINE_FILE := Define.mk - -# テストのターゲットを定義したMakefile -TEST_MAKEFILE := Test.mk - -# すべてのMakefile群 -MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) - -# すべてのMakefile群の絶対パス -MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) - -###################################################################### -# テストのディレクトリー -###################################################################### - -# テストコマンドファイル -CMD_FILE := cmd - -# テスト説明ファイル -DESC_FILE := desc.txt - -# テスト想定ファイル -TEST0_FILE := 0.txt - -# テスト結果ファイル -TEST1_FILE := 1.txt - -# テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.log - -# テストエラーファイル -ERR_FILE := err.log - -# テストログファイル -LOG_FILE := summary.log - -# 実行時間ファイル -TIME_FILE := time.log - -# テスト詳細レポートファイル -DETAIL_FILE := detail.log - -# テストの結果として作成されるファイル群 -TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE) - -endif diff --git a/test/system/casl2/Define.mk b/test/system/casl2/Define.mk new file mode 120000 index 0000000..b4a58e1 --- /dev/null +++ b/test/system/casl2/Define.mk @@ -0,0 +1 @@ +../../template/Define.mk \ No newline at end of file diff --git a/test/system/casl2/Makefile b/test/system/casl2/Makefile deleted file mode 100644 index 01d5a27..0000000 --- a/test/system/casl2/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# autotest.mk > template > Group.mk -# テストグループのMakefile -# -# オペレーター -# make : すべてのテストを実行し、結果をログファイルに出力 -# make check : ↓ -# make checkall : すべてのテストを実行し、結果と実行時間をログファイルに出力 -# make time : すべてのテストを実行し、実行時間をログファイルに出力 -# make create : TESTNAMEで指定されたテストを新規に作成 -# make clean : すべてのテストで、"make" で生成されたファイルをクリア -# make cleantime: すべてのテストで、実行時間のログファイルをクリア - -SHELL = /bin/sh - -include Define.mk - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# グループディレクトリー -GROUP_DIR := $(CURRDIR) - -# グループ名。ディレクトリ名から取得 -GROUP := $(notdir $(GROUP_DIR)) - -# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー -TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d)) - -# テストグループログファイル -GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log - -# テストグループレポートファイル -GROUP_REPORT_FILE := Summary.log - -# テストグループ実行時間ファイル -GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log - -# グループで、テスト結果として作成されるファイル群 -GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE) - -# テストごとのログファイル -TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) - -###################################################################### -# テストグループのマクロ -###################################################################### - -# テストごとのファイルをグループファイルに出力 -# 引数は、テストのリスト、グループファイル、テストファイル -# 用例: $(call group_log,files_test_log,file_group_log) -define group_log - $(foreach target,$1,$(call group_log_each,$(target),$2)) -endef - -# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル -# 用例: $(call group_log_each,file_test_log,file_group_log) -define group_log_each - $(ECHO) $(dir $1) >>$2; - if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi - $(ECHO) >>$2; - -endef - -# 成功したテストの数。テストグループログファイルから取得 -SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# 失敗したテストの数。テストグループログファイルから取得 -FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# すべてのテストの数 -ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST)) - -# テストごとの実行時間ファイル -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; - 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)) -endef - -# 指定したディレクトリーでmakeを実行 -# 用例: $(call make_test_each,tests,target) -define make_test_each - $(MAKE) $2 -sC $1; - -endef - -.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) - -create: - @$(call create_dir,$(TEST)) - @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) - -clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_RES_FILES) - -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 group_log,$^,$@) - -$(TEST_LOG_FILES): - @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1 - -$(GROUP_TIME_FILE): $(TEST_TIME_FILES) - @$(call group_log,$^,$@) - -$(TEST_TIME_FILES): - @$(MAKE) time -sC $(dir $@) diff --git a/test/system/casl2/Makefile b/test/system/casl2/Makefile new file mode 120000 index 0000000..4f4e7b0 --- /dev/null +++ b/test/system/casl2/Makefile @@ -0,0 +1 @@ +../../template/Group.mk \ No newline at end of file diff --git a/test/system/casl2/Test.mk b/test/system/casl2/Test.mk deleted file mode 100644 index ac0fbb7..0000000 --- a/test/system/casl2/Test.mk +++ /dev/null @@ -1,148 +0,0 @@ -# autotest.mk > test_template > Test.mk -# 自動テスト用のMakefile -# -# 要: Define.mk Define_test.mk -# -# オペレーター -# make : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力 -# make check : ↓ -# make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない -# make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き -# make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 -# make cleantime: "make time" で作成されたファイルをクリア -# make clean : "make" で作成されたファイルをクリア -# make cleanall: "make" と "make set" で作成されたファイルをクリア -SHELL = /bin/bash - -###################################################################### -# マクロ -###################################################################### - -# 指定されたファイルをチェックし、空の場合は削除 -# 引数は、対象ファイル -# 用例: $(call rm_null,file_target) -define rm_null - if test ! -s $1; then $(RM) $1; fi -endef - -# 説明ファイルの内容を、指定されたファイルに出力 -# 引数は、出力ファイル -# 用例: $(call desc_log,file_out) -define desc_log - if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi -endef - -# テスト実行の経過時間を、指定されたファイルに出力して表示 -# 引数は、テスト名、コマンドファイル、出力ファイル -# 用例: $(call time_cmd,file_cmd,file_out) -define time_cmd - if test ! -x $1; then $(CHMOD) u+x $1; fi - ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2 -endef - -# テスト実行コマンド。 -# コマンドファイルを実行し、標準出力を指定されたファイルに保存。 -# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 -# 引数は、コマンドファイル、出力ファイル、エラーファイル -# 用例: $(call exec_cmd,file_cmd,file_out,file_err) -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 - $(CP) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp - $(call rm_null,$3) -endef - -# 2つのファイルを比較し、差分ファイルを作成 -# 引数は、2ファイルのリスト、差分ファイル -# 用例: $(call diff_files,files,file_out) -define diff_files - $(DIFF) $1 >$2 2>&1 - $(call rm_null,$2) -endef - -# 差分ファイルの内容をログファイルに出力 -# 引数は、テスト名、差分ファイル、ログファイル -# 用例: $(call test_log,name,file_diff,file_log) -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 -endef - -# NODISPが設定されていない時は、ログファイルを表示 -# 引数は、ログファイル -# 用例: $(call disp_test_log,file_log) -define disp_test_log - $(if $(NODISP),,$(CAT) $1) -endef - -# ファイル群から、ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル群、出力ファイル -# 用例: $(call report_files,list_file_target,file_out) -define report_files - $(foreach tfile,$1,$(call report_file,$(tfile),$2)) -endef - -# ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル、出力ファイル -# 用例: $(call report_file,file_target,file_out) -define report_file - $(call chk_var_null,$1) - if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi -endef - -define echo_hr - $(ECHO) "----------------------------------------------------------------------" >>$1 -endef - -# テスト名。カレントディレクトリー名から取得 -TEST = $(notdir $(CURRDIR)) - -# コマンドファイルのソース -CMDSRC_FILE ?= $(CMD_FILE) - -.PHONY: check set reset clean cleanall time cleantime - -check: clean $(DETAIL_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -checkall: clean $(DETAIL_FILE) $(TIME_FILE) - @$(CAT) $(TIME_FILE) >>$(LOG_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -set: $(CMD_FILE) - @$(call chk_file_ext,$(TEST0_FILE)) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -reset: cleanall $(CMD_FILE) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -clean: - @$(RM) $(TEST_RES_FILES) - -cleanall: clean - @$(RM) $(TEST0_FILE) - -time: cleantime $(TIME_FILE) - @$(CAT) $(TIME_FILE) - -cleantime: - @$(RM) $(TIME_FILE) - -$(TEST1_FILE): $(CMD_FILE) - @-$(call exec_cmd,$^,$@,$(ERR_FILE)) - -$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE) - @-$(call diff_files,$^,$@) - -$(LOG_FILE): $(DIFF_FILE) - @$(call test_log,$(TEST),$^,$@) - -$(DETAIL_FILE): $(LOG_FILE) - @$(call report_files,$(LOG_FILE) $(CMDSRC_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@) - -$(TIME_FILE): $(CMD_FILE) - @$(call time_cmd,$^,$@) diff --git a/test/system/casl2/Test.mk b/test/system/casl2/Test.mk new file mode 120000 index 0000000..ada05aa --- /dev/null +++ b/test/system/casl2/Test.mk @@ -0,0 +1 @@ +../../template/Test.mk \ No newline at end of file diff --git a/test/system/comet2/Define.mk b/test/system/comet2/Define.mk deleted file mode 100644 index ff5b4b0..0000000 --- a/test/system/comet2/Define.mk +++ /dev/null @@ -1,153 +0,0 @@ -# autotest.mk > test_template > Define.mk -# 自動テスト用の変数、マクロ定義 - -ifndef DEFINE_INCLUDED -DEFINE_INCLUDED = 1 - -# 現在の日時 -DATE = $(shell date +"%F %T") - -# 現在のディレクトリー -CURRDIR = $(shell pwd) - -# Makefile -MAKEFILE := Makefile - -###################################################################### -# コマンド -###################################################################### - -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 - -###################################################################### -# テストグループとテストでの共通マクロ -###################################################################### - -# 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,file) -define chk_file_ext - $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) -endef - -# 指定したディレクトリーを作成 -# 引数は、ディレクトリー名 -# 用例: $(call create_dir,name) -define create_dir - $(call chk_var_null,$1) - $(call chk_file_ext,$1) - $(MKDIR) $1 -endef - -# テストディレクトリーのMakefileを作成 -# 引数は、Makefile名、依存ファイル群 -# 用例: $(call create_makefile,file,list_include_file) -define create_makefile - $(RM) $1 - $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; ) - $(if $(filter $(SRC),c),$(call puts_cmd_c,$1)) -endef - -# C言語の関数をテストするための設定を、指定されたファイルに出力 -# 引数は、ファイル名 -# 用例: $(call puts_cmd_c,file) -define puts_cmd_c - $(ECHO) >>$1 - $(ECHO) "CC := gcc" >>$1 - $(ECHO) "CFLAGS := -Wall" >>$1 - $(ECHO) >>$1 - $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1 - $(ECHO) >>$1 - $(ECHO) "CMDSRC_FILE := cmd.c" >>$1 - $(ECHO) "TESTTARGET_FILES := # Set test target files" >>$1 - $(ECHO) >>$1 - $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1 - $(ECHO) " ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1 -endef - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# テストグループとテストの変数を定義したMakefile -DEFINE_FILE := Define.mk - -# テストのターゲットを定義したMakefile -TEST_MAKEFILE := Test.mk - -# すべてのMakefile群 -MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) - -# すべてのMakefile群の絶対パス -MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) - -###################################################################### -# テストのディレクトリー -###################################################################### - -# テストコマンドファイル -CMD_FILE := cmd - -# テスト説明ファイル -DESC_FILE := desc.txt - -# テスト想定ファイル -TEST0_FILE := 0.txt - -# テスト結果ファイル -TEST1_FILE := 1.txt - -# テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.log - -# テストエラーファイル -ERR_FILE := err.log - -# テストログファイル -LOG_FILE := summary.log - -# 実行時間ファイル -TIME_FILE := time.log - -# テスト詳細レポートファイル -DETAIL_FILE := detail.log - -# テストの結果として作成されるファイル群 -TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE) - -endif diff --git a/test/system/comet2/Define.mk b/test/system/comet2/Define.mk new file mode 120000 index 0000000..b4a58e1 --- /dev/null +++ b/test/system/comet2/Define.mk @@ -0,0 +1 @@ +../../template/Define.mk \ No newline at end of file diff --git a/test/system/comet2/Makefile b/test/system/comet2/Makefile deleted file mode 100644 index 01d5a27..0000000 --- a/test/system/comet2/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# autotest.mk > template > Group.mk -# テストグループのMakefile -# -# オペレーター -# make : すべてのテストを実行し、結果をログファイルに出力 -# make check : ↓ -# make checkall : すべてのテストを実行し、結果と実行時間をログファイルに出力 -# make time : すべてのテストを実行し、実行時間をログファイルに出力 -# make create : TESTNAMEで指定されたテストを新規に作成 -# make clean : すべてのテストで、"make" で生成されたファイルをクリア -# make cleantime: すべてのテストで、実行時間のログファイルをクリア - -SHELL = /bin/sh - -include Define.mk - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# グループディレクトリー -GROUP_DIR := $(CURRDIR) - -# グループ名。ディレクトリ名から取得 -GROUP := $(notdir $(GROUP_DIR)) - -# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー -TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d)) - -# テストグループログファイル -GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log - -# テストグループレポートファイル -GROUP_REPORT_FILE := Summary.log - -# テストグループ実行時間ファイル -GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log - -# グループで、テスト結果として作成されるファイル群 -GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE) - -# テストごとのログファイル -TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) - -###################################################################### -# テストグループのマクロ -###################################################################### - -# テストごとのファイルをグループファイルに出力 -# 引数は、テストのリスト、グループファイル、テストファイル -# 用例: $(call group_log,files_test_log,file_group_log) -define group_log - $(foreach target,$1,$(call group_log_each,$(target),$2)) -endef - -# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル -# 用例: $(call group_log_each,file_test_log,file_group_log) -define group_log_each - $(ECHO) $(dir $1) >>$2; - if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi - $(ECHO) >>$2; - -endef - -# 成功したテストの数。テストグループログファイルから取得 -SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# 失敗したテストの数。テストグループログファイルから取得 -FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# すべてのテストの数 -ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST)) - -# テストごとの実行時間ファイル -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; - 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)) -endef - -# 指定したディレクトリーでmakeを実行 -# 用例: $(call make_test_each,tests,target) -define make_test_each - $(MAKE) $2 -sC $1; - -endef - -.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) - -create: - @$(call create_dir,$(TEST)) - @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) - -clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_RES_FILES) - -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 group_log,$^,$@) - -$(TEST_LOG_FILES): - @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1 - -$(GROUP_TIME_FILE): $(TEST_TIME_FILES) - @$(call group_log,$^,$@) - -$(TEST_TIME_FILES): - @$(MAKE) time -sC $(dir $@) diff --git a/test/system/comet2/Makefile b/test/system/comet2/Makefile new file mode 120000 index 0000000..4f4e7b0 --- /dev/null +++ b/test/system/comet2/Makefile @@ -0,0 +1 @@ +../../template/Group.mk \ No newline at end of file diff --git a/test/system/comet2/Test.mk b/test/system/comet2/Test.mk deleted file mode 100644 index ac0fbb7..0000000 --- a/test/system/comet2/Test.mk +++ /dev/null @@ -1,148 +0,0 @@ -# autotest.mk > test_template > Test.mk -# 自動テスト用のMakefile -# -# 要: Define.mk Define_test.mk -# -# オペレーター -# make : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力 -# make check : ↓ -# make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない -# make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き -# make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 -# make cleantime: "make time" で作成されたファイルをクリア -# make clean : "make" で作成されたファイルをクリア -# make cleanall: "make" と "make set" で作成されたファイルをクリア -SHELL = /bin/bash - -###################################################################### -# マクロ -###################################################################### - -# 指定されたファイルをチェックし、空の場合は削除 -# 引数は、対象ファイル -# 用例: $(call rm_null,file_target) -define rm_null - if test ! -s $1; then $(RM) $1; fi -endef - -# 説明ファイルの内容を、指定されたファイルに出力 -# 引数は、出力ファイル -# 用例: $(call desc_log,file_out) -define desc_log - if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi -endef - -# テスト実行の経過時間を、指定されたファイルに出力して表示 -# 引数は、テスト名、コマンドファイル、出力ファイル -# 用例: $(call time_cmd,file_cmd,file_out) -define time_cmd - if test ! -x $1; then $(CHMOD) u+x $1; fi - ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2 -endef - -# テスト実行コマンド。 -# コマンドファイルを実行し、標準出力を指定されたファイルに保存。 -# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 -# 引数は、コマンドファイル、出力ファイル、エラーファイル -# 用例: $(call exec_cmd,file_cmd,file_out,file_err) -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 - $(CP) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp - $(call rm_null,$3) -endef - -# 2つのファイルを比較し、差分ファイルを作成 -# 引数は、2ファイルのリスト、差分ファイル -# 用例: $(call diff_files,files,file_out) -define diff_files - $(DIFF) $1 >$2 2>&1 - $(call rm_null,$2) -endef - -# 差分ファイルの内容をログファイルに出力 -# 引数は、テスト名、差分ファイル、ログファイル -# 用例: $(call test_log,name,file_diff,file_log) -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 -endef - -# NODISPが設定されていない時は、ログファイルを表示 -# 引数は、ログファイル -# 用例: $(call disp_test_log,file_log) -define disp_test_log - $(if $(NODISP),,$(CAT) $1) -endef - -# ファイル群から、ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル群、出力ファイル -# 用例: $(call report_files,list_file_target,file_out) -define report_files - $(foreach tfile,$1,$(call report_file,$(tfile),$2)) -endef - -# ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル、出力ファイル -# 用例: $(call report_file,file_target,file_out) -define report_file - $(call chk_var_null,$1) - if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi -endef - -define echo_hr - $(ECHO) "----------------------------------------------------------------------" >>$1 -endef - -# テスト名。カレントディレクトリー名から取得 -TEST = $(notdir $(CURRDIR)) - -# コマンドファイルのソース -CMDSRC_FILE ?= $(CMD_FILE) - -.PHONY: check set reset clean cleanall time cleantime - -check: clean $(DETAIL_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -checkall: clean $(DETAIL_FILE) $(TIME_FILE) - @$(CAT) $(TIME_FILE) >>$(LOG_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -set: $(CMD_FILE) - @$(call chk_file_ext,$(TEST0_FILE)) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -reset: cleanall $(CMD_FILE) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -clean: - @$(RM) $(TEST_RES_FILES) - -cleanall: clean - @$(RM) $(TEST0_FILE) - -time: cleantime $(TIME_FILE) - @$(CAT) $(TIME_FILE) - -cleantime: - @$(RM) $(TIME_FILE) - -$(TEST1_FILE): $(CMD_FILE) - @-$(call exec_cmd,$^,$@,$(ERR_FILE)) - -$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE) - @-$(call diff_files,$^,$@) - -$(LOG_FILE): $(DIFF_FILE) - @$(call test_log,$(TEST),$^,$@) - -$(DETAIL_FILE): $(LOG_FILE) - @$(call report_files,$(LOG_FILE) $(CMDSRC_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@) - -$(TIME_FILE): $(CMD_FILE) - @$(call time_cmd,$^,$@) diff --git a/test/system/comet2/Test.mk b/test/system/comet2/Test.mk new file mode 120000 index 0000000..ada05aa --- /dev/null +++ b/test/system/comet2/Test.mk @@ -0,0 +1 @@ +../../template/Test.mk \ No newline at end of file diff --git a/test/system/dumpword/Define.mk b/test/system/dumpword/Define.mk deleted file mode 100644 index ff5b4b0..0000000 --- a/test/system/dumpword/Define.mk +++ /dev/null @@ -1,153 +0,0 @@ -# autotest.mk > test_template > Define.mk -# 自動テスト用の変数、マクロ定義 - -ifndef DEFINE_INCLUDED -DEFINE_INCLUDED = 1 - -# 現在の日時 -DATE = $(shell date +"%F %T") - -# 現在のディレクトリー -CURRDIR = $(shell pwd) - -# Makefile -MAKEFILE := Makefile - -###################################################################### -# コマンド -###################################################################### - -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 - -###################################################################### -# テストグループとテストでの共通マクロ -###################################################################### - -# 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,file) -define chk_file_ext - $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) -endef - -# 指定したディレクトリーを作成 -# 引数は、ディレクトリー名 -# 用例: $(call create_dir,name) -define create_dir - $(call chk_var_null,$1) - $(call chk_file_ext,$1) - $(MKDIR) $1 -endef - -# テストディレクトリーのMakefileを作成 -# 引数は、Makefile名、依存ファイル群 -# 用例: $(call create_makefile,file,list_include_file) -define create_makefile - $(RM) $1 - $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; ) - $(if $(filter $(SRC),c),$(call puts_cmd_c,$1)) -endef - -# C言語の関数をテストするための設定を、指定されたファイルに出力 -# 引数は、ファイル名 -# 用例: $(call puts_cmd_c,file) -define puts_cmd_c - $(ECHO) >>$1 - $(ECHO) "CC := gcc" >>$1 - $(ECHO) "CFLAGS := -Wall" >>$1 - $(ECHO) >>$1 - $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1 - $(ECHO) >>$1 - $(ECHO) "CMDSRC_FILE := cmd.c" >>$1 - $(ECHO) "TESTTARGET_FILES := # Set test target files" >>$1 - $(ECHO) >>$1 - $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1 - $(ECHO) " ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1 -endef - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# テストグループとテストの変数を定義したMakefile -DEFINE_FILE := Define.mk - -# テストのターゲットを定義したMakefile -TEST_MAKEFILE := Test.mk - -# すべてのMakefile群 -MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) - -# すべてのMakefile群の絶対パス -MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) - -###################################################################### -# テストのディレクトリー -###################################################################### - -# テストコマンドファイル -CMD_FILE := cmd - -# テスト説明ファイル -DESC_FILE := desc.txt - -# テスト想定ファイル -TEST0_FILE := 0.txt - -# テスト結果ファイル -TEST1_FILE := 1.txt - -# テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.log - -# テストエラーファイル -ERR_FILE := err.log - -# テストログファイル -LOG_FILE := summary.log - -# 実行時間ファイル -TIME_FILE := time.log - -# テスト詳細レポートファイル -DETAIL_FILE := detail.log - -# テストの結果として作成されるファイル群 -TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE) - -endif diff --git a/test/system/dumpword/Define.mk b/test/system/dumpword/Define.mk new file mode 120000 index 0000000..b4a58e1 --- /dev/null +++ b/test/system/dumpword/Define.mk @@ -0,0 +1 @@ +../../template/Define.mk \ No newline at end of file diff --git a/test/system/dumpword/Makefile b/test/system/dumpword/Makefile deleted file mode 100644 index 01d5a27..0000000 --- a/test/system/dumpword/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# autotest.mk > template > Group.mk -# テストグループのMakefile -# -# オペレーター -# make : すべてのテストを実行し、結果をログファイルに出力 -# make check : ↓ -# make checkall : すべてのテストを実行し、結果と実行時間をログファイルに出力 -# make time : すべてのテストを実行し、実行時間をログファイルに出力 -# make create : TESTNAMEで指定されたテストを新規に作成 -# make clean : すべてのテストで、"make" で生成されたファイルをクリア -# make cleantime: すべてのテストで、実行時間のログファイルをクリア - -SHELL = /bin/sh - -include Define.mk - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# グループディレクトリー -GROUP_DIR := $(CURRDIR) - -# グループ名。ディレクトリ名から取得 -GROUP := $(notdir $(GROUP_DIR)) - -# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー -TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d)) - -# テストグループログファイル -GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log - -# テストグループレポートファイル -GROUP_REPORT_FILE := Summary.log - -# テストグループ実行時間ファイル -GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log - -# グループで、テスト結果として作成されるファイル群 -GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE) - -# テストごとのログファイル -TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) - -###################################################################### -# テストグループのマクロ -###################################################################### - -# テストごとのファイルをグループファイルに出力 -# 引数は、テストのリスト、グループファイル、テストファイル -# 用例: $(call group_log,files_test_log,file_group_log) -define group_log - $(foreach target,$1,$(call group_log_each,$(target),$2)) -endef - -# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル -# 用例: $(call group_log_each,file_test_log,file_group_log) -define group_log_each - $(ECHO) $(dir $1) >>$2; - if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi - $(ECHO) >>$2; - -endef - -# 成功したテストの数。テストグループログファイルから取得 -SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# 失敗したテストの数。テストグループログファイルから取得 -FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# すべてのテストの数 -ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST)) - -# テストごとの実行時間ファイル -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; - 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)) -endef - -# 指定したディレクトリーでmakeを実行 -# 用例: $(call make_test_each,tests,target) -define make_test_each - $(MAKE) $2 -sC $1; - -endef - -.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) - -create: - @$(call create_dir,$(TEST)) - @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) - -clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_RES_FILES) - -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 group_log,$^,$@) - -$(TEST_LOG_FILES): - @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1 - -$(GROUP_TIME_FILE): $(TEST_TIME_FILES) - @$(call group_log,$^,$@) - -$(TEST_TIME_FILES): - @$(MAKE) time -sC $(dir $@) diff --git a/test/system/dumpword/Makefile b/test/system/dumpword/Makefile new file mode 120000 index 0000000..4f4e7b0 --- /dev/null +++ b/test/system/dumpword/Makefile @@ -0,0 +1 @@ +../../template/Group.mk \ No newline at end of file diff --git a/test/system/dumpword/Test.mk b/test/system/dumpword/Test.mk deleted file mode 100644 index ac0fbb7..0000000 --- a/test/system/dumpword/Test.mk +++ /dev/null @@ -1,148 +0,0 @@ -# autotest.mk > test_template > Test.mk -# 自動テスト用のMakefile -# -# 要: Define.mk Define_test.mk -# -# オペレーター -# make : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力 -# make check : ↓ -# make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない -# make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き -# make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 -# make cleantime: "make time" で作成されたファイルをクリア -# make clean : "make" で作成されたファイルをクリア -# make cleanall: "make" と "make set" で作成されたファイルをクリア -SHELL = /bin/bash - -###################################################################### -# マクロ -###################################################################### - -# 指定されたファイルをチェックし、空の場合は削除 -# 引数は、対象ファイル -# 用例: $(call rm_null,file_target) -define rm_null - if test ! -s $1; then $(RM) $1; fi -endef - -# 説明ファイルの内容を、指定されたファイルに出力 -# 引数は、出力ファイル -# 用例: $(call desc_log,file_out) -define desc_log - if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi -endef - -# テスト実行の経過時間を、指定されたファイルに出力して表示 -# 引数は、テスト名、コマンドファイル、出力ファイル -# 用例: $(call time_cmd,file_cmd,file_out) -define time_cmd - if test ! -x $1; then $(CHMOD) u+x $1; fi - ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2 -endef - -# テスト実行コマンド。 -# コマンドファイルを実行し、標準出力を指定されたファイルに保存。 -# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 -# 引数は、コマンドファイル、出力ファイル、エラーファイル -# 用例: $(call exec_cmd,file_cmd,file_out,file_err) -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 - $(CP) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp - $(call rm_null,$3) -endef - -# 2つのファイルを比較し、差分ファイルを作成 -# 引数は、2ファイルのリスト、差分ファイル -# 用例: $(call diff_files,files,file_out) -define diff_files - $(DIFF) $1 >$2 2>&1 - $(call rm_null,$2) -endef - -# 差分ファイルの内容をログファイルに出力 -# 引数は、テスト名、差分ファイル、ログファイル -# 用例: $(call test_log,name,file_diff,file_log) -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 -endef - -# NODISPが設定されていない時は、ログファイルを表示 -# 引数は、ログファイル -# 用例: $(call disp_test_log,file_log) -define disp_test_log - $(if $(NODISP),,$(CAT) $1) -endef - -# ファイル群から、ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル群、出力ファイル -# 用例: $(call report_files,list_file_target,file_out) -define report_files - $(foreach tfile,$1,$(call report_file,$(tfile),$2)) -endef - -# ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル、出力ファイル -# 用例: $(call report_file,file_target,file_out) -define report_file - $(call chk_var_null,$1) - if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi -endef - -define echo_hr - $(ECHO) "----------------------------------------------------------------------" >>$1 -endef - -# テスト名。カレントディレクトリー名から取得 -TEST = $(notdir $(CURRDIR)) - -# コマンドファイルのソース -CMDSRC_FILE ?= $(CMD_FILE) - -.PHONY: check set reset clean cleanall time cleantime - -check: clean $(DETAIL_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -checkall: clean $(DETAIL_FILE) $(TIME_FILE) - @$(CAT) $(TIME_FILE) >>$(LOG_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -set: $(CMD_FILE) - @$(call chk_file_ext,$(TEST0_FILE)) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -reset: cleanall $(CMD_FILE) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -clean: - @$(RM) $(TEST_RES_FILES) - -cleanall: clean - @$(RM) $(TEST0_FILE) - -time: cleantime $(TIME_FILE) - @$(CAT) $(TIME_FILE) - -cleantime: - @$(RM) $(TIME_FILE) - -$(TEST1_FILE): $(CMD_FILE) - @-$(call exec_cmd,$^,$@,$(ERR_FILE)) - -$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE) - @-$(call diff_files,$^,$@) - -$(LOG_FILE): $(DIFF_FILE) - @$(call test_log,$(TEST),$^,$@) - -$(DETAIL_FILE): $(LOG_FILE) - @$(call report_files,$(LOG_FILE) $(CMDSRC_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@) - -$(TIME_FILE): $(CMD_FILE) - @$(call time_cmd,$^,$@) diff --git a/test/system/dumpword/Test.mk b/test/system/dumpword/Test.mk new file mode 120000 index 0000000..ada05aa --- /dev/null +++ b/test/system/dumpword/Test.mk @@ -0,0 +1 @@ +../../template/Test.mk \ No newline at end of file diff --git a/test/template/Define.mk b/test/template/Define.mk new file mode 100644 index 0000000..b3c73af --- /dev/null +++ b/test/template/Define.mk @@ -0,0 +1,155 @@ +# autotest.mk > test_template > Define.mk +# 自動テスト用の変数、マクロ定義 + +ifndef DEFINE_INCLUDED +DEFINE_INCLUDED = 1 + +# 現在の日時 +DATE = $(shell date +"%F %T") + +# 現在のディレクトリー +CURRDIR = $(shell pwd) + +# Makefile +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 + +###################################################################### +# テストグループとテストでの共通マクロ +###################################################################### + +# 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,file) +define chk_file_ext + $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) +endef + +# 指定したディレクトリーを作成 +# 引数は、ディレクトリー名 +# 用例: $(call create_dir,name) +define create_dir + $(call chk_var_null,$1) + $(call chk_file_ext,$1) + $(MKDIR) $1 +endef + +# テストディレクトリーのMakefileを作成 +# 引数は、Makefile名、依存ファイル群 +# 用例: $(call create_makefile,file,list_include_file) +define create_makefile + $(RM) $1 + $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; ) + $(if $(filter $(SRC),c),$(call puts_cmd_c,$1)) +endef + +# C言語の関数をテストするための設定を、指定されたファイルに出力 +# 引数は、ファイル名 +# 用例: $(call puts_cmd_c,file) +define puts_cmd_c + $(ECHO) >>$1 + $(ECHO) "CC := gcc" >>$1 + $(ECHO) "CFLAGS := -Wall" >>$1 + $(ECHO) >>$1 + $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1 + $(ECHO) >>$1 + $(ECHO) "CMDSRC_FILE := cmd.c" >>$1 + $(ECHO) "TESTTARGET_FILES := # Set test target files" >>$1 + $(ECHO) >>$1 + $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1 + $(ECHO) " ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1 +endef + +###################################################################### +# テストグループのディレクトリー +###################################################################### + +# テストグループとテストの変数を定義したMakefile +DEFINE_FILE := Define.mk + +# テストのターゲットを定義したMakefile +TEST_MAKEFILE := Test.mk + +# すべてのMakefile群 +MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) + +# すべてのMakefile群の絶対パス +MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) + +###################################################################### +# テストのディレクトリー +###################################################################### + +# テストコマンドファイル +CMD_FILE := cmd + +# テスト説明ファイル +DESC_FILE := desc.txt + +# テスト想定ファイル +TEST0_FILE := 0.txt + +# テスト結果ファイル +TEST1_FILE := 1.txt + +# テストの、想定結果と結果の差分ファイル +DIFF_FILE := diff.log + +# テストエラーファイル +ERR_FILE := err.log + +# テストログファイル +LOG_FILE := summary.log + +# 実行時間ファイル +TIME_FILE := time.log + +# テスト詳細レポートファイル +DETAIL_FILE := detail.log + +# テストの結果として作成されるファイル群 +TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE) + +endif diff --git a/test/template/Group.mk b/test/template/Group.mk new file mode 100644 index 0000000..01d5a27 --- /dev/null +++ b/test/template/Group.mk @@ -0,0 +1,131 @@ +# autotest.mk > template > Group.mk +# テストグループのMakefile +# +# オペレーター +# make : すべてのテストを実行し、結果をログファイルに出力 +# make check : ↓ +# make checkall : すべてのテストを実行し、結果と実行時間をログファイルに出力 +# make time : すべてのテストを実行し、実行時間をログファイルに出力 +# make create : TESTNAMEで指定されたテストを新規に作成 +# make clean : すべてのテストで、"make" で生成されたファイルをクリア +# make cleantime: すべてのテストで、実行時間のログファイルをクリア + +SHELL = /bin/sh + +include Define.mk + +###################################################################### +# テストグループのディレクトリー +###################################################################### + +# グループディレクトリー +GROUP_DIR := $(CURRDIR) + +# グループ名。ディレクトリ名から取得 +GROUP := $(notdir $(GROUP_DIR)) + +# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー +TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d)) + +# テストグループログファイル +GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log + +# テストグループレポートファイル +GROUP_REPORT_FILE := Summary.log + +# テストグループ実行時間ファイル +GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log + +# グループで、テスト結果として作成されるファイル群 +GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE) + +# テストごとのログファイル +TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) + +###################################################################### +# テストグループのマクロ +###################################################################### + +# テストごとのファイルをグループファイルに出力 +# 引数は、テストのリスト、グループファイル、テストファイル +# 用例: $(call group_log,files_test_log,file_group_log) +define group_log + $(foreach target,$1,$(call group_log_each,$(target),$2)) +endef + +# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル +# 用例: $(call group_log_each,file_test_log,file_group_log) +define group_log_each + $(ECHO) $(dir $1) >>$2; + if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi + $(ECHO) >>$2; + +endef + +# 成功したテストの数。テストグループログファイルから取得 +SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT)) + +# 失敗したテストの数。テストグループログファイルから取得 +FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT)) + +# すべてのテストの数 +ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST)) + +# テストごとの実行時間ファイル +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; + 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)) +endef + +# 指定したディレクトリーでmakeを実行 +# 用例: $(call make_test_each,tests,target) +define make_test_each + $(MAKE) $2 -sC $1; + +endef + +.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) + +create: + @$(call create_dir,$(TEST)) + @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) + +clean: + @$(call make_tests,$(TESTS),$@) + @$(RM) $(GROUP_RES_FILES) + +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 group_log,$^,$@) + +$(TEST_LOG_FILES): + @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1 + +$(GROUP_TIME_FILE): $(TEST_TIME_FILES) + @$(call group_log,$^,$@) + +$(TEST_TIME_FILES): + @$(MAKE) time -sC $(dir $@) diff --git a/test/template/Makefile b/test/template/Makefile new file mode 100644 index 0000000..d5acfb9 --- /dev/null +++ b/test/template/Makefile @@ -0,0 +1,32 @@ +# autotest.mk > test_template > Makefile +# テストグループ作成のMakefile +# +# オペレーター +# make : テストグループディレクトリーを作成し、Makefile群をコピー +# make group : ↓ +# make groupdir: テストグループディレクトリーを作成 +# make copymk : Makefile群をコピー +# make linkmk : Makefile群をコピー + +# 変数やマクロの定義 +include Define.mk + +# テストグループのMakefileとしてコピーされるファイル +GROUP_MAKEFILE := Group.mk + +.PHONY: group groupdir copymk linkmk + +MKFILE_METHOD = $(if $(LINKMK),linkmk,copymk) + +group: groupdir $(MKFILE_METHOD) + +groupdir: + @$(MKDIR) $(GROUPDIR) + +copymk: + @$(CP) $(GROUP_MAKEFILE) $(GROUPDIR)/Makefile + @$(CP) $(MAKEFILES) $(GROUPDIR)/ + +linkmk: + @$(LN) $(CURRDIR)/$(GROUP_MAKEFILE) $(GROUPDIR)/Makefile + @$(LN) $(MAKEFILES_ABS) $(GROUPDIR)/ diff --git a/test/template/Test.mk b/test/template/Test.mk new file mode 100644 index 0000000..11b8cbf --- /dev/null +++ b/test/template/Test.mk @@ -0,0 +1,148 @@ +# autotest.mk > test_template > Test.mk +# 自動テスト用のMakefile +# +# 要: Define.mk Define_test.mk +# +# オペレーター +# make : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力 +# make check : ↓ +# make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない +# make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き +# make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 +# make cleantime: "make time" で作成されたファイルをクリア +# make clean : "make" で作成されたファイルをクリア +# make cleanall: "make" と "make set" で作成されたファイルをクリア +SHELL = /bin/bash + +###################################################################### +# マクロ +###################################################################### + +# 指定されたファイルをチェックし、空の場合は削除 +# 引数は、対象ファイル +# 用例: $(call rm_null,file_target) +define rm_null + if test ! -s $1; then $(RM) $1; fi +endef + +# 説明ファイルの内容を、指定されたファイルに出力 +# 引数は、出力ファイル +# 用例: $(call desc_log,file_out) +define desc_log + if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi +endef + +# テスト実行の経過時間を、指定されたファイルに出力して表示 +# 引数は、テスト名、コマンドファイル、出力ファイル +# 用例: $(call time_cmd,file_cmd,file_out) +define time_cmd + if test ! -x $1; then $(CHMOD) u+x $1; fi + ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2 +endef + +# テスト実行コマンド。 +# コマンドファイルを実行し、標準出力を指定されたファイルに保存。 +# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 +# 引数は、コマンドファイル、出力ファイル、エラーファイル +# 用例: $(call exec_cmd,file_cmd,file_out,file_err) +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 + $(call rm_null,$3) +endef + +# 2つのファイルを比較し、差分ファイルを作成 +# 引数は、2ファイルのリスト、差分ファイル +# 用例: $(call diff_files,files,file_out) +define diff_files + $(DIFF) $1 >$2 2>&1 + $(call rm_null,$2) +endef + +# 差分ファイルの内容をログファイルに出力 +# 引数は、テスト名、差分ファイル、ログファイル +# 用例: $(call test_log,name,file_diff,file_log) +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 +endef + +# NODISPが設定されていない時は、ログファイルを表示 +# 引数は、ログファイル +# 用例: $(call disp_test_log,file_log) +define disp_test_log + $(if $(NODISP),,$(CAT) $1) +endef + +# ファイル群から、ファイル名とファイルの内容を指定されたファイルに出力 +# 引数は、対象ファイル群、出力ファイル +# 用例: $(call report_files,list_file_target,file_out) +define report_files + $(foreach tfile,$1,$(call report_file,$(tfile),$2)) +endef + +# ファイル名とファイルの内容を指定されたファイルに出力 +# 引数は、対象ファイル、出力ファイル +# 用例: $(call report_file,file_target,file_out) +define report_file + $(call chk_var_null,$1) + if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi +endef + +define echo_hr + $(ECHO) "----------------------------------------------------------------------" >>$1 +endef + +# テスト名。カレントディレクトリー名から取得 +TEST = $(notdir $(CURRDIR)) + +# コマンドファイルのソース +CMDSRC_FILE ?= $(CMD_FILE) + +.PHONY: check set reset clean cleanall time cleantime + +check: clean $(DETAIL_FILE) + @$(call disp_test_log,$(LOG_FILE)) + +checkall: clean $(DETAIL_FILE) $(TIME_FILE) + @$(CAT) $(TIME_FILE) >>$(LOG_FILE) + @$(call disp_test_log,$(LOG_FILE)) + +set: $(CMD_FILE) + @$(call chk_file_ext,$(TEST0_FILE)) + @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) + @$(CAT) $(TEST0_FILE) + +reset: cleanall $(CMD_FILE) + @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) + @$(CAT) $(TEST0_FILE) + +clean: + @$(RM) $(TEST_RES_FILES) + +cleanall: clean + @$(RM) $(TEST0_FILE) + +time: cleantime $(TIME_FILE) + @$(CAT) $(TIME_FILE) + +cleantime: + @$(RM) $(TIME_FILE) + +$(TEST1_FILE): $(CMD_FILE) + @-$(call exec_cmd,$^,$@,$(ERR_FILE)) + +$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE) + @-$(call diff_files,$^,$@) + +$(LOG_FILE): $(DIFF_FILE) + @$(call test_log,$(TEST),$^,$@) + +$(DETAIL_FILE): $(LOG_FILE) + @$(call report_files,$(LOG_FILE) $(CMDSRC_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@) + +$(TIME_FILE): $(CMD_FILE) + @$(call time_cmd,$^,$@) diff --git a/test/unit/Define.mk b/test/unit/Define.mk deleted file mode 100644 index ff5b4b0..0000000 --- a/test/unit/Define.mk +++ /dev/null @@ -1,153 +0,0 @@ -# autotest.mk > test_template > Define.mk -# 自動テスト用の変数、マクロ定義 - -ifndef DEFINE_INCLUDED -DEFINE_INCLUDED = 1 - -# 現在の日時 -DATE = $(shell date +"%F %T") - -# 現在のディレクトリー -CURRDIR = $(shell pwd) - -# Makefile -MAKEFILE := Makefile - -###################################################################### -# コマンド -###################################################################### - -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 - -###################################################################### -# テストグループとテストでの共通マクロ -###################################################################### - -# 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,file) -define chk_file_ext - $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) -endef - -# 指定したディレクトリーを作成 -# 引数は、ディレクトリー名 -# 用例: $(call create_dir,name) -define create_dir - $(call chk_var_null,$1) - $(call chk_file_ext,$1) - $(MKDIR) $1 -endef - -# テストディレクトリーのMakefileを作成 -# 引数は、Makefile名、依存ファイル群 -# 用例: $(call create_makefile,file,list_include_file) -define create_makefile - $(RM) $1 - $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; ) - $(if $(filter $(SRC),c),$(call puts_cmd_c,$1)) -endef - -# C言語の関数をテストするための設定を、指定されたファイルに出力 -# 引数は、ファイル名 -# 用例: $(call puts_cmd_c,file) -define puts_cmd_c - $(ECHO) >>$1 - $(ECHO) "CC := gcc" >>$1 - $(ECHO) "CFLAGS := -Wall" >>$1 - $(ECHO) >>$1 - $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1 - $(ECHO) >>$1 - $(ECHO) "CMDSRC_FILE := cmd.c" >>$1 - $(ECHO) "TESTTARGET_FILES := # Set test target files" >>$1 - $(ECHO) >>$1 - $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1 - $(ECHO) " ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1 -endef - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# テストグループとテストの変数を定義したMakefile -DEFINE_FILE := Define.mk - -# テストのターゲットを定義したMakefile -TEST_MAKEFILE := Test.mk - -# すべてのMakefile群 -MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) - -# すべてのMakefile群の絶対パス -MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) - -###################################################################### -# テストのディレクトリー -###################################################################### - -# テストコマンドファイル -CMD_FILE := cmd - -# テスト説明ファイル -DESC_FILE := desc.txt - -# テスト想定ファイル -TEST0_FILE := 0.txt - -# テスト結果ファイル -TEST1_FILE := 1.txt - -# テストの、想定結果と結果の差分ファイル -DIFF_FILE := diff.log - -# テストエラーファイル -ERR_FILE := err.log - -# テストログファイル -LOG_FILE := summary.log - -# 実行時間ファイル -TIME_FILE := time.log - -# テスト詳細レポートファイル -DETAIL_FILE := detail.log - -# テストの結果として作成されるファイル群 -TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE) - -endif diff --git a/test/unit/Define.mk b/test/unit/Define.mk new file mode 120000 index 0000000..cd0802f --- /dev/null +++ b/test/unit/Define.mk @@ -0,0 +1 @@ +../template/Define.mk \ No newline at end of file diff --git a/test/unit/Makefile b/test/unit/Makefile deleted file mode 100644 index 01d5a27..0000000 --- a/test/unit/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# autotest.mk > template > Group.mk -# テストグループのMakefile -# -# オペレーター -# make : すべてのテストを実行し、結果をログファイルに出力 -# make check : ↓ -# make checkall : すべてのテストを実行し、結果と実行時間をログファイルに出力 -# make time : すべてのテストを実行し、実行時間をログファイルに出力 -# make create : TESTNAMEで指定されたテストを新規に作成 -# make clean : すべてのテストで、"make" で生成されたファイルをクリア -# make cleantime: すべてのテストで、実行時間のログファイルをクリア - -SHELL = /bin/sh - -include Define.mk - -###################################################################### -# テストグループのディレクトリー -###################################################################### - -# グループディレクトリー -GROUP_DIR := $(CURRDIR) - -# グループ名。ディレクトリ名から取得 -GROUP := $(notdir $(GROUP_DIR)) - -# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー -TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d)) - -# テストグループログファイル -GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log - -# テストグループレポートファイル -GROUP_REPORT_FILE := Summary.log - -# テストグループ実行時間ファイル -GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log - -# グループで、テスト結果として作成されるファイル群 -GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE) - -# テストごとのログファイル -TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) - -###################################################################### -# テストグループのマクロ -###################################################################### - -# テストごとのファイルをグループファイルに出力 -# 引数は、テストのリスト、グループファイル、テストファイル -# 用例: $(call group_log,files_test_log,file_group_log) -define group_log - $(foreach target,$1,$(call group_log_each,$(target),$2)) -endef - -# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル -# 用例: $(call group_log_each,file_test_log,file_group_log) -define group_log_each - $(ECHO) $(dir $1) >>$2; - if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi - $(ECHO) >>$2; - -endef - -# 成功したテストの数。テストグループログファイルから取得 -SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# 失敗したテストの数。テストグループログファイルから取得 -FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT)) - -# すべてのテストの数 -ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST)) - -# テストごとの実行時間ファイル -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; - 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)) -endef - -# 指定したディレクトリーでmakeを実行 -# 用例: $(call make_test_each,tests,target) -define make_test_each - $(MAKE) $2 -sC $1; - -endef - -.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) - -create: - @$(call create_dir,$(TEST)) - @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) - -clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_RES_FILES) - -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 group_log,$^,$@) - -$(TEST_LOG_FILES): - @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1 - -$(GROUP_TIME_FILE): $(TEST_TIME_FILES) - @$(call group_log,$^,$@) - -$(TEST_TIME_FILES): - @$(MAKE) time -sC $(dir $@) diff --git a/test/unit/Makefile b/test/unit/Makefile new file mode 120000 index 0000000..5ce47ef --- /dev/null +++ b/test/unit/Makefile @@ -0,0 +1 @@ +../template/Group.mk \ No newline at end of file diff --git a/test/unit/Test.mk b/test/unit/Test.mk deleted file mode 100644 index ac0fbb7..0000000 --- a/test/unit/Test.mk +++ /dev/null @@ -1,148 +0,0 @@ -# autotest.mk > test_template > Test.mk -# 自動テスト用のMakefile -# -# 要: Define.mk Define_test.mk -# -# オペレーター -# make : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力 -# make check : ↓ -# make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない -# make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き -# make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 -# make cleantime: "make time" で作成されたファイルをクリア -# make clean : "make" で作成されたファイルをクリア -# make cleanall: "make" と "make set" で作成されたファイルをクリア -SHELL = /bin/bash - -###################################################################### -# マクロ -###################################################################### - -# 指定されたファイルをチェックし、空の場合は削除 -# 引数は、対象ファイル -# 用例: $(call rm_null,file_target) -define rm_null - if test ! -s $1; then $(RM) $1; fi -endef - -# 説明ファイルの内容を、指定されたファイルに出力 -# 引数は、出力ファイル -# 用例: $(call desc_log,file_out) -define desc_log - if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi -endef - -# テスト実行の経過時間を、指定されたファイルに出力して表示 -# 引数は、テスト名、コマンドファイル、出力ファイル -# 用例: $(call time_cmd,file_cmd,file_out) -define time_cmd - if test ! -x $1; then $(CHMOD) u+x $1; fi - ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2 -endef - -# テスト実行コマンド。 -# コマンドファイルを実行し、標準出力を指定されたファイルに保存。 -# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。 -# 引数は、コマンドファイル、出力ファイル、エラーファイル -# 用例: $(call exec_cmd,file_cmd,file_out,file_err) -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 - $(CP) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp - $(call rm_null,$3) -endef - -# 2つのファイルを比較し、差分ファイルを作成 -# 引数は、2ファイルのリスト、差分ファイル -# 用例: $(call diff_files,files,file_out) -define diff_files - $(DIFF) $1 >$2 2>&1 - $(call rm_null,$2) -endef - -# 差分ファイルの内容をログファイルに出力 -# 引数は、テスト名、差分ファイル、ログファイル -# 用例: $(call test_log,name,file_diff,file_log) -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 -endef - -# NODISPが設定されていない時は、ログファイルを表示 -# 引数は、ログファイル -# 用例: $(call disp_test_log,file_log) -define disp_test_log - $(if $(NODISP),,$(CAT) $1) -endef - -# ファイル群から、ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル群、出力ファイル -# 用例: $(call report_files,list_file_target,file_out) -define report_files - $(foreach tfile,$1,$(call report_file,$(tfile),$2)) -endef - -# ファイル名とファイルの内容を指定されたファイルに出力 -# 引数は、対象ファイル、出力ファイル -# 用例: $(call report_file,file_target,file_out) -define report_file - $(call chk_var_null,$1) - if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi -endef - -define echo_hr - $(ECHO) "----------------------------------------------------------------------" >>$1 -endef - -# テスト名。カレントディレクトリー名から取得 -TEST = $(notdir $(CURRDIR)) - -# コマンドファイルのソース -CMDSRC_FILE ?= $(CMD_FILE) - -.PHONY: check set reset clean cleanall time cleantime - -check: clean $(DETAIL_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -checkall: clean $(DETAIL_FILE) $(TIME_FILE) - @$(CAT) $(TIME_FILE) >>$(LOG_FILE) - @$(call disp_test_log,$(LOG_FILE)) - -set: $(CMD_FILE) - @$(call chk_file_ext,$(TEST0_FILE)) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -reset: cleanall $(CMD_FILE) - @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) - @$(CAT) $(TEST0_FILE) - -clean: - @$(RM) $(TEST_RES_FILES) - -cleanall: clean - @$(RM) $(TEST0_FILE) - -time: cleantime $(TIME_FILE) - @$(CAT) $(TIME_FILE) - -cleantime: - @$(RM) $(TIME_FILE) - -$(TEST1_FILE): $(CMD_FILE) - @-$(call exec_cmd,$^,$@,$(ERR_FILE)) - -$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE) - @-$(call diff_files,$^,$@) - -$(LOG_FILE): $(DIFF_FILE) - @$(call test_log,$(TEST),$^,$@) - -$(DETAIL_FILE): $(LOG_FILE) - @$(call report_files,$(LOG_FILE) $(CMDSRC_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@) - -$(TIME_FILE): $(CMD_FILE) - @$(call time_cmd,$^,$@) diff --git a/test/unit/Test.mk b/test/unit/Test.mk new file mode 120000 index 0000000..6c99aa2 --- /dev/null +++ b/test/unit/Test.mk @@ -0,0 +1 @@ +../template/Test.mk \ No newline at end of file -- 2.18.0