diff options
author | Bob Badour <bbadour@google.com> | 2020-05-19 18:25:11 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-19 18:25:11 +0000 |
commit | 3dac286b93162f3ea66f52c2f4dd094c87fd755b (patch) | |
tree | da581028905318f358769fc7bb6f8aa7373e2fb7 /shflags_private_test.sh | |
parent | ec20e4bbae1bf42b11e9ad1639bdd3b9768b9be9 (diff) | |
parent | 2e0d635a8717e638eab0cd04e2596a90299c5c5c (diff) | |
download | shflags-3dac286b93162f3ea66f52c2f4dd094c87fd755b.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into mymerge am: 2e0d635a87android-r-beta-3android-r-beta-2
Change-Id: I4dcd750b88f1b92613edadbd1ae463ff2f76ed66
Diffstat (limited to 'shflags_private_test.sh')
-rwxr-xr-x | shflags_private_test.sh | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/shflags_private_test.sh b/shflags_private_test.sh new file mode 100755 index 0000000..86e4fdd --- /dev/null +++ b/shflags_private_test.sh @@ -0,0 +1,317 @@ +#! /bin/sh +# vim:et:ft=sh:sts=2:sw=2 +# +# shFlags unit tests for the internal functions. +# +# Copyright 2008-2020 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shflags +# +### ShellCheck (http://www.shellcheck.net/) +# Disable source following. +# shellcheck disable=SC1090,SC1091 +# expr may be antiquated, but it is the only solution in some cases. +# shellcheck disable=SC2003 +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 + +# These variables will be overridden by the test helpers. +stdoutF="${TMPDIR:-/tmp}/STDOUT" +stderrF="${TMPDIR:-/tmp}/STDERR" + +# Load test helpers. +. ./shflags_test_helpers + +testColumns() { + cols=`_flags_columns` + value=`expr "${cols}" : '\([0-9]*\)'` + assertNotNull "unexpected screen width (${cols})" "${value}" +} + +testGetoptVers() { + # shellcheck disable=SC2162 + while read desc mock want; do + assertEquals "${desc}" "$(_flags_getopt_vers "${mock}")" "${want}" + done <<EOF +standard mock_getopt_std ${__FLAGS_GETOPT_VERS_STD} +enhanced mock_getopt_enh ${__FLAGS_GETOPT_VERS_ENH} +EOF +} + +### The mock_getopt_* commands behave like "getopt -lfoo '' --foo" was called. +# macOS 10.13.0. +mock_getopt_std() { echo ' -- --foo'; return 0; } +# Ubuntu 16.04.3 +mock_getopt_enh() { echo ' --foo --'; return 0; } + +testGenOptStr() { + _testGenOptStr '' '' + + # shellcheck disable=SC2034 + DEFINE_boolean bool false 'boolean value' b + _testGenOptStr 'b' 'bool' + + # shellcheck disable=SC2034 + DEFINE_float float 0.0 'float value' f + _testGenOptStr 'bf:' 'bool,float:' + + # shellcheck disable=SC2034 + DEFINE_integer int 0 'integer value' i + _testGenOptStr 'bf:i:' 'bool,float:,int:' + + # shellcheck disable=SC2034 + DEFINE_string str 0 'string value' s + _testGenOptStr 'bf:i:s:' 'bool,float:,int:,str:' + + # shellcheck disable=SC2034 + DEFINE_boolean help false 'show help' h + _testGenOptStr 'bf:i:s:h' 'bool,float:,int:,str:,help' +} + +_testGenOptStr() { + short=$1 + long=$2 + + result=`_flags_genOptStr "${__FLAGS_OPTSTR_SHORT}"` + assertTrue 'short option string generation failed' $? + assertEquals "${short}" "${result}" + + result=`_flags_genOptStr "${__FLAGS_OPTSTR_LONG}"` + assertTrue 'long option string generation failed' $? + assertEquals "${long}" "${result}" +} + +testGetFlagInfo() { + __flags_blah_foobar='1234' + + desc='valid_flag' + if rslt="`_flags_getFlagInfo 'blah' 'foobar'`"; then + assertEquals "${desc}: invalid flag result" "${__flags_blah_foobar}" "${rslt}" + else + fail "${desc}: request for valid flag info failed" + fi + + desc='invalid_flag' + if rslt="`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"`"; then + fail "${desc}: expected invalid flag request to fail" + th_showOutput + else + assertEquals "${desc}: expected an error" "${FLAGS_ERROR}" $? + assertErrorMsg "missing flag info variable" + fi +} + +testItemInList() { + list='this is a test' + # shellcheck disable=SC2162 + while read desc item want; do + if [ "${want}" -eq "${FLAGS_TRUE}" ]; then + continue + fi + got=${FLAGS_TRUE} + if ! _flags_itemInList "${item}" "${list}"; then + got=${FLAGS_FALSE} + fi + assertEquals "${desc}: itemInList(${item})" "${want}" "${got}" + done <<EOF +lead_item this ${FLAGS_TRUE} +middle_item is ${FLAGS_TRUE} +last_item test ${FLAGS_TRUE} +missing_item asdf ${FLAGS_FALSE} +test_partial_te te ${FLAGS_FALSE} +test_partial_es es ${FLAGS_FALSE} +test_partial_st st ${FLAGS_FALSE} +empty_item '' ${FLAGS_FALSE} +EOF + + if _flags_itemInList 'item' ''; then + fail 'empty lists should not match' + fi +} + +testUnderscoreName() { + # shellcheck disable=SC2162 + while read desc name want; do + got=`_flags_underscoreName "${name}"` + assertEquals "${desc}: underscoreName(${name})" "${got}" "${want}" + done <<EOF +with_dashes name-with-dashes name_with_dashes +with_underscores name_with_underscores name_with_underscores +just_alpha_numeric abc123 abc123 +empty "" "" +EOF +} + +testBool() { + # Valid values. + for value in ${TH_BOOL_VALID}; do + got=${FLAGS_TRUE} + if ! _flags_validBool "${value}"; then + got=${FLAGS_FALSE} + fi + assertTrue "valid value (${value}) did not validate" "${got}" + done + + # Invalid values. + for value in ${TH_BOOL_INVALID}; do + got=${FLAGS_FALSE} + if _flags_validBool "${value}"; then + got=${FLAGS_TRUE} + fi + assertFalse "invalid value (${value}) validated" "${got}" + done +} + +_testValidFloat() { + # Valid values. + for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do + got=${FLAGS_TRUE} + if ! _flags_validFloat "${value}"; then + got=${FLAGS_FALSE} + fi + assertTrue "valid value (${value}) did not validate" "${got}" + done + + # Invalid values. + for value in ${TH_FLOAT_INVALID}; do + got=${FLAGS_FALSE} + if _flags_validFloat "${value}"; then + got=${FLAGS_TRUE} + fi + assertFalse "invalid value (${value}) validated" "${got}" + done +} + +testValidFloatBuiltin() { + if ! _flags_useBuiltin; then + startSkipping + fi + _testValidFloat +} + +testValidFloatExpr() { + ( + _flags_useBuiltin() { return "${FLAGS_FALSE}"; } + _testValidFloat + ) +} + +_testValidInt() { + # Valid values. + for value in ${TH_INT_VALID}; do + got=${FLAGS_TRUE} + if ! _flags_validInt "${value}"; then + got=${FLAGS_FALSE} + fi + assertTrue "valid value (${value}) did not validate" "${got}" + done + + # Invalid values. + for value in ${TH_INT_INVALID}; do + got=${FLAGS_FALSE} + if _flags_validInt "${value}"; then + got=${FLAGS_TRUE} + fi + assertFalse "invalid value (${value}) should not validate" "${got}" + done +} + +testValidIntBuiltin() { + if ! _flags_useBuiltin; then + startSkipping + fi + _testValidInt +} + +testValidIntExpr() { + ( + _flags_useBuiltin() { return "${FLAGS_FALSE}"; } + _testValidInt + ) +} + +_testMath() { + if result=`_flags_math 1`; then + assertEquals '1' 1 "${result}" + else + fail '1 failed' + fi + + if result=`_flags_math '1 + 2'`; then + assertEquals '1+2' 3 "${result}" + else + fail '1+2 failed' + fi + + if result=`_flags_math '1 + 2 + 3'`; then + assertEquals '1+2+3' 6 "${result}" + else + fail '1+2+3 failed' + fi + + got=${FLAGS_TRUE} + if ! _flags_math >/dev/null 2>&1; then + got=${FLAGS_FALSE} + fi + assertFalse 'missing math succeeded' "${got}" +} + +testMathBuiltin() { + _flags_useBuiltin || startSkipping + _testMath +} + +testMathExpr() { + ( + _flags_useBuiltin() { return "${FLAGS_FALSE}"; } + _testMath + ) +} + +_testStrlen() { + len=`_flags_strlen` + assertTrue 'missing argument failed' $? + assertEquals 'missing argument' 0 "${len}" + + len=`_flags_strlen ''` + assertTrue 'empty argument failed' $? + assertEquals 'empty argument' 0 "${len}" + + len=`_flags_strlen abc123` + assertTrue 'single-word failed' $? + assertEquals 'single-word' 6 "${len}" + + len=`_flags_strlen 'This is a test'` + assertTrue 'multi-word failed' $? + assertEquals 'multi-word' 14 "${len}" +} + +testStrlenBuiltin() { + _flags_useBuiltin || startSkipping + _testStrlen +} + +testStrlenExpr() { + ( + _flags_useBuiltin() { return "${FLAGS_FALSE}"; } + _testStrlen + ) +} + +oneTimeSetUp() { + th_oneTimeSetUp + + _flags_useBuiltin || \ + th_warn 'Shell built-ins not supported. Some tests will be skipped.' +} + +tearDown() { + flags_reset +} + +# Load and run shUnit2. +# shellcheck disable=SC2034 +[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 +. "${TH_SHUNIT}" |