tests: Make test writing simpler and add two new tests.
Add a test_todo_session function to test-lib.sh that enables easy recording of input and output from todo.sh (including annotation of exit status for testing error cases). Begin to port and re-factor testsuite.txt into smaller test cases, starting with basic add list functionality and replace functionality. Thanks to Philippe Teuwen <phil@teuwen.org> for feedback and improvements. Signed-off-by: Emil Sit <sit@emilsit.net>
This commit is contained in:
@@ -434,6 +434,60 @@ test_init_todo () {
|
||||
cd "$owd"
|
||||
}
|
||||
|
||||
# Generate and run a series of tests based on a transcript.
|
||||
# Usage: test_todo_session "description" <<EOF
|
||||
# >>> command
|
||||
# output1
|
||||
# output2
|
||||
# >>> command
|
||||
# === exit status
|
||||
# output3
|
||||
# output4
|
||||
# EOF
|
||||
test_todo_session () {
|
||||
test "$#" = 1 ||
|
||||
error "bug in the test script: extra args to test_todo_session"
|
||||
subnum=0
|
||||
cmd=""
|
||||
status=0
|
||||
> expect
|
||||
while read line
|
||||
do
|
||||
case $line in
|
||||
">>> "*)
|
||||
test -z "$cmd" || error "bug in the test script: missing blank line separator in test_todo_session"
|
||||
cmd=${line#>>> }
|
||||
;;
|
||||
"=== "*)
|
||||
status=${line#=== }
|
||||
;;
|
||||
"")
|
||||
if [ ! -z "$cmd" ]; then
|
||||
if [ $status = 0 ]; then
|
||||
test_expect_success "$1 $subnum" "$cmd > output && test_cmp expect output"
|
||||
else
|
||||
test_expect_success "$1 $subnum" "$cmd > output || test $? = $status && test_cmp expect output"
|
||||
fi
|
||||
|
||||
subnum=$(($subnum + 1))
|
||||
cmd=""
|
||||
status=0
|
||||
> expect
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo $line >> expect
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [ ! -z "$cmd" ]; then
|
||||
if [ $status = 0 ]; then
|
||||
test_expect_success "$1 $subnum" "$cmd > output && test_cmp expect output"
|
||||
else
|
||||
test_expect_success "$1 $subnum" "$cmd > output || test $? = $status && test_cmp expect output"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
test_init_todo "$test"
|
||||
# Use -P to resolve symlinks in our working directory so that the cwd
|
||||
|
||||
Reference in New Issue
Block a user