From d7e111c6d6e2bcf7abaf0b9ffb2c8a0db696e880 Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Mon, 27 Jan 2014 11:22:14 -0500 Subject: [PATCH] Fixes #1 : Long arguments now display in cmdarg_usage() --- cmdarg.sh | 18 ++++++++++-------- tests/test_longopt.sh | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/cmdarg.sh b/cmdarg.sh index facb41c..761abc2 100644 --- a/cmdarg.sh +++ b/cmdarg.sh @@ -107,16 +107,16 @@ function cmdarg_describe fi case ${CMDARG_TYPES[$longopt]} in $CMDARG_TYPE_STRING) - echo "-${opt} v : String. ${CMDARG_DESC[$opt]} $default" + echo "-${opt},--${longopt} v : String. ${CMDARG_DESC[$opt]} $default" ;; $CMDARG_TYPE_BOOLEAN) - echo "-${opt} : Boolean. ${CMDARG_DESC[$opt]} $default" + echo "-${opt},--${longopt} : Boolean. ${CMDARG_DESC[$opt]} $default" ;; $CMDARG_TYPE_ARRAY) - echo "-${opt} v[, ...] : Array. ${CMDARG_DESC[$opt]}. Pass this argument multiple times for multiple values. $default" + echo "-${opt},--${longopt} v[, ...] : Array. ${CMDARG_DESC[$opt]}. Pass this argument multiple times for multiple values. $default" ;; $CMDARG_TYPE_HASH) - echo "-${opt} k=v{, ..} : Hash. ${CMDARG_DESC[$opt]}. Pass this argument multiple times for multiple key/value pairs. $default" + echo "-${opt},--${longopt} k=v{, ..} : Hash. ${CMDARG_DESC[$opt]}. Pass this argument multiple times for multiple key/value pairs. $default" ;; *) echo "Unable to return string description for ${key}; unknown type ${CMDARG_TYPES[$opt]}" >&2 @@ -253,15 +253,17 @@ function cmdarg_parse exit 1 fi + if [[ "$opt" == "h" ]] || [[ "$longopt" == "help" ]]; then + cmdarg_usage + exit 1 + fi + if [[ ${CMDARG_FLAGS[$opt]} -eq $CMDARG_FLAG_WITHARG ]]; then optarg=$1 shift fi - if [ "$opt" == "h" ]; then - cmdarg_usage - exit 1 - elif [ ${CMDARG["${opt}"]+abc} ]; then + if [ ${CMDARG["${opt}"]+abc} ]; then cmdarg_set_opt "${CMDARG[$opt]}" "$optarg" else echo "Unknown argument or invalid value : -${opt} | --${longopt}" >&2 diff --git a/tests/test_longopt.sh b/tests/test_longopt.sh index 9cc66fe..f849c6e 100644 --- a/tests/test_longopt.sh +++ b/tests/test_longopt.sh @@ -28,4 +28,38 @@ function shunittest_longopt_shortopts_still_work [[ "${cmdarg_cfg['long-required-opt']}" == "hooha" ]] || return 1 [[ "${cmdarg_cfg['long-boolean-opt']}" == "true" ]] || return 1 [[ "${cmdarg_cfg['long-required-default-opt']}" == "(nil)" ]] || return 1 -} \ No newline at end of file +} + +function shunittest_longopt_usage_messages_string +{ + cmdarg_purge + cmdarg 'l:' 'long-required-opt' 'Some long opt that requires a value' + output=$(cmdarg_parse -h 2>&1 | grep -- '-l,--long-required-opt v : String. Some long opt that requires a value') + [[ "$output" != "" ]] || return 1 +} + +function shunittest_longopt_usage_messages_boolean +{ + cmdarg_purge + cmdarg 'l' 'long-boolean-opt' 'Some long boolean opt' + output=$(cmdarg_parse -h 2>&1 | grep -- '-l,--long-boolean-opt : Boolean. Some long boolean opt') + [[ "$output" != "" ]] || return 1 +} + +function shunittest_longopt_usage_messages_array +{ + cmdarg_purge + declare -a long_array_opt + cmdarg 'l:[]' 'long_array_opt' 'Some long array opt' + output=$(cmdarg_parse -h 2>&1 | grep -- '-l,--long_array_opt v') + [[ "$output" != "" ]] || return 1 +} + +function shunittest_longopt_usage_messages_hash +{ + cmdarg_purge + declare -A long_hash_opt + cmdarg 'l:{}' 'long_hash_opt' 'Some long hash opt' + output=$(cmdarg_parse -h 2>&1 | grep -- '-l,--long_hash_opt k=v') + [[ "$output" != "" ]] || (cmdarg_parse ; return 1) +}