diff --git a/commands/confirm b/commands/confirm index db20b9324..d3bd5ab27 100755 --- a/commands/confirm +++ b/commands/confirm @@ -139,11 +139,11 @@ function confirm_() ( # cache the first part for the finale local question="${option_question[0]}" - # generate the promot, the body, and body line count + # generate the prompt, the body, and body line count local prompt body body_lines prompt="$question" body="$(echo-lines -- "${option_question[@]:1}")" - body_lines="$(echo-count-lines --stdin <<<"$body")" + body_lines="$(echo-count-lines -- "$body")" if test "$option_mode" = 'positive'; then prompt+=" $(echo-style --blink='(' --blink+green+bold='Y' --blink='/n)')" elif test "$option_mode" = 'negative'; then diff --git a/commands/dorothy b/commands/dorothy index 65165862b..80c89bc83 100755 --- a/commands/dorothy +++ b/commands/dorothy @@ -1754,7 +1754,7 @@ function dorothy() ( } # skip bash v3 test on these - if test "$filename" = 'get-installer'; then + if [[ $filename =~ 'get-installer'|'dorothy-config' ]]; then continue fi diff --git a/commands/echo-count-lines b/commands/echo-count-lines index dfd6b89c3..ec4a79382 100755 --- a/commands/echo-count-lines +++ b/commands/echo-count-lines @@ -4,35 +4,71 @@ function echo_count_lines_test() ( source "$DOROTHY/sources/bash.bash" echo-segment --h1="TEST: $0" + eval-tester --name='args, one line, is inline: default' --stdout='1' \ + -- echo-count-lines -- 'a' + + eval-tester --name='args, one line, is inline: --no-inline' --stdout='0' \ + -- echo-count-lines --no-inline -- 'a' + + eval-tester --name='args, one line, not inline: default' --stdout='1' \ + -- echo-count-lines -- $'a\n' + + eval-tester --name='args, one line, not inline: --no-inline' --stdout='1' \ + -- echo-count-lines --no-inline -- $'a\n' + + eval-tester --name='args, two lines, last is inline: default' --stdout='2' \ + -- echo-count-lines -- $'a\nb' + + eval-tester --name='args, two lines, last is inline: --no-inline' --stdout='1' \ + -- echo-count-lines --no-inline -- $'a\nb' + + eval-tester --name='multi args, one line, is inline: default' --stdout='1' \ + -- echo-count-lines -- 'a' '' + + eval-tester --name='multi args, one line, is inline: --no-inline' --stdout='0' \ + -- echo-count-lines --no-inline -- 'a' '' + + eval-tester --name='multi args, one line, not inline: default' --stdout='1' \ + -- echo-count-lines -- 'a' $'\n' + + eval-tester --name='multi args, one line, not inline: --no-inline' --stdout='1' \ + -- echo-count-lines --no-inline -- 'a' $'\n' + + eval-tester --name='multi args, two lines, last is inline: default' --stdout='2' \ + -- echo-count-lines -- 'a' $'\n' 'b' + + eval-tester --name='multi args, two lines, last is inline: --no-inline' --stdout='1' \ + -- echo-count-lines --no-inline -- 'a' $'\n' 'b' + { printf '%s' 'a' } | eval-tester --name='stdin, one line, is inline: default' --stdout='1' \ - -- echo-count-lines + -- echo-count-lines --stdin { printf '%s' 'a' } | eval-tester --name='stdin, one line, is inline: --no-inline' --stdout='0' \ - -- echo-count-lines --no-inline + -- echo-count-lines --stdin --no-inline { printf '%s' $'a\n' } | eval-tester --name='stdin, one line, not inline: default' --stdout='1' \ - -- echo-count-lines + -- echo-count-lines --stdin { printf '%s' $'a\n' } | eval-tester --name='stdin, one line, not inline: --no-inline' --stdout='1' \ - -- echo-count-lines --no-inline + -- echo-count-lines --stdin --no-inline { printf '%s' $'a\nb' } | eval-tester --name='stdin, two lines, last is inline: default' --stdout='2' \ - -- echo-count-lines + -- echo-count-lines --stdin { printf '%s' $'a\nb' } | eval-tester --name='stdin, two lines, last is inline: --no-inline' --stdout='1' \ - -- echo-count-lines --no-inline + -- echo-count-lines --stdin --no-inline echo-segment --g1="TEST: $0" return 0 @@ -49,28 +85,83 @@ function echo_count_lines() ( Output how many lines in the input. USAGE: + echo-count-lines [...options] [--] ... echo-lines ... | echo-count-lines [...options] OPTIONS: - $(stdinargs_options_help --stdin) + $(stdinargs_options_help --) + + EXAMPLE: + + echo-count-lines -- $'1\n23\n4' + echo-count-lines -- $'1\n2' $'3\n4' '' + + 3 + # exit status: 0 + + echo-count-lines --no-inline -- $'1\n23\n4' + echo-count-lines --no-inline -- $'1\n2' $'3\n4' '' + + 2 + # exit status: 0 + + printf '%s' $'1\n2' | echo-count-lines --stdin + + 2 + # exit status: 0 + + printf '%s' $'1\n2' | echo-count-lines --stdin --no-inline + + 1 + # exit status: 0 + + echo-lines -- 1 2 | echo-count-lines --stdin + + 2 + # exit status: 0 + EOF return 22 # EINVAL 22 Invalid argument } + # process + local item option_inline='yes' args=() + while test "$#" -ne 0; do + item="$1" + shift + case "$item" in + '--no-inline' | '--inline=no') + option_inline='no' + ;; + '--inline' | '--inline=yes') + option_inline='yes' + ;; + *) + args+=("$item") + ;; + esac + done + # ===================================== # Action - local input_line_count=0 + local arg_inputs='' + local stdin_line_count=0 function on_arg { - help 'Use STDIN.' + arg_inputs+="$1" } function on_input { - input_line_count="$((input_line_count + 1))" + stdin_line_count="$((stdin_line_count + 1))" } function on_finish { - print_line "$input_line_count" + local arg_line_count=0 total_line_count + if test -n "$arg_inputs"; then + arg_line_count="$(printf '%s' "$arg_inputs" | echo-count-lines --stdin --inline="$option_inline")" + fi + total_line_count="$((stdin_line_count + arg_line_count))" + print_line "$total_line_count" } - stdinargs --stdin "$@" + stdinargs --inline="$option_inline" "${args[@]}" ) # fire if invoked standalone diff --git a/commands/echo-lines b/commands/echo-lines index c024d80df..5c9fa2642 100755 --- a/commands/echo-lines +++ b/commands/echo-lines @@ -4,39 +4,63 @@ function echo_lines_test() ( source "$DOROTHY/sources/bash.bash" echo-segment --h1="TEST: $0" - eval-tester --name='simple arguments' --stdout=$'a\nb' \ + eval-tester --name='args' --stdout=$'a\nb' \ -- echo-lines -- a b { print_line a print_line b - } | eval-tester --name='simple stdin' --stdout=$'a\nb' \ - -- echo-lines + } | eval-tester --name='stdin' --stdout=$'a\nb' \ + -- echo-lines --stdin { - print_line c - print_line d - } | eval-tester --name='simple stdin and args' --stdout=$'a\nb\nc\nd' \ + print_line e1 + print_line f1 + } | eval-tester --name='args, ignoring stdin' --stdout=$'a\nb\nc\nd' \ -- echo-lines -- a b c d { - print_line c - print_line d - } | eval-tester --name='simple stdin and args quoted' --stdout=$'\'a\'\n\'b\'\n\'c\'\n\'d\'' \ + print_line e2 + print_line f2 + } | eval-tester --name='args, with stdin' --stdout=$'a\nb\nc\nd\ne2\nf2' \ + -- echo-lines --stdin -- a b c d + + { + print_line e3 + print_line f3 + } | eval-tester --name='args quoted, ignoring stdin' --stdout=$'\'a\'\n\'b\'\n\'c\'\n\'d\'' \ -- echo-lines --quoted -- a b c d { - print_line c - print_line d - } | eval-tester --name='simple stdin and args indented' --stdout=$'xa\nxb\nxc\nxd' \ + print_line e4 + print_line f4 + } | eval-tester --name='args quoted, with stdin' --stdout=$'\'a\'\n\'b\'\n\'c\'\n\'d\'\n\'e4\'\n\'f4\'' \ + -- echo-lines --stdin --quoted -- a b c d + + { + print_line e5 + print_line f5 + } | eval-tester --name='args indented, ignoring stdin' --stdout=$'xa\nxb\nxc\nxd' \ -- echo-lines --indent=x -- a b c d { - print_line c - print_line d - } | eval-tester --name='simple stdin and args columns' --stdout=$'a\tb\nc\td' \ + print_line e6 + print_line f6 + } | eval-tester --name='args indented, with stdin' --stdout=$'xa\nxb\nxc\nxd\nxe6\nxf6' \ + -- echo-lines --stdin --indent=x -- a b c d + + { + print_line e7 + print_line f7 + } | eval-tester --name='args columns, ignoring stdin' --stdout=$'a\tb\nc\td' \ -- echo-lines --columns=2 -- a b c d + { + print_line e8 + print_line f8 + } | eval-tester --name='args columns, with stdin' --stdout=$'a\tb\nc\td\ne8\tf8' \ + -- echo-lines --stdin --columns=2 -- a b c d + echo-segment --g1="TEST: $0" return 0 ) diff --git a/commands/get-github-release b/commands/get-github-release index 8666b71a4..4910d2d36 100755 --- a/commands/get-github-release +++ b/commands/get-github-release @@ -17,6 +17,10 @@ function get_github_release_test() ( eval-tester --name='url via tag_name via diy was same as jq' --stdout="$expected" \ -- get-github-release --no-jq --api-url --slug="$slug" --release="$tag_name" + expected="$(get-github-release --jq --api-url --slug="$slug" --release="$release_id")" + eval-tester --name='url via release-id via diy was same as jq' --stdout="$expected" \ + -- get-github-release --no-jq --api-url --slug="$slug" --release="$release_id" + expected="$(get-github-release --jq --assets --slug="$slug" --release="$alias")" eval-tester --name='assets via alias via diy was same as jq' --stdout="$expected" \ -- get-github-release --no-jq --assets --slug="$slug" --release="$alias"