Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 717:f4725ad5cd21
farray.sh: type tests for array and alist
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 04 Oct 2024 17:18:14 +0200 |
| parents | 36d953791e0c |
| children | 2502e077d5e9 |
| files | share/local-bsdtools/farray.sh tests/farray-alist.t tests/farray-array.t |
| diffstat | 3 files changed, 142 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh Fri Oct 04 15:45:51 2024 +0200 +++ b/share/local-bsdtools/farray.sh Fri Oct 04 17:18:14 2024 +0200 @@ -357,6 +357,80 @@ #: +#: Internal implementation of typing +#: +#: Args: +#: $1 (str): The name of an object +#: +#: Output (stdout): +#: - array: an array +#: - alist: an alist +#: - null: an empty thing +#: - value: some other shell type (string, number, ...) +#: - unknown: if the name in `$1` was not given +#: +#: Returns: +#: int: 0 always +#: +_farr_type() { + local __farr_type_name + + local __farr_type_token + + __farr_type_name="${1-}" + if [ -n "${__farr_type_name}" ] ; then + eval __farr_type_token=\"\$\{"${__farr_type_name}"+SET\}\" + if [ "${__farr_type_token}" = 'SET' ] ; then + if eval __farr_type_token=\"\$\{"${__farr_type_name}"\}\" ; then + case "${__farr_type_token}" in + '') + printf '%s' 'null';; + "${_farr_array_token_prefix}"*) + printf '%s' 'array';; + "${_farr_alist_token_prefix}"*) + printf '%s' 'alist';; + *) + printf '%s' 'value';; + esac + else + # error in evaluation + printf '%s' 'error' + fi + else + # unset + printf '%s' 'unknown' + fi + else + # no name given + printf '%s' 'unknown' + fi + return 0 +} + + +#: +#: Just an official alias for `_farr_type` +#: +farray_type() { + _farr_type "$@" +} + + +#: +#: Test whether `$1` is an array. +#: +#: Args: +#: $1 (str): The name of an object +#: +#: Returns: +#: int: 0 if `$1` is an array, 1 otherwise +#: +farray_isarray() { + [ "$(_farr_type "$@")" = 'array' ] +} + + +#: #: Create a new array. #: #: It is assumed that the array does not exist already. @@ -1391,6 +1465,28 @@ #: +#: Just an official alias for `_farr_type` +#: +falist_type() { + _farr_type "$@" +} + + +#: +#: Test whether `$1` is an alist. +#: +#: Args: +#: $1 (str): The name of an object +#: +#: Returns: +#: int: 0 if `$1` is an alist, 1 otherwise +#: +falist_isalist() { + [ "$(_farr_type "$@")" = 'alist' ] +} + + +#: #: Create a new alist. #: #: Args:
--- a/tests/farray-alist.t Fri Oct 04 15:45:51 2024 +0200 +++ b/tests/farray-alist.t Fri Oct 04 17:18:14 2024 +0200 @@ -373,3 +373,26 @@ [70] $ falist_destroy LIST $ check_no_alist_artifacts + + +Other Type Checks +================= + + $ falist_type + unknown (no-eol) + $ falist_type __UNKNOWN_VARIABLE__ + unknown (no-eol) + $ testvar='foo' + $ falist_type testvar + value (no-eol) + $ testvar='' + $ falist_type testvar + null (no-eol) + $ falist_isalist testvar + [1] + $ falist_create LIST + $ falist_type LIST + alist (no-eol) + $ falist_isalist LIST + $ falist_destroy LIST + $ check_no_alist_artifacts
--- a/tests/farray-array.t Fri Oct 04 15:45:51 2024 +0200 +++ b/tests/farray-array.t Fri Oct 04 17:18:14 2024 +0200 @@ -1022,3 +1022,26 @@ [70] $ farray_destroy TEST $ check_no_array_artifacts + + +Other Type Checks +================= + + $ farray_type + unknown (no-eol) + $ farray_type __UNKNOWN_VARIABLE__ + unknown (no-eol) + $ testvar='foo' + $ farray_type testvar + value (no-eol) + $ testvar='' + $ farray_type testvar + null (no-eol) + $ farray_isarray testvar + [1] + $ farray_create TEST + $ falist_type TEST + array (no-eol) + $ farray_isarray TEST + $ farray_destroy TEST + $ check_no_array_artifacts
