init version.
[bush.git] / tests / 1.gmr / func / func.tests
blobfffe3d2b38aebdc2d01143fc1072179bc795f5b8
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 a()
16         x=$((x - 1))
17         return 5
20 b()
22         x=$((x - 1))
23         a
24         echo a returns $?
25         return 4
28 c()
30         x=$((x - 1))
31         b
32         echo b returns $?
33         return 3
36 d()
38         x=$((x - 1))
39         c
40         echo c returns $?
41         return 2
44 e()
46         d
47         echo d returns $?
48         echo in e
49         x=$((x - 1))
50         return $x
53 f()
55         e
56         echo e returned $?
57         echo x is $x
58         return 0
61 x=30
64 # make sure unsetting a local variable preserves the `local' attribute
65 f1()
67         local zz
68         zz=abcde
69         echo $zz
70         unset zz
71         zz=defghi
72         echo $zz
75 zz=ZZ
76 echo $zz
78 echo $zz
80 unset -f f1
81 f1()
83         return 5
86 ( f1 )
87 echo $?
89 unset -f f1
90 f1()
92         sleep 5
93         return 5
96 f1 &
97 wait
98 echo $?
100 unset -f f1
102 f1()
104         echo $AVAR
105         printenv AVAR
108 AVAR=AVAR
109 echo $AVAR
111 AVAR=foo f1
112 echo $AVAR
114 unset -f f1
115 # make sure subshells can do a `return' if we're executing in a function
116 f1()
118         ( return 5 )
119         status=$?
120         echo $status
121         return $status
125 echo $?
127 declare -F f1   # should print just the name
128 declare -f f1   # should print the definition, too
130 # no functions should be exported, right?
131 declare -xF
132 declare -xf
134 # FUNCNAME tests
135 func2()
137         echo FUNCNAME = $FUNCNAME
140 func()
142         echo before: FUNCNAME = $FUNCNAME
143         func2
144         echo after: FUNCNAME = $FUNCNAME
147 echo before: try to assign to FUNCNAME
148 FUNCNAME=7
150 echo outside: FUNCNAME = $FUNCNAME
151 func
152 echo outside2: FUNCNAME = $FUNCNAME
154 # test exported functions (and cached exportstr)
155 zf()
157         echo this is zf
159 export -f zf
161 ${THIS_SH} -c 'type -t zf'
162 ${THIS_SH} -c 'type zf'
164 ${THIS_SH} ./func1.sub
166 # tests for functions whose bodies are not group commands, with and without
167 # attached redirections
168 ${THIS_SH} ./func2.sub
170 # test for some posix-specific function behavior
171 ${THIS_SH} ./func3.sub
173 # FUNCNEST testing
174 ${THIS_SH} ./func4.sub
176 unset -f myfunction
177 myfunction() {
178     echo "bad shell function redirection"
179 } >> /dev/null
181 myfunction
182 myfunction | cat
184 segv()
186         echo foo | return 5
189 segv
190 echo $?
192 exit 0