-.PHONY: itest test
+# Empty by default, can be overridden using "make test ZDOTDIR=…".
+ZDOTDIR:=
+# Make it absolute.
+override ZDOTDIR:=$(abspath $(ZDOTDIR))
-itest:
- ZDOTDIR="${PWD}/tests" cram -i --shell=zsh tests
+TEST_SHELL:=zsh
test:
- ZDOTDIR="${PWD}/tests" cram --shell=zsh tests
+ ZDOTDIR=$(ZDOTDIR) cram --shell=$(TEST_SHELL) -v tests
+
+itest:
+ ZDOTDIR=$(ZDOTDIR) cram -i --shell=$(TEST_SHELL) tests
+
+# Run tests with all ZDOTDIRs.
+test_full:
+ @ret=0; \
+ for i in $(wildcard tests/ZDOTDIR*); do \
+ echo "TEST_SHELL=$(TEST_SHELL) ZDOTDIR=$$i"; \
+ ZDOTDIR=${CURDIR}/$$i cram --shell=$(TEST_SHELL) -v tests || ret=$$?; \
+ echo; \
+ done; \
+ exit $$ret
+
+# Define targets for test files, with relative and abolute path.
+# Use verbose output, which is useful with Vim's 'errorformat'.
+TESTS:=$(wildcard tests/*.t)
+
+uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
+_TESTS_REL_AND_ABS:=$(call uniq,$(abspath $(TESTS)) $(TESTS))
+$(_TESTS_REL_AND_ABS):
+ cram --shell=$(TEST_SHELL) -v $@
+.PHONY: $(_TESTS_REL_AND_ABS)
+
+.PHONY: itest test
+
+clean:
+ $(RM) tests/*.err