Refactoring TEST.mk
[YACASL2.git] / test / TEST.mk
index 12299d7..dc64dcb 100644 (file)
@@ -1,38 +1,33 @@
 # テストのテンプレート
+# 次の変数を定義する
+#    CMD: 実行するコマンド
+#    MAINTARGET_OVERRIDE: メインターゲットを独自に定義し、オーバーライドする
 # make         : CMDで設定されたコマンドを実行した出力結果を1.txtに出力し、0.txtと比較し、レポート
-# make all     : ↓
 # make check   : ↓
 # make prepare : CMDで設定されたコマンドを実行した出力結果を0.txt(テストの想定結果)に出力
 # make clean   : 「make」で生成されたファイルをクリア
-# make cleanall: 「make」と「make clean」で生成されたファイルをクリア
-LOGFILE = ../test.log
-ERRFILE = err.txt
-CURDIR = `pwd`
-define report
-  @echo -n "`basename $$PWD`: Test " >$@
-  @if test ! -s $^; then \
-    echo -n "Success " >>$@; \
-    rm -f $^; \
-  else \
-    echo -n "Failure " >>$@; \
-  fi
-  @echo `date +"%F %T"` >>$@
-endef
-
-.PHPNY: all check prepare clean cleanall logadd
-check: clean logadd
-all: check
-prepare: cleanall 0.txt
+# make cleanall: 「make」と「make prepare」で生成されたファイルをクリア
+UNITNAME = `pwd | xargs basename`
+DATE = `date +"%F %T"`
+ERR_FILE = err.txt
+DIFF_FILE = diff.txt
+REPORT_FILE = report.txt
+TEST0_FILE = 0.txt
+TEST1_FILE = 1.txt
+.PHPNY: check prepare clean cleanall
+check: clean $(REPORT_FILE)
+prepare: cleanall $(TEST0_FILE)
 clean:
-       @rm -f 1.txt diff.txt report.txt
+       @rm -f $(TEST1_FILE) $(DIFF_FILE) $(REPORT_FILE) $(ERR_FILE)
 cleanall: clean
-       @rm -f 0.txt
-0.txt 1.txt: $(CMDFILE) $(OBJFILE)
-       @$(CMD) >$@ 2>$(ERRFILE); \
-     if test -s $(ERRFILE); then cat err.txt >>$@; else rm -f $(ERRFILE); fi
-diff.txt: 1.txt
-       @-diff 0.txt 1.txt >$@ 2>&1
-report.txt: diff.txt
-       $(report)
-logadd: report.txt
-       @cat $^ >>$(LOGFILE)
+       @rm -f $(TEST0_FILE)
+ifndef MAINTARGET_OVERRIDE
+$(TEST0_FILE) $(TEST1_FILE):
+       @echo $(CMD) >$@; \
+     $(CMD) >>$@ 2>$(ERR_FILE); \
+     if test -s $(ERR_FILE); then cat $(ERR_FILE) >>$@; else rm -f $(ERR_FILE); fi
+endif
+$(DIFF_FILE): $(TEST1_FILE)
+       @-diff -c $(TEST0_FILE) $(TEST1_FILE) >$@ 2>&1
+$(REPORT_FILE): $(DIFF_FILE)
+       @if test ! -s $^; then echo "$(UNITNAME): Test Success $(DATE)" >>$@; rm -f $^; else echo "$(UNITNAME): Test Failure $(DATE)" >>$@; fi;