File: Makelocal-unit-test

package info (click to toggle)
cod-tools 2.3%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 114,852 kB
  • sloc: perl: 53,336; sh: 23,842; ansic: 6,318; xml: 1,982; yacc: 1,112; makefile: 716; python: 158; sql: 73
file content (132 lines) | stat: -rw-r--r-- 4,192 bytes parent folder | download
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}