--- Hi I fixed some of the issues pointed out by Mattias and made the tests runnable from the Makefile. Let me know if there is a chance that we can get some shell-based testing like this into sbase. Makefile | 6 +++++- tests/dirname.test | 20 ++++++++++++++++++++ tests/runalltests | 5 +++++ tests/test-common.sh | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100755 tests/dirname.test create mode 100755 tests/runalltests create mode 100644 tests/test-common.sh diff --git a/Makefile b/Makefile index 0e421e7..9ddd873 100644 --- a/Makefile +++ b/Makefile _AT_@ -274,4 +274,8 @@ clean: rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz rm -f getconf.h -.PHONY: all install uninstall dist sbase-box sbase-box-install sbase-box-uninstall clean +testing: + _AT_cd tests/; \ + ./runalltests + +.PHONY: all install uninstall dist sbase-box sbase-box-install sbase-box-uninstall clean testing diff --git a/tests/dirname.test b/tests/dirname.test new file mode 100755 index 0000000..3bc45ca --- /dev/null +++ b/tests/dirname.test _AT_@ -0,0 +1,20 @@ +#!/bin/sh + +. ./test-common.sh + +# "test name" "command to execute" "expected output" +check_stdout "dirname-noarg" "../dirname" "" && \ +check_stderr "dirname-noarg-stderr" "../dirname" "usage: ../dirname path\n" && \ +check_stdout "dirname-non-existing" "../dirname a b c" "" && \ +check_stdout "dirname-slash" "../dirname /" "/\n" && \ +check_stdout "dirname-dashes-slash" "../dirname -- /" "/\n" && \ +check_stdout "dirname-dashes-slash-a" "../dirname -- /a" "/\n" && \ +check_stdout "dirname-doublequotes" "../dirname \"\"" ".\n" && \ +check_stdout "dirname-slashes" "../dirname ///" "/\n" && \ +check_stdout "dirname-a/b" "../dirname a/b" "a\n" && \ +check_stdout "dirname-a/b/" "../dirname a/b/" "a\n" && \ +check_stdout "dirname-a/b//" "../dirname a/b//" "a\n" && \ +check_stdout "dirname-a" "../dirname a" ".\n" && \ +check_stdout "dirname-a/" "../dirname a/" ".\n" && \ +check_stdout "dirname-/a/b/c" "../dirname /a/b/c" "/a/b\n" && \ +check_stdout "dirname-//a/b/c" "../dirname //a/b/c" "//a/b\n" diff --git a/tests/runalltests b/tests/runalltests new file mode 100755 index 0000000..4cf7933 --- /dev/null +++ b/tests/runalltests _AT_@ -0,0 +1,5 @@ +#!/bin/sh + +for testfile in $(find -name '*.test' -type f); do + $testfile +done diff --git a/tests/test-common.sh b/tests/test-common.sh new file mode 100644 index 0000000..e12fc78 --- /dev/null +++ b/tests/test-common.sh _AT_@ -0,0 +1,37 @@ +check_output() { + testname=$1 + cmdtorun=$2 + expectedOutput=$3 + usestdout=$4 + expOutFile=$(mktemp) + actualOutFile=$(mktemp) + ret=0 + + printf "$expectedOutput" > $expOutFile + if [ $usestdout -eq 1 ]; then + eval $cmdtorun > $actualOutFile 2> /dev/null + else + eval $cmdtorun 2> $actualOutFile 1> /dev/null + fi + + cmp $expOutFile $actualOutFile 2>&1 > /dev/null + if [ $? -eq 1 ]; then + printf "$testname:\n" + printf "\tWanted:\n" + cat $expOutFile + printf "\n\tGot:\n" + cat $actualOutFile + ret=1 + fi + + rm $expOutFile $actualOutFile + return $ret +} + +check_stdout() { + check_output "$1" "$2" "$3" 1 +} + +check_stderr() { + check_output "$1" "$2" "$3" 0 +} -- 2.18.0Received on Sun Sep 09 2018 - 16:57:16 CEST
This archive was generated by hypermail 2.3.0 : Sun Sep 09 2018 - 17:00:24 CEST