123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- #!/bin/bash
- #shellcheck disable=SC1090
-
- . "$TF_DIR/include/subtest.sh"
- . "$TF_DIR/include/tools.sh"
-
- . "$(sfpath)" || tf_exit_error "failed to init shellfu"
- export PRETTY=plain
- shellfu import arr || tf_exit_error "failed to import arr"
-
-
- tf_enum_subtests() {
- echo arr__fromcmd,inval
- echo arr__fromcmd,c_null
- echo arr__fromcmd,c_zlz
- echo arr__fromcmd,c_lzl
- echo arr__fromcmd,c_lz
- echo arr__fromcmd,c_zl
- echo arr__fromcmd,c_zz
- echo arr__fromcmd,c_zzz
- echo arr__fromcmd,c_l
- echo arr__fromcmd,c_ll
- echo arr__fromcmd,c_lll
- echo arr__has,nsuch
- echo arr__has,c_null
- echo arr__has,w_null_yes
- echo arr__has,w_null_not
- echo arr__has,m_not
- echo arr__has,m_mid
- echo arr__has,m_a
- echo arr__has,m_z
- echo arr__join,nsuch
- echo arr__join,d_null
- echo arr__join,c_null
- echo arr__join,d_mult
- echo arr__join,c_zz
- echo arr__join,c_lll
- echo arr__join,c_z
- echo arr__join,c_l
- }
-
- bashfix() {
- local x=${BASH_VERSION%%.*}
- local yz=${BASH_VERSION#$x.}
- local y=${yz%%.**}
- if test "$x" -eq 4 && test "$y" -lt 4; then
- tr -d "'"
- else
- cat
- fi
- }
-
- cmd_printing() {
- local what=$1
- case $1 in
- c_null) : ;;
- c_z) echo ;;
- c_zz) echo; echo ;;
- c_zzz) echo; echo; echo ;;
- c_l) echo all ;;
- c_ll) echo first; echo last ;;
- c_lll) echo first; echo mid; echo last ;;
- c_zlz) echo; echo mid; echo ;;
- c_lzl) echo first; echo; echo last ;;
- c_lz) echo left; echo ;;
- c_zl) echo; echo right ;;
- esac
- }
-
- mkadecl() {
- local name=$1
- local shape=$2
- echo -n "declare -a $name="
- case $shape in
- inval) echo '()' ;;
- c_null) echo '()' ;;
- c_z) echo '([0]="")' ;;
- c_zz) echo '([0]="" [1]="")' ;;
- c_zzz) echo '([0]="" [1]="" [2]="")' ;;
- c_l) echo '([0]="all")' ;;
- c_ll) echo '([0]="first" [1]="last")' ;;
- c_lll) echo '([0]="first" [1]="mid" [2]="last")' ;;
- c_zlz) echo '([0]="" [1]="mid" [2]="")' ;;
- c_lzl) echo '([0]="first" [1]="" [2]="last")' ;;
- c_lz) echo '([0]="left" [1]="")' ;;
- c_zl) echo '([0]="" [1]="right")' ;;
- esac
- }
-
- getprop() {
- #
- # Make artifact or oracle $what for $TestName
- #
- local what=$1
- case $TestName:$what in
-
- # arr__fromcmd
-
- arr__fromcmd,inval:args) echo bad=array=name; echo echo; echo hello ;;
- arr__fromcmd,c_*:args) echo cout; echo cmd_printing; echo "${TestName#*,}" ;;
-
- arr__fromcmd,*:o_decl) mkadecl cout "${TestName#*,}" ;;
-
- arr__fromcmd,inval:o_es) echo 2 ;;
- arr__fromcmd,*:o_es) echo 0 ;;
-
- # arr__has
-
- arr__has,w_null_yes:a_decl) mkadecl cin c_lzl ;;
- arr__has,w_null_not:a_decl) mkadecl cin c_lll ;;
- arr__has,c_null:a_decl) mkadecl cin c_null ;;
- arr__has,m_not:a_decl) mkadecl cin c_lll ;;
- arr__has,m_mid:a_decl) mkadecl cin c_lll ;;
- arr__has,m_a:a_decl) mkadecl cin c_lll ;;
- arr__has,m_z:a_decl) mkadecl cin c_lll ;;
-
- arr__has,nsuch:args) echo foo; echo nonesuch ;;
- arr__has,c_null:args) echo foo; echo cin ;;
- arr__has,w_null*:args) echo ""; echo cin ;;
- arr__has,m_not:args) echo bar; echo cin ;;
- arr__has,m_mid:args) echo mid; echo cin ;;
- arr__has,m_a:args) echo first; echo cin ;;
- arr__has,m_z:args) echo last; echo cin ;;
-
- arr__has,nsuch:o_es) echo 2 ;;
- arr__has,m_not:o_es) echo 1 ;;
- arr__has,c_null:o_es) echo 1 ;;
- arr__has,w_null_not:o_es) echo 1 ;;
- arr__has,*:o_es) echo 0 ;;
-
- # arr__join
-
- arr__join,nsuch:a_decl) mkadecl cin c_lll ;;
- arr__join,d_null:a_decl) mkadecl cin c_lll ;;
- arr__join,d_mult:a_decl) mkadecl cin c_lll ;;
- arr__join,c_null:a_decl) mkadecl cin c_null ;;
- arr__join,c_zz:a_decl) mkadecl cin c_zz ;;
- arr__join,c_zzz:a_decl) mkadecl cin c_zzz ;;
- arr__join,c_lll:a_decl) mkadecl cin c_lll ;;
- arr__join,c_z:a_decl) mkadecl cin c_z ;;
- arr__join,c_l:a_decl) mkadecl cin c_l ;;
-
- arr__join,nsuch:args) echo oxo; echo nonesuch ;;
- arr__join,d_null:args) echo ""; echo cin ;;
- arr__join,d_mult:args) echo oxo; echo cin ;;
- arr__join,c_null:args) echo .; echo cin ;;
- arr__join,c_zz:args) echo .; echo cin ;;
- arr__join,c_zzz:args) echo .; echo cin ;;
- arr__join,c_lll:args) echo .; echo cin ;;
- arr__join,c_z:args) echo .; echo cin ;;
- arr__join,c_l:args) echo .; echo cin ;;
-
- arr__join,nsuch:o_out) echo -n ;;
- arr__join,d_null:o_out) echo -n firstmidlast ;;
- arr__join,d_mult:o_out) echo -n firstoxomidoxolast ;;
- arr__join,c_null:o_out) echo -n '' ;;
- arr__join,c_zz:o_out) echo -n . ;;
- arr__join,c_zzz:o_out) echo -n .. ;;
- arr__join,c_lll:o_out) echo -n first.mid.last ;;
- arr__join,c_z:o_out) echo -n ;;
- arr__join,c_l:o_out) echo -n all ;;
-
- arr__join,nsuch:o_es) echo 2 ;;
- arr__join,*:o_es) echo 0 ;;
-
- esac
- }
-
- mkresult() {
- local sut
- local ttype
- local args=()
- local cout=()
- local cin=()
- local r_es
- ttype=${TestName##*,}
- sut=${TestName%,$ttype}
- type -t "$sut" >/dev/null || {
- tf_exit_error "no such function: $sut"
- }
- readarray -t args <<<"$(getprop args)"
- tf_debugv args
- case $sut in
- arr__fromcmd)
- cout=()
- "$sut" "${args[@]}"; r_es=$?
- declare -p cout | bashfix
- ;;
- *)
- eval "$(getprop a_decl)"
- "$sut" "${args[@]}"; r_es=$?
- ;;
- esac
- return "$r_es"
- }
-
- mkoracle() {
- case $TestName in
- *,nsuch)
- echo 'no such array: nonesuch' >&2
- ;;
- arr__fromcmd,inval)
- getprop o_decl
- echo 'invalid array name: bad=array=name' >&2
- ;;
- arr__fromcmd,*)
- getprop o_decl
- ;;
- arr__join,*)
- getprop o_out
- ;;
- esac >"oracle/$TestName.out" 2>"oracle/$TestName.err"
- }
-
- tf_do_subtest() {
- local TestName=$1
- local o_es
- mkdir -p oracle result
- o_es=$(getprop o_es)
- mkoracle
- tf_testflt \
- -n "$TestName" \
- -O "oracle/$TestName.out" \
- -E "oracle/$TestName.err" \
- -S "$o_es" \
- "mkresult"
- }
-
- tf_do_subtests
|