mirror of
https://github.com/ascii-boxes/boxes.git
synced 2025-01-06 14:08:54 +01:00
Added low-tech test mechanism
This commit is contained in:
parent
6acd7f4839
commit
724890bb72
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,7 +1,7 @@
|
||||
*.o
|
||||
*.a
|
||||
archive/
|
||||
test/
|
||||
test.orig/
|
||||
website/
|
||||
zs-*
|
||||
idee
|
||||
@ -12,6 +12,7 @@ doc/*.tar.gz
|
||||
press/
|
||||
*.tar.gz
|
||||
src/boxes
|
||||
src/boxes.exe
|
||||
src/boxes.h
|
||||
src/lex.yy.c
|
||||
src/parser.h
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
language: c
|
||||
|
||||
compiler: gcc
|
||||
|
||||
script: make
|
||||
script: make && make test
|
||||
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
|
4
Makefile
4
Makefile
@ -92,6 +92,7 @@ RCS_FILES = $(CL_FILES) Makefile doc/boxes.el doc/create_changelog.pl
|
||||
ALL_FILES = COPYING README README.Win32.txt boxes-config Makefile
|
||||
DOC_FILES = doc/boxes.1 doc/boxes.1.in doc/boxes.el
|
||||
|
||||
.PHONY: clean build debug locsnap rcstest rcslocks love test
|
||||
|
||||
build debug boxes: src/boxes.h doc/boxes.1
|
||||
@echo For compilation info see the boxes website at http://boxes.thomasjensen.com/
|
||||
@ -140,6 +141,9 @@ logpage: $(CL_FILES)
|
||||
cd src; ../doc/create_changelog.pl $(patsubst %,../%,$(CL_FILES)) $(shell $(MAKE) -C src -s logpage) > $(CLOGFILE)
|
||||
|
||||
|
||||
test:
|
||||
cd test; ./testrunner.sh -suite
|
||||
|
||||
love:
|
||||
@echo "Not in front of the kids, honey!"
|
||||
|
||||
|
8
test/001_trivial.txt
Normal file
8
test/001_trivial.txt
Normal file
@ -0,0 +1,8 @@
|
||||
:ARGS
|
||||
:INPUT
|
||||
foo
|
||||
:EXPECTED
|
||||
/*******/
|
||||
/* foo */
|
||||
/*******/
|
||||
:EOF
|
11
test/002_trivial_10x5.txt
Normal file
11
test/002_trivial_10x5.txt
Normal file
@ -0,0 +1,11 @@
|
||||
:ARGS
|
||||
-s 10x5
|
||||
:INPUT
|
||||
foo
|
||||
:EXPECTED
|
||||
/********/
|
||||
/* foo */
|
||||
/* */
|
||||
/* */
|
||||
/********/
|
||||
:EOF
|
6
test/003_no_config_file.txt
Normal file
6
test/003_no_config_file.txt
Normal file
@ -0,0 +1,6 @@
|
||||
:ARGS
|
||||
-f nonexistent
|
||||
:INPUT
|
||||
:EXPECTED-ERROR 1
|
||||
boxes: Couldn't open config file 'nonexistent' for input.
|
||||
:EOF
|
90
test/testrunner.sh
Executable file
90
test/testrunner.sh
Executable file
@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Low-tech test runner for boxes.
|
||||
#
|
||||
# File: testrunner.sh
|
||||
# Date created: September 23, 2014 (Tuesday, 20:06h)
|
||||
# Author: Thomas Jensen
|
||||
# _____________________________________________________________________
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo 'Usage: testrunner.sh {-suite | <testCaseFile>}'
|
||||
echo ' Returns 0 for success, else non-zero'
|
||||
exit 2
|
||||
fi
|
||||
if [ ${PWD##*/} != "test" ]; then
|
||||
>&2 echo "Please run this script from the test folder."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Execute the entire test suite
|
||||
if [ "$1" == "-suite" ]; then
|
||||
declare -i overallResult=0
|
||||
declare -i countExecuted=0
|
||||
declare -i countFailed=0
|
||||
declare tc
|
||||
for tc in *.txt; do
|
||||
$0 $tc
|
||||
if [ $? -ne 0 ]; then
|
||||
overallResult=1
|
||||
((countFailed++))
|
||||
fi
|
||||
((countExecuted++))
|
||||
done
|
||||
echo "$countExecuted tests executed, $(($countExecuted-$countFailed)) successful, $countFailed failed."
|
||||
exit $overallResult
|
||||
fi
|
||||
|
||||
# Execute only a single test
|
||||
declare -r testCaseFile="$1"
|
||||
if [ ! -f $testCaseFile ]; then
|
||||
>&2 echo "Test Case '$testCaseFile' not found."
|
||||
exit 3
|
||||
fi
|
||||
|
||||
echo "Running test case: $testCaseFile"
|
||||
|
||||
declare sectionName
|
||||
for sectionName in :ARGS :INPUT :EXPECTED :EOF; do
|
||||
if [ $(grep -c ^$sectionName $testCaseFile) -ne 1 ]; then
|
||||
>&2 echo "Missing section $sectionName in test case '$testCaseFile'."
|
||||
exit 4
|
||||
fi
|
||||
done
|
||||
|
||||
declare -i expectedReturnCode=0
|
||||
if [ $(grep -c "^:EXPECTED-ERROR " $testCaseFile) -eq 1 ]; then
|
||||
expectedReturnCode=$(grep "^:EXPECTED-ERROR " $testCaseFile | sed -e 's/:EXPECTED-ERROR //')
|
||||
fi
|
||||
|
||||
declare -r testInputFile=${testCaseFile/%.txt/.input.tmp}
|
||||
declare -r testExpectationFile=${testCaseFile/%.txt/.expected.tmp}
|
||||
declare -r testOutputFile=${testCaseFile/%.txt/.out.tmp}
|
||||
declare -r boxesArgs=$(cat $testCaseFile | sed -n '/^:ARGS/,+1p' | grep -v ^:INPUT | sed '1d')
|
||||
|
||||
cat $testCaseFile | sed -n '/^:INPUT/,/^:EXPECTED\b.*$/p;' | sed '1d;$d' | tr -d '\r' > $testInputFile
|
||||
cat $testCaseFile | sed -n '/^:EXPECTED/,/^:EOF\b.*$/p;' | sed '1d;$d' | tr -d '\r' > $testExpectationFile
|
||||
|
||||
echo " Invoking: boxes $boxesArgs"
|
||||
export BOXES=../boxes-config
|
||||
|
||||
cat $testInputFile | ../src/boxes $boxesArgs >$testOutputFile 2>&1
|
||||
declare -ir actualReturnCode=$?
|
||||
cat $testOutputFile | tr -d '\r' | diff - $testExpectationFile
|
||||
if [ $? -ne 0 ]; then
|
||||
>&2 echo "Error in test case: $testCaseFile (top: actual; bottom: expected)"
|
||||
exit 5
|
||||
fi
|
||||
if [ $actualReturnCode -ne $expectedReturnCode ]; then
|
||||
>&2 echo "Error in test case: $testCaseFile (error code was $actualReturnCode, but expected $expectedReturnCode)"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
rm $testInputFile
|
||||
rm $testExpectationFile
|
||||
rm $testOutputFile
|
||||
|
||||
echo " OK"
|
||||
exit 0
|
||||
|
||||
#EOF
|
Loading…
Reference in New Issue
Block a user