Compare commits

..

3 Commits

Author SHA1 Message Date
Ingo Karkat
6a3ddad787 FIX: test-lib: Print differences when test_expect_output fails.
When the command-under-test fails with a non-zero exit code, neither the different exit code nor any output differences are printed. Also, there's a lot of duplication between test_expect_output and test_expect_code_and_output. So, let's fix both by delegating the first to the latter.
2012-04-27 21:58:07 +02:00
Ingo Karkat
35f9c4276c test-lib: Allow expected output with empty lines.
An empty line is used to delimit test commands in test_todo_session. (This wasn't properly reflected in the usage comment, fixed that, too.) This prevents us from testing commands that include empty lines. (Currently, there is no such output in todo.sh, but custom add-ons may have this.)
Instead of forcing the test to filter out the empty lines, extend the syntax to allow empty lines in the expected output by escaping them with a single backslash. (When redirecting via <<EOF, the backslash itself must be escaped = doubled; better use <<'EOF'.)
2012-04-13 16:54:40 +02:00
Ingo Karkat
661dac0cfb test-lib: Avoid eating leading whitespace in expected output.
Currently, todo.sh produces no indented output, so this hasn't affected tests so far. I found this while testing one of my custom actions with the test-lib.
By unsetting IFS, the read command won't strip off leading and trailing whitespace while parsing the test session definition.
2012-04-13 16:47:04 +02:00
3 changed files with 17 additions and 33 deletions

View File

@@ -9,15 +9,8 @@ On failure, it will print each offending line number and line.
' '
. ./test-lib.sh . ./test-lib.sh
backtick_check()
{
sed -n -e 's/\(^\|[ \t]\)#.*//' -e '/`/{' -e '=;p' -e '}' "$@"
}
test_todo_session 'no old-style backtick command substitution' <<EOF test_todo_session 'no old-style backtick command substitution' <<EOF
>>> backtick_check bin/todo.sh >>> sed -n -e 's/\(^\|[ \t]\)#.*//' -e '/\`/{' -e '=;p' -e '}' "$(which todo.sh)"
>>> backtick_check ../../todo.cfg
EOF EOF
test_done test_done

View File

@@ -264,25 +264,7 @@ test_expect_success () {
test_expect_output () { test_expect_output () {
test "$#" = 2 || test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test-expect-output" error "bug in the test script: not 2 parameters to test-expect-output"
if ! test_skip "$@" test_expect_code_and_output 0 "$@"
then
say >&3 "expecting success and output: $2"
test_run_ "$2"
if [ "$?" = 0 -a "$eval_ret" = 0 ]
then
cmp_output=$(test_cmp expect output)
if [ "$?" = 0 ]
then
test_ok_ "$1"
else
test_failure_ "$@" "
$cmp_output"
fi
else
test_failure_ "$@"
fi
fi
echo >&3 ""
} }
test_expect_code_and_output () { test_expect_code_and_output () {
@@ -290,7 +272,11 @@ test_expect_code_and_output () {
error "bug in the test script: not 3 parameters to test-expect-code-and-output" error "bug in the test script: not 3 parameters to test-expect-code-and-output"
if ! test_skip "$@" if ! test_skip "$@"
then then
say >&3 "expecting exit code $1 and output: $3" if [ "$1" = 0 ]; then
say >&3 "expecting success and output: $3"
else
say >&3 "expecting exit code $1 and output: $3"
fi
test_run_ "$3" test_run_ "$3"
if [ "$?" = 0 -a "$eval_ret" = "$1" ] if [ "$?" = 0 -a "$eval_ret" = "$1" ]
then then
@@ -566,14 +552,16 @@ test_tick () {
} }
# Generate and run a series of tests based on a transcript. # Generate and run a series of tests based on a transcript.
# Usage: test_todo_session "description" <<EOF # Usage: test_todo_session "description" <<'EOF'
# >>> command # >>> command
# output1 # output1
# output2 # output2
#
# >>> command # >>> command
# === exit status # === exit status
# output3 # output3 with empty line (must be escaped here)
# output4 # \
# output5
# EOF # EOF
test_todo_session () { test_todo_session () {
test "$#" = 1 || test "$#" = 1 ||
@@ -582,7 +570,7 @@ test_todo_session () {
cmd="" cmd=""
status=0 status=0
> expect > expect
while read -r line while IFS= read -r line
do do
case $line in case $line in
">>> "*) ">>> "*)
@@ -606,6 +594,9 @@ test_todo_session () {
> expect > expect
fi fi
;; ;;
\\)
echo "" >> expect
;;
*) *)
echo "$line" >> expect echo "$line" >> expect
;; ;;

View File

@@ -2,7 +2,7 @@
# Your todo.txt directory # Your todo.txt directory
#export TODO_DIR="/Users/gina/Documents/todo" #export TODO_DIR="/Users/gina/Documents/todo"
export TODO_DIR=$(dirname "$0") export TODO_DIR=`dirname "$0"`
# Your todo/done/report.txt locations # Your todo/done/report.txt locations
export TODO_FILE="$TODO_DIR/todo.txt" export TODO_FILE="$TODO_DIR/todo.txt"