1# Test-suite makefile for reposurgeon 2 3# Use absolute path so tests that change working directory still use 4# scripts from parent directory. Note that using $PWD seems to fail 5# here under Gitlab's CI environment. 6PARDIR=$(realpath ..) 7PATH := $(PARDIR):$(realpath .):${PATH} 8GCOV?=gcov 9 10# Make this overrideable so it's easier to test old versions 11advent?=advent 12 13# Defeat annoying behavior under Mac OS X - builtin echo doesn't do -n 14ECHO := /bin/echo 15 16# Find all *.log entries to test 17TESTLOADS := $(shell ls -1 *.log | sed '/.log/s///' | sort) 18 19.PHONY: check coverage clean testlist listcheck savegames buildregress 20.PHONY: savecheck regress 21 22check: savecheck regress 23 @echo "=== No diff output is good news." 24 @-advent -x 2>/dev/null # Get usage message into coverage tests 25 @-advent -l /dev/null <pitfall.log >/dev/null 26 27coverage: check 28 lcov -t "advent" -o $(PARDIR)/advent.info -c -d $(PARDIR) --gcov-tool=$(GCOV) 29 genhtml -o $(PARDIR)/coverage/ $(PARDIR)/advent.info 30 ./coverage_dungeon.py 31 32.SUFFIXES: .chk 33 34clean: 35 rm -fr *~ adventure.text *.adv scratch.tmp 36 37# Show summary lines for all tests. 38testlist: 39 @grep '^##' *.log 40listcheck: 41 @for f in *.log; do \ 42 if ( head -3 $$f | grep -q '^ *##' ); then :; else echo "$$f needs a description"; fi; \ 43 done 44 45# Generate bogus savegames. 46savegames: 47 @$(ECHO) "cheat: Generate save file with -900 deaths" 48 @$(PARDIR)/cheat -d -900 -o cheat_numdie.adv > /tmp/cheat_numdie 49 @$(ECHO) "cheat: Generate save file with -1000 deaths" 50 @$(PARDIR)/cheat -d -1000 -o cheat_numdie1000.adv > /tmp/cheat_numdie1000 51 @$(ECHO) "cheat: Generate save file with version -1337" 52 @$(PARDIR)/cheat -v -1337 -o resume_badversion.adv > /tmp/cheat_badversion 53 @$(ECHO) "cheat: Generate save file 1000 saves" 54 @$(PARDIR)/cheat -s -1000 -o thousand_saves.adv > /tmp/cheat_1000saves 55 @$(ECHO) "cheat: Generate save file 1000 turns" 56 @$(PARDIR)/cheat -t -1000 -o thousand_saves.adv > /tmp/cheat_1000turns 57 @$(ECHO) "cheat: Generate save file 1000 turns" 58 @$(PARDIR)/cheat -l -1000 -o thousand_lamp.adv > /tmp/cheat_1000lamp 59 @rm -f /tmp/cheat* 60 61 62# Rebuild characterizing tests 63buildregress: savegames 64 $(PARDIR)/cheat -s -1000 -o thousand_saves.adv > /tmp/regress1000saves 65 @for file in $(TESTLOADS); do \ 66 echo "Remaking $${file}.chk"; \ 67 OPTS=`sed -n /#options:/s///p <$${file}.log`; \ 68 advent $$OPTS <$${file}.log >$${file}.chk 2>&1 || exit 1; \ 69 done; \ 70 rm -f scratch.tmp 71 72savecheck: savegames 73 @$(ECHO) "TEST cheat: Bogus option for save file generation" 74 @$(PARDIR)/cheat -QqQ 2> /tmp/coverage_cheat_batopt | true 75 @$(ECHO) "TEST cheat: No save file specified" 76 @$(PARDIR)/cheat 2>/dev/null | true 77 @$(ECHO) "TEST cheat: Fail to save because we omit -o" 78 @$(PARDIR)/cheat -d 1 2> /tmp/coverage_cheat_nooutput | true 79 @$(ECHO) "TEST cheat: Fail to save to invalid path" 80 @$(PARDIR)/cheat -o / 2> /tmp/coverage_cheat_badoutput | true 81 @$(ECHO) "TEST advent: Start with invalid file with -r" 82 @advent -r /badfilename < pitfall.log > /tmp/coverage_advent_readfail 2>&1 || exit 1 83 @$(ECHO) "TEST advent: Start with invalid file with -l" 84 @advent -l / < pitfall.log > /tmp/coverage_advent_logfail 2>&1 || exit 1 85 @$(ECHO) "TEST advent: Test -r with valid input" 86 @advent -r thousand_saves.adv < pitfall.log > /tmp/coverage_advent_readfail 2>&1 || exit 1 87 @rm -f /tmp/coverage* 88 89# General regression testing of commands and output; look at the *.log and 90# corresponding *.chk files to see which tests this runs. 91regress: 92 @for file in $(TESTLOADS); do \ 93 $(ECHO) -n " $${file} "; grep '##' $${file}.log || echo ' ## (no description)'; \ 94 OPTS=`sed -n /#options:/s///p <$${file}.log`; \ 95 if $(advent) $$OPTS < $${file}.log >/tmp/regress$$$$ 2>&1; \ 96 then diff --text -u $${file}.chk /tmp/regress$$$$ || exit 1; \ 97 else echo "*** Nonzero return status on $${file}!"; exit 1; fi \ 98 done; \ 99 rm -f scratch.tmp /tmp/regress$$$$ 100 101# end 102