tests: add first tests + test framework

This commit is contained in:
Boris Faure 2018-11-22 23:41:48 +01:00
parent 2db4a0e980
commit 826606e0c3
5 changed files with 279 additions and 0 deletions

42
tests/README.md Normal file
View File

@ -0,0 +1,42 @@
Very small test framework for Terminology
Goal
----
Avoid regressions in Terminology's code that parse and interprets escape
codes.
Dependencies
------------
- `tytest`, compiled with `-D tests=true` when running `meson`
- a posix shell
Tytest
------
`tytest` is a simple binary that takes escape codes in input and output an md5
sum. This checksum is computed on the state of terminology after parsing and
interpreting those escape codes.
Test cases
----------
Test cases are simple shell scripts that output escape codes.
How to run the tests
--------------------
A shell script called `run_tests.sh` is provided to run all the tests given in
a test results file.
See `run_tests.sh --help` for more information.
Test results file
-----------------
When running a test through `tytest`, an md5 sum is computed. This checksum is
stored with the name of the test in a file called `tests.results`.
If terminology's behaviour changed, then the checksum will change. This will
be noticed by `run_tests.sh` and will show those tests as failed.

View File

@ -0,0 +1,32 @@
#!/bin/sh
# fill space with E
printf '\033#8'
#set color
printf '\033[46;31;3m'
# set top/bottom margins:
printf '\033[10;20r'
# allow left/right margins
printf '\033[?69h'
# set left/right margins:
printf '\033[5;15s'
# fill larger rect with @
printf '\033[64;2;3;23;20$x'
# change color
printf '\033[0m\033[45;32;1m'
# top left corner with [
printf '\033[91;3;5;12;7$x'
# top right corner with ]
printf '\033[93;8;12;13;17$x'
# bottom left corner with (
printf '\033[40;18;3;22;8$x'
# top right corner with )
printf '\033[41;17;14;23;18$x'
# change color
printf '\033[0m\033[44;33;4m'
# one in center with #
printf '\033[35;12;12;12;12$x'
# cursor to 0,0
printf '\033[H'
echo '--------------------------------------------------'

34
tests/decfra-restrict-cursor.sh Executable file
View File

@ -0,0 +1,34 @@
#!/bin/sh
# fill space with E
printf '\033#8'
#set color
printf '\033[46;31;3m'
# restrict cursor
printf '\033[?6h'
# set top/bottom margins:
printf '\033[10;20r'
# allow left/right margins
printf '\033[?69h'
# set left/right margins:
printf '\033[5;15s'
# fill larger rect with @
printf '\033[64;2;3;23;20$x'
# change color
printf '\033[0m\033[45;32;1m'
# top left corner with [
printf '\033[91;3;5;12;7$x'
# top right corner with ]
printf '\033[93;8;12;13;17$x'
# bottom left corner with (
printf '\033[40;18;3;22;8$x'
# top right corner with )
printf '\033[41;17;14;23;18$x'
# change color
printf '\033[0m\033[44;33;4m'
# one in center with #
printf '\033[35;12;12;12;12$x'
# cursor to 0,0
printf '\033[H'
echo '--------------------------------------------------'

169
tests/run_tests.sh Executable file
View File

@ -0,0 +1,169 @@
#!/bin/sh
set -e
set -u
TYTEST="../build/src/bin/tytest"
RESULTS="tests.results"
TESTDIR="."
VERBOSE=0
DEBUG=0
EXIT_ON_FAILURE=0
NB_TESTS=0
OK_TESTS=0
FAILED_TESTS=0
die()
{
echo "$*" 1>&2
exit 1
}
ESC="\033"
GREEN="${ESC}[32m"
BOLD_RED="${ESC}[31;1m"
RESET_COLOR="${ESC}[0m"
ok()
{
TEST=$1
OK_TESTS=$((OK_TESTS + 1))
if [ $VERBOSE -ne 0 ]; then
printf "${GREEN}${RESET_COLOR}\n"
fi
}
failed()
{
TEST=$1
FAILED_TESTS=$((FAILED_TESTS + 1))
if [ $VERBOSE -ne 0 ]; then
printf "${BOLD_RED}${RESET_COLOR}\n"
fi
if [ $EXIT_ON_FAILURE -ne 0 ]; then
exit 1
fi
}
summary()
{
if [ $VERBOSE -ne 0 ]; then
if [ $FAILED_TESTS -ne 0 ]; then
printf "$BOLD_RED=== $OK_TESTS/$NB_TESTS tests passed, $FAILED_TESTS tests failed ===$RESET_COLOR\n"
else
printf "$GREEN=== $OK_TESTS/$NB_TESTS tests passed ===$RESET_COLOR\n"
fi
fi
if [ $FAILED_TESTS -ne 0 ]; then
exit 1
fi
}
show_help()
{
cat <<HELP_EOF
Usage:
$0 [options]
where options are:
-t, --tytest=PATH Path to the tytest binary
-r, --results=PATH Path to the result file
-d, --testdir=PATH Path to the test files
-e, --exitonfailure Exit as soon as a test fails
Misc options:
-v, --verbose Be verbose about what is being done.
--debug Debug tests
-h, --help Show this help.
HELP_EOF
}
while [ $# -gt 0 ]; do
arg=$1
shift
option=$(echo "'$arg'" | cut -d'=' -f1 | tr -d "'")
value=$(echo "'$arg'" | cut -d'=' -f2- | tr -d "'")
if [ x"$value" = x"$option" ]; then
value=""
fi
case $option in
-h|-help|--help)
show_help
exit 0
;;
-v|-verbose|--verbose)
VERBOSE=1
;;
-debug|--debug)
DEBUG=1
;;
-t|-tytest|--tytest)
if [ -z "$value" ]; then
value=$1
shift
fi
TYTEST=$value
;;
-r|-results|--results)
if [ -z "$value" ]; then
value=$1
shift
fi
RESULTS=$value
;;
-d|-testdir|--testdir)
if [ -z "$value" ]; then
value=$1
shift
fi
TESTDIR=$value
;;
-e|-exitonfailure|--exitonfailure)
EXIT_ON_FAILURE=1
;;
*)
echo "Unknown option: $option" 1>&2
;;
esac
done
if [ ! -x "$TYTEST" ]; then
die "Invalid tytest binary file: $TYTEST"
fi
if [ ! -r "$RESULTS" ]; then
die "Invalid results file: $RESULTS"
fi
if [ ! -d "$TESTDIR" ]; then
die "Invalid test directory: $TESTDIR"
fi
if [ $DEBUG -ne 0 ]; then
cat <<EOF
Using:
TYTEST=$TYTEST
RESULTS=$RESULTS
TESTDIR=$TESTDIR
EXIT_ON_FAILURE=$EXIT_ON_FAILURE
EOF
fi
while read -r TEST EXPECTED_CHECKSUM; do
NB_TESTS=$((NB_TESTS + 1))
if [ $VERBOSE -ne 0 ]; then
printf "%s... " "$TEST"
fi
TEST_CHECKSUM=$("$TESTDIR"/"$TEST" | "$TYTEST")
if [ $DEBUG -ne 0 ]; then
printf "(got %s, expected %s) " "$TEST_CHECKSUM" "$EXPECTED_CHECKSUM"
fi
if [ "$TEST_CHECKSUM" = "$EXPECTED_CHECKSUM" ]; then
ok "$TEST"
else
failed "$TEST"
fi
done < "$RESULTS"
summary

2
tests/tests.results Normal file
View File

@ -0,0 +1,2 @@
decfra-no-restrict-cursor.sh 433641ae9b98af9dac2b8da49e1ae321
decfra-restrict-cursor.sh ebc4be442e89e6e70d1783063429c004