Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GH-26] Added tests to ensure that long options can start with a hyphen character #29

Merged
merged 2 commits into from
Dec 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 "\$@: ${*}"
2 changes: 1 addition & 1 deletion test/test_helper.bash
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,5 @@ compare() {
fi

expect "${getopts_long_output}" == "${bash_getopts_output}"
expect "${getopts_long[0]}" == "${bash_getopts[0]}"
expect "Exit status: ${getopts_long[0]}" == "Exit status: ${bash_getopts[0]}"
}
Loading