1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#---*- Makefile -*-------------------------------------------------------------
#$Author: antanas $
#$Date: 2017-03-01 16:34:01 +0200 (Tr, 01 kov. 2017) $
#$Revision: 4996 $
#$URL: svn://www.crystallography.net/cod-tools/tags/v2.3/makefiles/Makelocal-unit-test $
#------------------------------------------------------------------------------
#*
# Runs unit tests for an individual module. Requires test driver script(s).
# The makefile is also capable of creating test output files (*.out)
# from test input files (*.inp), producing the list of tests that
# did not pass and removing old test results.
#**
# The following variables should be predefined in the Makeconf file:
# ${TEST_MODULE}
# Full path to the module that is being tested.
# ${TEST_DEPEND}
# Additional dependencies that should be assembled
# before carrying out the tests (for example, *.so
# files that are generated by SWIG).
TEST_MODULE ?= ${notdir $(shell pwd)}.pm
TEST_DEPEND ?=
TEST_DIR = tests
SHELL = /bin/bash
.PRECIOUS: ${TEST_MODULE} ${TEST_DEPEND}
.PHONY: all tests alltests
all: tests
tests alltests: test shtest
#------------------------------------------------------------------------------
# Tests that use the driver scripts:
SCRIPT_DIR = ${TEST_DIR}/scripts
INP_DIR = ${TEST_DIR}/cases
OUTP_DIR = ${TEST_DIR}/outputs
TEST_FILES = ${wildcard ${INP_DIR}/*.inp}
DIFF_FILES = ${TEST_FILES:${INP_DIR}/%.inp=${OUTP_DIR}/%.diff}
OUTP_FILES = ${TEST_FILES:${INP_DIR}/%.inp=${OUTP_DIR}/%.out}
.PHONY: test out outputs
test: ${DIFF_FILES}
out outputs: ${OUTP_FILES}
${OUTP_DIR}/%.diff: ${INP_DIR}/%.inp ${INP_DIR}/%.opt ${TEST_MODULE} ${TEST_DEPEND}
-@printf "%-30s " "$<:" ; \
( ${SCRIPT_DIR}/$(shell echo $* | sed -e 's/_[0-9]*$$//') \
$(shell grep -v '^#' ${word 2, $^}) \
$< ) 2>&1 \
| diff ${OUTP_DIR}/$*.out - \
> $@ ; \
if [ $$? = 0 ]; then echo "OK"; else echo "FAILED:"; cat $@; fi
${OUTP_DIR}/%.diff: ${INP_DIR}/%.inp ${TEST_MODULE} ${TEST_DEPEND}
-@printf "%-30s " "$<:" ; \
( ${SCRIPT_DIR}/$(shell echo $* | sed -e 's/_[0-9]*$$//') \
$< ) 2>&1 \
| diff ${OUTP_DIR}/$*.out - \
> $@ ; \
if [ $$? = 0 ]; then echo "OK"; else echo "FAILED:"; cat $@; fi
${OUTP_DIR}/%.out: ${INP_DIR}/%.inp ${INP_DIR}/%.opt ${TEST_MODULE} ${TEST_DEPEND}
-@test -f $@ || echo "$@:"
-@test -f $@ || \
( ${SCRIPT_DIR}/$(shell echo $* | sed -e 's/_[0-9]*$$//') \
$(shell grep -v '^#' ${word 2, $^}) \
$< ) 2>&1 \
| tee $@
-@touch $@
${OUTP_DIR}/%.out: ${INP_DIR}/%.inp ${TEST_MODULE} ${TEST_DEPEND}
-@test -f $@ || echo "$@:"
-@test -f $@ || \
( ${SCRIPT_DIR}/$(shell echo $* | sed -e 's/_[0-9]*$$//') \
$< ) 2>&1 \
| tee $@
-@touch $@
#------------------------------------------------------------------------------
# Shell-driven tests:
SHELL_TSTDIR = ./${TEST_DIR}/shtests
SHELL_OUTDIR = ./${TEST_DIR}/shoutputs
SHELL_TESTS = ${wildcard ${SHELL_TSTDIR}/*.sh}
SHELL_BASES = ${notdir ${SHELL_TESTS}}
SHELL_OUTPUTS = ${addprefix ${SHELL_OUTDIR}/, ${SHELL_BASES:%.sh=%.out}}
SHELL_DIFFS = ${addprefix ${SHELL_OUTDIR}/, ${SHELL_BASES:%.sh=%.diff}}
.PHONY: shtest shtests shout shoutputs
shtest shtests: ${SHELL_DIFFS}
shout shoutputs: ${SHELL_OUTPUTS}
${SHELL_OUTDIR}/%.out: ${SHELL_TSTDIR}/%.sh ${TEST_MODULE} ${TEST_DEPEND}
-@test -f $@ || echo "$@:"
-@test -f $@ || $< ${TEST_MODULE} 2>&1 | tee $@
-@touch $@
${SHELL_OUTDIR}/%.diff: ${SHELL_TSTDIR}/%.sh ${TEST_MODULE} ${TEST_DEPEND}
-@printf "%-30s " "$*:" ; \
$< ${TEST_MODULE} 2>&1 \
| diff ${SHELL_OUTDIR}/$*.out - > $@ ; \
if [ $$? = 0 ]; then echo "OK"; else echo "FAILED:"; cat $@; fi
#------------------------------------------------------------------------------
# Generate a list of tests that did not pass:
.PHONY: listdiff
listdiff: ${DIFF_FILES} ${SHELL_DIFFS}
@find ${OUTP_DIR} ${SHELL_OUTDIR} -name \*.diff -size +0 \
| sort -u | xargs --no-run-if-empty ls -l
#------------------------------------------------------------------------------
# Remove old tests results:
.PHONY: clean cleanAll distclean
clean cleanAll distclean: clean-YAPP-test
clean-YAPP-test:
rm -f ${DIFF_FILES}
rm -f ${SHELL_DIFFS}
|