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 31 deletions

View File

@@ -14,7 +14,6 @@ notice the sunflowers +sunflowers @outside @garden +shared +landscape
(C) 2012-02-28 @outside mow the lawn
x 2012-02-21 +herbs @oriental buy spices
x 2012-02-28 2012-02-21 +slack @home watch tv
2012-02-28 +herbs buy cinnamon @grocer
EOF
test_todo_completion 'simple task' 'todo.sh list 1' '"1 # simple task"'
test_todo_completion 'remove projects and contents from task' 'todo.sh list 2' '"2 # notice the sunflowers"'
@@ -22,6 +21,5 @@ test_todo_completion 'keep priority' 'todo.sh list 3' '"3 # (B) smell the flower
test_todo_completion 'keep priority and remove timestamp' 'todo.sh list 4' '"4 # (C) mow the lawn"'
test_todo_completion 'keep done marker and remove done date' 'todo.sh list 5' '"5 # x buy spices"'
test_todo_completion 'keep done marker and remove timestamp and done date' 'todo.sh list 6' '"6 # x watch tv"'
test_todo_completion 'remove add date' 'todo.sh list 7' '"7 # buy cinnamon"'
test_done

View File

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

View File

@@ -58,8 +58,8 @@ _todo()
# a safety check of the ls action output.
local todo=$( \
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
sed -e 's/^ *[0-9]\{1,\} //' -e 's/^\((.) \)\{0,1\}[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
-e 's/^\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
sed -e 's/^ *[0-9]\{1,\} //' -e 's/\((.) \)[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
-e 's/\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
-e 's/[[:space:]]*$//' \
-e '1q' \
)
@@ -85,9 +85,6 @@ complete -F _todo todo.sh
# If you define an alias (e.g. "t") to todo.sh, you need to explicitly enable
# completion for it, too:
#complete -F _todo t
# It is recommended to put this line next to your alias definition in your
# ~/.bashrc (or wherever else you're defining your alias). If you simply
# uncomment it here, you will need to redo this on every todo.txt update!
# If you have renamed the todo.sh executable, or if it is not accessible through
# PATH, you need to add and use a wrapper completion function, like this: