mirror of
https://github.com/ascii-boxes/boxes.git
synced 2025-01-08 15:08:49 +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
|
*.o
|
||||||
*.a
|
*.a
|
||||||
archive/
|
archive/
|
||||||
test/
|
test.orig/
|
||||||
website/
|
website/
|
||||||
zs-*
|
zs-*
|
||||||
idee
|
idee
|
||||||
@ -12,6 +12,7 @@ doc/*.tar.gz
|
|||||||
press/
|
press/
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
src/boxes
|
src/boxes
|
||||||
|
src/boxes.exe
|
||||||
src/boxes.h
|
src/boxes.h
|
||||||
src/lex.yy.c
|
src/lex.yy.c
|
||||||
src/parser.h
|
src/parser.h
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
language: c
|
language: c
|
||||||
|
|
||||||
compiler: gcc
|
script: make && make test
|
||||||
|
|
||||||
script: make
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get update -qq
|
- 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
|
ALL_FILES = COPYING README README.Win32.txt boxes-config Makefile
|
||||||
DOC_FILES = doc/boxes.1 doc/boxes.1.in doc/boxes.el
|
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
|
build debug boxes: src/boxes.h doc/boxes.1
|
||||||
@echo For compilation info see the boxes website at http://boxes.thomasjensen.com/
|
@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)
|
cd src; ../doc/create_changelog.pl $(patsubst %,../%,$(CL_FILES)) $(shell $(MAKE) -C src -s logpage) > $(CLOGFILE)
|
||||||
|
|
||||||
|
|
||||||
|
test:
|
||||||
|
cd test; ./testrunner.sh -suite
|
||||||
|
|
||||||
love:
|
love:
|
||||||
@echo "Not in front of the kids, honey!"
|
@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