First version of regression tests.
authorEric S. Raymond <esr@thyrsus.com>
Fri, 26 May 2017 04:22:51 +0000 (00:22 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Fri, 26 May 2017 04:22:51 +0000 (00:22 -0400)
Only one test so far but the framework for more is in place.

Makefile
tests/Makefile [new file with mode: 0644]
tests/dwarf.chk [new file with mode: 0644]
tests/dwarf.log [new file with mode: 0644]

index 343133ece069407394fd9be5f767e5aef5ca92f0..aef58baedcdf3cd31a02bcc61fc040bce1b12800 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,9 @@ misc.o:               misc.h main.h
 clean:
        rm -f *.o advent advent.html advent.6 adventure.data
 
+check:
+       cd tests; $(MAKE) --quiet
+
 # Requires asciidoc and xsltproc/docbook stylesheets.
 .asc.6:
        a2x --doctype manpage --format manpage $<
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644 (file)
index 0000000..fd802f6
--- /dev/null
@@ -0,0 +1,51 @@
+# Test-suite makefile for reposurgeon
+
+# By setting the REPOSURGEON environment variable and using -e
+# a different implementation can be plugged in to the tests.
+
+# Use absolute path so tests that change working directory still use 
+# scripts from parent directory.  Note that using $PWD seems to fail
+# here under Gitlab's CI environment.
+PATH := $(realpath ..):$(realpath .):${PATH}
+
+# Defeat annoying behavior under Mac OS X - builtin echo doesn't do -n
+ECHO := /bin/echo
+
+default:
+       make -e --quiet all
+
+all: listcheck regress
+       @echo "=== No diff output is good news."
+
+.SUFFIXES: .chk
+
+clean:
+       rm -fr *~
+
+# Show summary lines for all tests.
+testlist:
+       @grep --text '^##' *.log
+listcheck:
+       @for f in *.log; do \
+           if ( head -3 $$f | grep --text -q '^ *##' ); then :; else echo "$$f needs a description"; fi; \
+       done
+
+# General regression testing of commands and output; look at the *.log and
+# corresponding *.chk files to see which tests this runs.
+TESTLOADS := $(shell ls -1 *.log | sed '/.log/s///')
+buildregress:
+       @for file in $(TESTLOADS); do \
+           echo "Remaking $${file}.chk"; \
+           $(REPOSURGEON) advent <$${file}.log >$${file}.chk \
+               2>&1 || exit 1; \
+       done
+regress:
+       @for file in $(TESTLOADS); do \
+           $(ECHO) -n "  $${file} "; grep --text '##' $${file}.log  || echo ' ## (no description)'; \
+           if advent $${file}.log >/tmp/regress$$$$ 2>&1; \
+           then diff --text -u $${file}.chk /tmp/regress$$$$ || exit 1; \
+           else echo "*** Nonzero return status on $${file}!"; exit 1; fi \
+       done
+       @rm -f /tmp/regress$$$$
+
+# end
diff --git a/tests/dwarf.chk b/tests/dwarf.chk
new file mode 100644 (file)
index 0000000..ae601a2
--- /dev/null
@@ -0,0 +1,2 @@
+Couldn't find adventure.data, using adventure.text...
+Can't read adventure.text!
diff --git a/tests/dwarf.log b/tests/dwarf.log
new file mode 100644 (file)
index 0000000..8f0239f
--- /dev/null
@@ -0,0 +1,62 @@
+## Dwarf appears in soutth side chamber, where the coins are.
+n
+seed 1495763690
+seed 1495752222
+in
+take keys
+take lamp
+out
+down
+s
+s
+open grate
+down
+west
+take cage
+west
+light lamp
+take rod
+xyzzy
+xyzzy
+west
+drop rod
+west
+take bird
+east
+take rod
+west
+west
+down
+south
+take gold
+n
+n
+drop bird
+west
+take coins
+e
+s
+take jewelry
+n
+n
+take silver
+drop cage
+take silver
+n
+plugh
+inven
+drop jewelry
+drop gold
+drop silver
+inven
+drop keys
+plugh
+take knife
+throw axe
+s
+s
+up
+w
+wave rod
+w
+take diamonds