From 894724d1c844f769a4a7a67047adf82bcbd8ad75 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 26 May 2017 00:22:51 -0400 Subject: [PATCH] First version of regression tests. Only one test so far but the framework for more is in place. --- Makefile | 3 +++ tests/Makefile | 51 ++++++++++++++++++++++++++++++++++++++++ tests/dwarf.chk | 2 ++ tests/dwarf.log | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 tests/Makefile create mode 100644 tests/dwarf.chk create mode 100644 tests/dwarf.log diff --git a/Makefile b/Makefile index 343133e..aef58ba 100644 --- 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 index 0000000..fd802f6 --- /dev/null +++ b/tests/Makefile @@ -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 index 0000000..ae601a2 --- /dev/null +++ b/tests/dwarf.chk @@ -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 index 0000000..8f0239f --- /dev/null +++ b/tests/dwarf.log @@ -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 -- 2.31.1