Skip to content

Commit

Permalink
Added missing tests to ensure - can be used as a long option
Browse files Browse the repository at this point in the history
  • Loading branch information
UrsaDK committed Dec 14, 2024
1 parent 562d75c commit 3d04ca1
Show file tree
Hide file tree
Showing 7 changed files with 226 additions and 0 deletions.
28 changes: 28 additions & 0 deletions test/bats/github_26a.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bats

load ../test_helper
export GETOPTS_LONG_TEST_BIN='getopts_long-longspec_with_dash'

@test "${FEATURE}: toggle, silent" {
compare '-t' \
'---'
}
@test "${FEATURE}: toggle, verbose" {
compare '-t' \
'---'
}

@test "${FEATURE}: double toggle, silent" {
compare '-tt' \
'--- --toggle' \
'/^OPTIND: /d'
expect "${bash_getopts[6]}" == 'OPTIND: 2'
expect "${getopts_long[6]}" == 'OPTIND: 3'
}
@test "${FEATURE}: double toggle, verbose" {
compare '-tt' \
'--- --toggle' \
'/^OPTIND: /d'
expect "${bash_getopts[6]}" == 'OPTIND: 2'
expect "${getopts_long[6]}" == 'OPTIND: 3'
}
30 changes: 30 additions & 0 deletions test/bats/github_26b.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bats

load ../test_helper
export GETOPTS_LONG_TEST_BIN='getopts_long-longspec_with_dash_colon'

@test "${FEATURE}: option, silent" {
compare '-o user_val' \
'--- user_val'
}
@test "${FEATURE}: option, verbose" {
compare '-o user_val' \
'--- user_val'
}

# geopts_long does not support option-value adjoined syntax for long options.
# Thus, let's compare it to bash getopts command that uses an invalid option.
@test "${FEATURE}: option with adjacent value, silent" {
compare '-z' \
'---zz' \
'/^INVALID OPTION/d'
expect "${bash_getopts[1]}" == 'INVALID OPTION -- OPTARG=z'
expect "${getopts_long[1]}" == 'INVALID OPTION -- OPTARG=-zz'
}
@test "${FEATURE}: option with adjacent value, verbose" {
compare '-z' \
'---zz' \
'/-verbose: illegal option --/d'
expect "${bash_getopts[1]}" =~ '-verbose: illegal option -- z'
expect "${getopts_long[1]}" =~ '-verbose: illegal option -- -zz'
}
22 changes: 22 additions & 0 deletions test/bats/github_26c.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bats

load ../test_helper
export GETOPTS_LONG_TEST_BIN='getopts_long-github_26'

@test "${FEATURE}: toggle, silent" {
compare '-t user_arg' \
'---toggle user_arg'
}
@test "${FEATURE}: toggle, verbose" {
compare '-t user_arg' \
'---toggle user_arg'
}

@test "${FEATURE}: option, silent" {
compare '-o user_val' \
'---option user_val'
}
@test "${FEATURE}: option, verbose" {
compare '-o user_val' \
'---option user_val'
}
38 changes: 38 additions & 0 deletions test/bin/getopts_long-github_26-silent
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash

TOPDIR="$(cd "$(dirname "${0}")"/../.. && pwd)"
# shellcheck disable=SC1090
source "${TOPDIR}/lib/getopts_long.bash"

while getopts_long ':to:v: toggle option: variable: -toggle -option:' OPTKEY; do
case ${OPTKEY} in
't'|'toggle'|'-toggle')
printf 'toggle triggered'
;;
'-'|'o'|'option'|'-option')
printf 'option supplied'
;;
'v'|'variable')
printf 'value supplied'
;;
'?')
printf "INVALID OPTION"
;;
':')
printf "MISSING ARGUMENT"
;;
*)
printf "NEVER REACHED"
;;
esac
printf ' -- '
[[ -z "${OPTARG+SET}" ]] && echo 'OPTARG is unset' || echo "OPTARG=${OPTARG}"
done

shift $(( OPTIND - 1 ))

echo "OPTERR: ${OPTERR}"
echo "OPTKEY: ${OPTKEY}"
echo "OPTARG: ${OPTARG}"
echo "OPTIND: ${OPTIND}"
echo "\$@: ${*}"
35 changes: 35 additions & 0 deletions test/bin/getopts_long-github_26-verbose
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env bash

TOPDIR="$(cd "$(dirname "${0}")"/../.. && pwd)"
# shellcheck disable=SC1090
source "${TOPDIR}/lib/getopts_long.bash"

while getopts_long 'to:v: toggle option: variable: -toggle -option:' OPTKEY; do
case ${OPTKEY} in
't'|'toggle'|'-toggle')
printf 'toggle triggered'
;;
'-'|'o'|'option'|'-option')
printf 'option supplied'
;;
'v'|'variable')
printf 'value supplied'
;;
'?')
printf "INVALID OPTION or MISSING ARGUMENT"
;;
*)
printf "NEVER REACHED"
;;
esac
printf ' -- '
[[ -z "${OPTARG+SET}" ]] && echo 'OPTARG is unset' || echo "OPTARG=${OPTARG}"
done

shift $(( OPTIND - 1 ))

echo "OPTERR: ${OPTERR}"
echo "OPTKEY: ${OPTKEY}"
echo "OPTARG: ${OPTARG}"
echo "OPTIND: ${OPTIND}"
echo "\$@: ${*}"
38 changes: 38 additions & 0 deletions test/bin/getopts_long-longspec_with_dash_colon-silent
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash

TOPDIR="$(cd "$(dirname "${0}")"/../.. && pwd)"
# shellcheck disable=SC1090
source "${TOPDIR}/lib/getopts_long.bash"

while getopts_long ':to:v: -: toggle option: variable:' OPTKEY; do
case ${OPTKEY} in
't'|'toggle')
printf 'toggle triggered'
;;
'-'|'o'|'option')
printf 'option supplied'
;;
'v'|'variable')
printf 'value supplied'
;;
'?')
printf "INVALID OPTION"
;;
':')
printf "MISSING ARGUMENT"
;;
*)
printf "NEVER REACHED"
;;
esac
printf ' -- '
[[ -z "${OPTARG+SET}" ]] && echo 'OPTARG is unset' || echo "OPTARG=${OPTARG}"
done

shift $(( OPTIND - 1 ))

echo "OPTERR: ${OPTERR}"
echo "OPTKEY: ${OPTKEY}"
echo "OPTARG: ${OPTARG}"
echo "OPTIND: ${OPTIND}"
echo "\$@: ${*}"
35 changes: 35 additions & 0 deletions test/bin/getopts_long-longspec_with_dash_colon-verbose
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env bash

TOPDIR="$(cd "$(dirname "${0}")"/../.. && pwd)"
# shellcheck disable=SC1090
source "${TOPDIR}/lib/getopts_long.bash"

while getopts_long 'to:v: -: toggle option: variable:' OPTKEY; do
case ${OPTKEY} in
't'|'toggle')
printf 'toggle triggered'
;;
'-'|'o'|'option')
printf 'option supplied'
;;
'v'|'variable')
printf 'value supplied'
;;
'?')
printf "INVALID OPTION or MISSING ARGUMENT"
;;
*)
printf "NEVER REACHED"
;;
esac
printf ' -- '
[[ -z "${OPTARG+SET}" ]] && echo 'OPTARG is unset' || echo "OPTARG=${OPTARG}"
done

shift $(( OPTIND - 1 ))

echo "OPTERR: ${OPTERR}"
echo "OPTKEY: ${OPTKEY}"
echo "OPTARG: ${OPTARG}"
echo "OPTIND: ${OPTIND}"
echo "\$@: ${*}"

0 comments on commit 3d04ca1

Please sign in to comment.