parent
2db4a0e980
commit
826606e0c3
5 changed files with 279 additions and 0 deletions
@ -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. |
@ -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 '--------------------------------------------------' |
@ -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 '--------------------------------------------------' |
@ -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 |
@ -0,0 +1,2 @@ |
||||
decfra-no-restrict-cursor.sh 433641ae9b98af9dac2b8da49e1ae321 |
||||
decfra-restrict-cursor.sh ebc4be442e89e6e70d1783063429c004 |
Loading…
Reference in new issue