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"