|
@@ -0,0 +1,229 @@
|
|
1
|
+#!/bin/bash
|
|
2
|
+#shellcheck disable=SC1090
|
|
3
|
+
|
|
4
|
+. "$TF_DIR/include/subtest.sh"
|
|
5
|
+. "$TF_DIR/include/tools.sh"
|
|
6
|
+
|
|
7
|
+. "$(sfpath)" || tf_exit_error "failed to init shellfu"
|
|
8
|
+export PRETTY=plain
|
|
9
|
+shellfu import arr || tf_exit_error "failed to import arr"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+tf_enum_subtests() {
|
|
13
|
+ echo arr__fromcmd,inval
|
|
14
|
+ echo arr__fromcmd,c_null
|
|
15
|
+ echo arr__fromcmd,c_zlz
|
|
16
|
+ echo arr__fromcmd,c_lzl
|
|
17
|
+ echo arr__fromcmd,c_lz
|
|
18
|
+ echo arr__fromcmd,c_zl
|
|
19
|
+ echo arr__fromcmd,c_zz
|
|
20
|
+ echo arr__fromcmd,c_zzz
|
|
21
|
+ echo arr__fromcmd,c_l
|
|
22
|
+ echo arr__fromcmd,c_ll
|
|
23
|
+ echo arr__fromcmd,c_lll
|
|
24
|
+ echo arr__has,nsuch
|
|
25
|
+ echo arr__has,c_null
|
|
26
|
+ echo arr__has,w_null_yes
|
|
27
|
+ echo arr__has,w_null_not
|
|
28
|
+ echo arr__has,m_not
|
|
29
|
+ echo arr__has,m_mid
|
|
30
|
+ echo arr__has,m_a
|
|
31
|
+ echo arr__has,m_z
|
|
32
|
+ echo arr__join,nsuch
|
|
33
|
+ echo arr__join,d_null
|
|
34
|
+ echo arr__join,c_null
|
|
35
|
+ echo arr__join,d_mult
|
|
36
|
+ echo arr__join,c_zz
|
|
37
|
+ echo arr__join,c_lll
|
|
38
|
+ echo arr__join,c_z
|
|
39
|
+ echo arr__join,c_l
|
|
40
|
+}
|
|
41
|
+
|
|
42
|
+bashfix() {
|
|
43
|
+ local x=${BASH_VERSION%%.*}
|
|
44
|
+ local yz=${BASH_VERSION#$x.}
|
|
45
|
+ local y=${yz%%.**}
|
|
46
|
+ if test "$x" -eq 4 && test "$y" -lt 4; then
|
|
47
|
+ tr -d "'"
|
|
48
|
+ else
|
|
49
|
+ cat
|
|
50
|
+ fi
|
|
51
|
+}
|
|
52
|
+
|
|
53
|
+cmd_printing() {
|
|
54
|
+ local what=$1
|
|
55
|
+ case $1 in
|
|
56
|
+ c_null) : ;;
|
|
57
|
+ c_z) echo ;;
|
|
58
|
+ c_zz) echo; echo ;;
|
|
59
|
+ c_zzz) echo; echo; echo ;;
|
|
60
|
+ c_l) echo all ;;
|
|
61
|
+ c_ll) echo first; echo last ;;
|
|
62
|
+ c_lll) echo first; echo mid; echo last ;;
|
|
63
|
+ c_zlz) echo; echo mid; echo ;;
|
|
64
|
+ c_lzl) echo first; echo; echo last ;;
|
|
65
|
+ c_lz) echo left; echo ;;
|
|
66
|
+ c_zl) echo; echo right ;;
|
|
67
|
+ esac
|
|
68
|
+}
|
|
69
|
+
|
|
70
|
+mkadecl() {
|
|
71
|
+ local name=$1
|
|
72
|
+ local shape=$2
|
|
73
|
+ echo -n "declare -a $name="
|
|
74
|
+ case $shape in
|
|
75
|
+ inval) echo '()' ;;
|
|
76
|
+ c_null) echo '()' ;;
|
|
77
|
+ c_z) echo '([0]="")' ;;
|
|
78
|
+ c_zz) echo '([0]="" [1]="")' ;;
|
|
79
|
+ c_zzz) echo '([0]="" [1]="" [2]="")' ;;
|
|
80
|
+ c_l) echo '([0]="all")' ;;
|
|
81
|
+ c_ll) echo '([0]="first" [1]="last")' ;;
|
|
82
|
+ c_lll) echo '([0]="first" [1]="mid" [2]="last")' ;;
|
|
83
|
+ c_zlz) echo '([0]="" [1]="mid" [2]="")' ;;
|
|
84
|
+ c_lzl) echo '([0]="first" [1]="" [2]="last")' ;;
|
|
85
|
+ c_lz) echo '([0]="left" [1]="")' ;;
|
|
86
|
+ c_zl) echo '([0]="" [1]="right")' ;;
|
|
87
|
+ esac
|
|
88
|
+}
|
|
89
|
+
|
|
90
|
+getprop() {
|
|
91
|
+ #
|
|
92
|
+ # Make artifact or oracle $what for $TestName
|
|
93
|
+ #
|
|
94
|
+ local what=$1
|
|
95
|
+ case $TestName:$what in
|
|
96
|
+
|
|
97
|
+ # arr__fromcmd
|
|
98
|
+
|
|
99
|
+ arr__fromcmd,inval:args) echo bad=array=name; echo echo; echo hello ;;
|
|
100
|
+ arr__fromcmd,c_*:args) echo cout; echo cmd_printing; echo "${TestName#*,}" ;;
|
|
101
|
+
|
|
102
|
+ arr__fromcmd,*:o_decl) mkadecl cout "${TestName#*,}" ;;
|
|
103
|
+
|
|
104
|
+ arr__fromcmd,inval:o_es) echo 2 ;;
|
|
105
|
+ arr__fromcmd,*:o_es) echo 0 ;;
|
|
106
|
+
|
|
107
|
+ # arr__has
|
|
108
|
+
|
|
109
|
+ arr__has,w_null_yes:a_decl) mkadecl cin c_lzl ;;
|
|
110
|
+ arr__has,w_null_not:a_decl) mkadecl cin c_lll ;;
|
|
111
|
+ arr__has,c_null:a_decl) mkadecl cin c_null ;;
|
|
112
|
+ arr__has,m_not:a_decl) mkadecl cin c_lll ;;
|
|
113
|
+ arr__has,m_mid:a_decl) mkadecl cin c_lll ;;
|
|
114
|
+ arr__has,m_a:a_decl) mkadecl cin c_lll ;;
|
|
115
|
+ arr__has,m_z:a_decl) mkadecl cin c_lll ;;
|
|
116
|
+
|
|
117
|
+ arr__has,nsuch:args) echo foo; echo nonesuch ;;
|
|
118
|
+ arr__has,c_null:args) echo foo; echo cin ;;
|
|
119
|
+ arr__has,w_null*:args) echo ""; echo cin ;;
|
|
120
|
+ arr__has,m_not:args) echo bar; echo cin ;;
|
|
121
|
+ arr__has,m_mid:args) echo mid; echo cin ;;
|
|
122
|
+ arr__has,m_a:args) echo first; echo cin ;;
|
|
123
|
+ arr__has,m_z:args) echo last; echo cin ;;
|
|
124
|
+
|
|
125
|
+ arr__has,nsuch:o_es) echo 2 ;;
|
|
126
|
+ arr__has,m_not:o_es) echo 1 ;;
|
|
127
|
+ arr__has,c_null:o_es) echo 1 ;;
|
|
128
|
+ arr__has,w_null_not:o_es) echo 1 ;;
|
|
129
|
+ arr__has,*:o_es) echo 0 ;;
|
|
130
|
+
|
|
131
|
+ # arr__join
|
|
132
|
+
|
|
133
|
+ arr__join,nsuch:a_decl) mkadecl cin c_lll ;;
|
|
134
|
+ arr__join,d_null:a_decl) mkadecl cin c_lll ;;
|
|
135
|
+ arr__join,d_mult:a_decl) mkadecl cin c_lll ;;
|
|
136
|
+ arr__join,c_null:a_decl) mkadecl cin c_null ;;
|
|
137
|
+ arr__join,c_zz:a_decl) mkadecl cin c_zz ;;
|
|
138
|
+ arr__join,c_zzz:a_decl) mkadecl cin c_zzz ;;
|
|
139
|
+ arr__join,c_lll:a_decl) mkadecl cin c_lll ;;
|
|
140
|
+ arr__join,c_z:a_decl) mkadecl cin c_z ;;
|
|
141
|
+ arr__join,c_l:a_decl) mkadecl cin c_l ;;
|
|
142
|
+
|
|
143
|
+ arr__join,nsuch:args) echo oxo; echo nonesuch ;;
|
|
144
|
+ arr__join,d_null:args) echo ""; echo cin ;;
|
|
145
|
+ arr__join,d_mult:args) echo oxo; echo cin ;;
|
|
146
|
+ arr__join,c_null:args) echo .; echo cin ;;
|
|
147
|
+ arr__join,c_zz:args) echo .; echo cin ;;
|
|
148
|
+ arr__join,c_zzz:args) echo .; echo cin ;;
|
|
149
|
+ arr__join,c_lll:args) echo .; echo cin ;;
|
|
150
|
+ arr__join,c_z:args) echo .; echo cin ;;
|
|
151
|
+ arr__join,c_l:args) echo .; echo cin ;;
|
|
152
|
+
|
|
153
|
+ arr__join,nsuch:o_out) echo -n ;;
|
|
154
|
+ arr__join,d_null:o_out) echo -n firstmidlast ;;
|
|
155
|
+ arr__join,d_mult:o_out) echo -n firstoxomidoxolast ;;
|
|
156
|
+ arr__join,c_null:o_out) echo -n '' ;;
|
|
157
|
+ arr__join,c_zz:o_out) echo -n . ;;
|
|
158
|
+ arr__join,c_zzz:o_out) echo -n .. ;;
|
|
159
|
+ arr__join,c_lll:o_out) echo -n first.mid.last ;;
|
|
160
|
+ arr__join,c_z:o_out) echo -n ;;
|
|
161
|
+ arr__join,c_l:o_out) echo -n all ;;
|
|
162
|
+
|
|
163
|
+ arr__join,nsuch:o_es) echo 2 ;;
|
|
164
|
+ arr__join,*:o_es) echo 0 ;;
|
|
165
|
+
|
|
166
|
+ esac
|
|
167
|
+}
|
|
168
|
+
|
|
169
|
+mkresult() {
|
|
170
|
+ local sut
|
|
171
|
+ local ttype
|
|
172
|
+ local args=()
|
|
173
|
+ local cout=()
|
|
174
|
+ local cin=()
|
|
175
|
+ local r_es
|
|
176
|
+ ttype=${TestName##*,}
|
|
177
|
+ sut=${TestName%,$ttype}
|
|
178
|
+ type -t "$sut" >/dev/null || {
|
|
179
|
+ tf_exit_error "no such function: $sut"
|
|
180
|
+ }
|
|
181
|
+ readarray -t args <<<"$(getprop args)"
|
|
182
|
+ tf_debugv args
|
|
183
|
+ case $sut in
|
|
184
|
+ arr__fromcmd)
|
|
185
|
+ cout=()
|
|
186
|
+ "$sut" "${args[@]}"; r_es=$?
|
|
187
|
+ declare -p cout | bashfix
|
|
188
|
+ ;;
|
|
189
|
+ *)
|
|
190
|
+ eval "$(getprop a_decl)"
|
|
191
|
+ "$sut" "${args[@]}"; r_es=$?
|
|
192
|
+ ;;
|
|
193
|
+ esac
|
|
194
|
+ return "$r_es"
|
|
195
|
+}
|
|
196
|
+
|
|
197
|
+mkoracle() {
|
|
198
|
+ case $TestName in
|
|
199
|
+ *,nsuch)
|
|
200
|
+ echo 'no such array: nonesuch' >&2
|
|
201
|
+ ;;
|
|
202
|
+ arr__fromcmd,inval)
|
|
203
|
+ getprop o_decl
|
|
204
|
+ echo 'invalid array name: bad=array=name' >&2
|
|
205
|
+ ;;
|
|
206
|
+ arr__fromcmd,*)
|
|
207
|
+ getprop o_decl
|
|
208
|
+ ;;
|
|
209
|
+ arr__join,*)
|
|
210
|
+ getprop o_out
|
|
211
|
+ ;;
|
|
212
|
+ esac >"oracle/$TestName.out" 2>"oracle/$TestName.err"
|
|
213
|
+}
|
|
214
|
+
|
|
215
|
+tf_do_subtest() {
|
|
216
|
+ local TestName=$1
|
|
217
|
+ local o_es
|
|
218
|
+ mkdir -p oracle result
|
|
219
|
+ o_es=$(getprop o_es)
|
|
220
|
+ mkoracle
|
|
221
|
+ tf_testflt \
|
|
222
|
+ -n "$TestName" \
|
|
223
|
+ -O "oracle/$TestName.out" \
|
|
224
|
+ -E "oracle/$TestName.err" \
|
|
225
|
+ -S "$o_es" \
|
|
226
|
+ "mkresult"
|
|
227
|
+}
|
|
228
|
+
|
|
229
|
+tf_do_subtests
|