diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/cli-opts.sh | 14 | ||||
-rwxr-xr-x | tests/ranking.sh | 109 | ||||
-rwxr-xr-x | tests/signals.sh | 13 |
3 files changed, 78 insertions, 58 deletions
diff --git a/tests/cli-opts.sh b/tests/cli-opts.sh index ca2998a..ebaf18e 100755 --- a/tests/cli-opts.sh +++ b/tests/cli-opts.sh @@ -89,7 +89,7 @@ test_valid_options() { printf 'a\nb\nc\n' | \ ./src/remembering \ -p "always-unique-$(uuid)" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 @@ -176,13 +176,13 @@ test_environment_variables_and_precedence() { printf 'a\n' | \ XDG_DATA_HOME="$XDG" ./src/remembering \ -p "$PROFILE" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'a' - assert_stream "\$XDG PROFILE" "$XDG/remembering/$PROFILE" '1:a' + assert_stream "\$XDG PROFILE" "$XDG/remembering/$PROFILE" '1 profile a' N="$LINENO" OUT="$(mktemp)" @@ -192,13 +192,13 @@ test_environment_variables_and_precedence() { printf 'b\n' | \ HOME="$HHOME" XDG_DATA_HOME='' ./src/remembering \ -p "$PROFILE" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'b' - assert_stream "\$HHOME PROFILE" "$HHOME/.local/share/remembering/$PROFILE" '1:b' + assert_stream "\$HHOME PROFILE" "$HHOME/.local/share/remembering/$PROFILE" '1 profile b' N="$LINENO" OUT="$(mktemp)" @@ -209,14 +209,14 @@ test_environment_variables_and_precedence() { printf 'c\n' | \ HOME="$HHOME" XDG_DATA_HOME="$XDG" ./src/remembering \ -p "$PROFILE" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'c' assert_stream \ - "\$XDG and \$HOME PROFILE" "$XDG/remembering/$PROFILE" '1:c' + "\$XDG and \$HOME PROFILE" "$XDG/remembering/$PROFILE" '1 profile c' if [ -e "$HHOME/.local/share/remembering/$PROFILE" ]; then printf "\nERR: The file in \$HHOME/.local should't exist\n" >&2 diff --git a/tests/ranking.sh b/tests/ranking.sh index 6649156..ea4365d 100755 --- a/tests/ranking.sh +++ b/tests/ranking.sh @@ -40,7 +40,7 @@ pick_x() { echo "${2:-$INPUT}" | \ ./src/remembering \ -p "$PROFILE" \ - -c "tee -a /dev/stderr | grep \"$PICK\"" \ + -- sh -c "tee -a /dev/stderr | grep -F \"$PICK\"" \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 @@ -56,26 +56,28 @@ assert_first() { fi } -BASE_PROFILE='0:a -0:b -0:c -0:d -0:e' -BASE_PROFILE_A_PICKED='1:a -0:b -0:c -0:d -0:e' +BASE_PROFILE='0 profile a +0 profile b +0 profile c +0 profile d +0 profile e' +BASE_PROFILE_A_PICKED='1 profile a +0 profile b +0 profile c +0 profile d +0 profile e' assert_profile() { if [ "$(cat "$XDG_DATA_HOME/remembering/$1")" != "$2" ]; then printf '\n%s: Bad profile merge (%s).\n\nExpected:\n%s\nGot\n%s\n' \ "$(ERROR)" "$PROFILE" "$2" "$(cat "$XDG_DATA_HOME/remembering/$1")" >&2 + print_debug_info exit 1 fi } test_picking_first_makes_it_be_always_first() { testing 'picking first makes it be always first' + N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE="always-picks-first-$(uuid)" @@ -83,7 +85,7 @@ test_picking_first_makes_it_be_always_first() { printf 'always-picked\nnever-picked\n' | \ ./src/remembering \ -p "$PROFILE" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 @@ -95,6 +97,7 @@ test_picking_first_makes_it_be_always_first() { test_promoting_values() { testing 'promoting values' + N="$LINENO" PROFILE="promoting-$(uuid)" pick_x h @@ -109,6 +112,7 @@ test_promoting_values() { test_higher_values_loose_tie() { testing 'higher values loose tie' + N="$LINENO" PROFILE="higher-loose-tie-$(uuid)" pick_x f @@ -122,6 +126,7 @@ test_higher_values_loose_tie() { test_smaller_values_win_tie() { testing 'smaller values win tie' + N="$LINENO" PROFILE="smaller-win-tie-$(uuid)" pick_x d @@ -135,6 +140,7 @@ test_smaller_values_win_tie() { test_many_sequential_picks() { testing 'many sequential pick' + N="$LINENO" PROFILE="many-sequential-picks-$(uuid)" pick_x b @@ -181,14 +187,15 @@ s' test_pick_inexisting_value() { testing 'pick inexisting value' + N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE="pick-inexisting-value-$(uuid)" - echo '0:a -0:b -0:c -0:d -0:e' > "$XDG_DATA_HOME/remembering/$PROFILE" + echo '0 profile a +0 profile b +0 profile c +0 profile d +0 profile e' > "$XDG_DATA_HOME/remembering/$PROFILE" INPUT='a b c @@ -198,46 +205,48 @@ e' echo "$INPUT" | \ ./src/remembering \ -p "$PROFILE" \ - -c 'echo f' \ - 1>"$OUT" 2>"$ERR" + -- echo f \ + 1>"$OUT" # 2>"$ERR" STATUS=$? assert_status 0 assert_stdout f - assert_profile "$PROFILE" '1:f -0:a -0:b -0:c -0:d -0:e' - + assert_profile "$PROFILE" '0 profile a +0 profile b +0 profile c +0 profile d +0 profile e +1 profile f' test_ok } test_stdin_profile_merging() { testing 'STDIN/profile merging' + N="$LINENO" PROFILE="stdin-profile-merging-$(uuid)" - echo '0:a -0:b -0:c -0:z' > "$XDG_DATA_HOME/remembering/$PROFILE" + echo '0 profile a +0 profile b +0 profile c +0 profile z' > "$XDG_DATA_HOME/remembering/$PROFILE" INPUT='a b c d e' + EXPECTED='a +b +c +d +e' pick_x a "$INPUT" - if [ "$(cat "$ERR")" != "$INPUT" ]; then - printf '\nERR: Bad profile merge.\n\nExpected:\n%s\nGot:\n%s\n' \ - "$INPUT" "$(cat "$ERR")" >&2 - exit 1 - fi + assert_stderr "$EXPECTED" test_ok } test_stdin_is_larger_than_profile() { testing 'STDIN is larger than profile' + N="$LINENO" PROFILE="stdin-is-larger-than-profile-$(uuid)" - echo '0:a' > "$XDG_DATA_HOME/remembering/$PROFILE" + echo '0 profile a' > "$XDG_DATA_HOME/remembering/$PROFILE" INPUT='a b c @@ -250,6 +259,7 @@ e' test_stdin_is_smaller_than_profile() { testing 'STDIN is smaller than profile' + N="$LINENO" PROFILE="stdin-is-smaller-than-profile-$(uuid)" echo "$BASE_PROFILE" > "$XDG_DATA_HOME/remembering/$PROFILE" INPUT='a' @@ -260,6 +270,7 @@ test_stdin_is_smaller_than_profile() { test_stdin_is_empty() { testing 'STDIN is empty' + N="$LINENO" PROFILE="stdin-is-empty-$(uuid)" echo "$BASE_PROFILE" > "$XDG_DATA_HOME/remembering/$PROFILE" OUT="$(mktemp)" @@ -268,11 +279,12 @@ test_stdin_is_empty() { printf '' | \ ./src/remembering \ -p "$PROFILE" \ - -c 'tee -a /dev/stderr | head -n1' \ + -- sh -c 'tee -a /dev/stderr | head -n1' \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 + assert_stderr '' assert_stdout '' assert_profile "$PROFILE" "$BASE_PROFILE" test_ok @@ -280,6 +292,7 @@ test_stdin_is_empty() { test_profile_does_not_exist() { testing 'profile does not exist' + N="$LINENO" PROFILE="profile-does-not-exist-$(uuid)" INPUT='a b @@ -293,6 +306,7 @@ e' test_profile_is_empty() { testing 'profile is empty' + N="$LINENO" PROFILE="profile-is-empty-$(uuid)" printf '' > "$XDG_DATA_HOME/remembering/$PROFILE" INPUT='a @@ -307,11 +321,12 @@ e' test_names_with_spaces() { testing 'names with spaces' + N="$LINENO" PROFILE="names-with-spaces-$(uuid)" INPUT='a b c d e f' - EXPECTED='1:a b c -0:d e f' + EXPECTED='1 profile a b c +0 profile d e f' pick_x 'a b c' "$INPUT" assert_profile "$PROFILE" "$EXPECTED" test_ok @@ -319,13 +334,14 @@ d e f' test_really_long_list() { testing 'really long list' + N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE="really-long-list-$(uuid)" seq 999999 | \ ./src/remembering \ -p "$PROFILE" \ - -c 'head -n1' \ + -- head -n1 \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 @@ -336,15 +352,16 @@ test_really_long_list() { test_utf8_commands() { testing 'UTF-8 commands' + N="$LINENO" PROFILE="utf8-commands-$(uuid)" INPUT='❤️ á è ŭ 😀' - EXPECTED='0:á -0:è -1:ŭ 😀 -0:❤️' + EXPECTED='0 profile á +0 profile è +1 profile ŭ 😀 +0 profile ❤️' pick_x 'ŭ 😀' "$INPUT" assert_profile "$PROFILE" "$EXPECTED" test_ok @@ -355,7 +372,7 @@ test_promoting_values test_higher_values_loose_tie test_smaller_values_win_tie test_many_sequential_picks -# test_pick_inexisting_value +test_pick_inexisting_value test_stdin_profile_merging test_stdin_is_larger_than_profile test_stdin_is_smaller_than_profile @@ -363,5 +380,5 @@ test_stdin_is_empty test_profile_does_not_exist test_profile_is_empty test_names_with_spaces -# test_really_long_list +test_really_long_list test_utf8_commands diff --git a/tests/signals.sh b/tests/signals.sh index 28b2e89..ff684cc 100755 --- a/tests/signals.sh +++ b/tests/signals.sh @@ -3,19 +3,21 @@ set -u . tests/lib.sh -export XDG_DATA_HOME="$PWD/tests/test-profiles" +export XDG_DATA_HOME="$PWD/tests/test-profiles/signals-$(uuid)" test_status_is_zero_when_command_is_successful() { testing 'status is 0 when command is successful' - printf 'a\n' | ./src/remembering -pp1 -c 'head -n1' 1>/dev/null 2>/dev/null + N="$LINENO" + + printf 'a\n' | ./src/remembering -pp1 -- head -n1 1>/dev/null 2>/dev/null STATUS=$? assert_status 0 - printf '' | ./src/remembering -pp2 -c 'exit 0' 1>/dev/null 2>/dev/null + printf '' | ./src/remembering -pp2 -- true 1>/dev/null 2>/dev/null STATUS=$? assert_status 0 - seq 9 | ./src/remembering -pp3 -c 'grep 7' 1>/dev/null 2>/dev/null + seq 9 | ./src/remembering -pp3 -- grep 7 1>/dev/null 2>/dev/null STATUS=$? assert_status 0 @@ -24,8 +26,9 @@ test_status_is_zero_when_command_is_successful() { test_status_is_forwarded_from_command() { testing 'status is forwarded from command' + N="$LINENO" for status in $(seq 1 125); do - printf '' | ./src/remembering -pp4 -c "exit $status" 1>/dev/null 2>/dev/null + printf '' | ./src/remembering -pp4 -- sh -c "exit $status" 1>/dev/null 2>/dev/null STATUS=$? assert_status "$status" done |