xref: /onnv-gate/usr/src/lib/libshell/common/tests/statics.sh (revision 12068:08a39a083754)
18462SApril.Chin@Sun.COM########################################################################
28462SApril.Chin@Sun.COM#                                                                      #
38462SApril.Chin@Sun.COM#               This software is part of the ast package               #
4*12068SRoger.Faulkner@Oracle.COM#          Copyright (c) 1982-2010 AT&T Intellectual Property          #
58462SApril.Chin@Sun.COM#                      and is licensed under the                       #
68462SApril.Chin@Sun.COM#                  Common Public License, Version 1.0                  #
78462SApril.Chin@Sun.COM#                    by AT&T Intellectual Property                     #
88462SApril.Chin@Sun.COM#                                                                      #
98462SApril.Chin@Sun.COM#                A copy of the License is available at                 #
108462SApril.Chin@Sun.COM#            http://www.opensource.org/licenses/cpl1.0.txt             #
118462SApril.Chin@Sun.COM#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
128462SApril.Chin@Sun.COM#                                                                      #
138462SApril.Chin@Sun.COM#              Information and Software Systems Research               #
148462SApril.Chin@Sun.COM#                            AT&T Research                             #
158462SApril.Chin@Sun.COM#                           Florham Park NJ                            #
168462SApril.Chin@Sun.COM#                                                                      #
178462SApril.Chin@Sun.COM#                  David Korn <dgk@research.att.com>                   #
188462SApril.Chin@Sun.COM#                                                                      #
198462SApril.Chin@Sun.COM########################################################################
208462SApril.Chin@Sun.COMfunction err_exit2
218462SApril.Chin@Sun.COM{
228462SApril.Chin@Sun.COM	print -u2 -n "\t"
238462SApril.Chin@Sun.COM	print -u2 -r ${Command}[$1]: "${@:2}"
248462SApril.Chin@Sun.COM	(( Errors+=1 ))
258462SApril.Chin@Sun.COM}
268462SApril.Chin@Sun.COM
278462SApril.Chin@Sun.COMfunction testfunc
288462SApril.Chin@Sun.COM{
298462SApril.Chin@Sun.COM	integer line_number=$1
308462SApril.Chin@Sun.COM	typeset cmd="$2"
318462SApril.Chin@Sun.COM	typeset expected_output="$3"
328462SApril.Chin@Sun.COM	typeset output
3310898Sroland.mainz@nrubsig.org
348462SApril.Chin@Sun.COM	output="$($SHELL -c "${cmd}" 2>&1 )"
3510898Sroland.mainz@nrubsig.org
368462SApril.Chin@Sun.COM	[[ "${output}" != "${expected_output}" ]] && err_exit2 ${line_number} "${output} != ${expected_output}"
378462SApril.Chin@Sun.COM}
388462SApril.Chin@Sun.COMalias testfunc='testfunc $LINENO'
398462SApril.Chin@Sun.COMalias err_exit='err_exit2 $LINENO'
408462SApril.Chin@Sun.COM
418462SApril.Chin@Sun.COMCommand=${0##*/}
428462SApril.Chin@Sun.COMinteger Errors=0
438462SApril.Chin@Sun.COM
448462SApril.Chin@Sun.COM# string
458462SApril.Chin@Sun.COMtestfunc '(function l { typeset -S x ;     x+="#" ; $1 && print "$x" ; } ; l false ; l false   ; l true)'  "###"
468462SApril.Chin@Sun.COMtestfunc 'function  l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false ; l false   ; l true'   ">###"
478462SApril.Chin@Sun.COMtestfunc 'function  l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false ; (l false) ; l true'   ">##"
488462SApril.Chin@Sun.COMtestfunc 'function  l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false; ( ulimit -c 0 ; l false) ; l true' ">##"
498462SApril.Chin@Sun.COM
508462SApril.Chin@Sun.COM# integer
518462SApril.Chin@Sun.COMtestfunc '(function l { typeset -S -i x ;  x+=1 ;   $1 && print "$x" ; } ; l false ; l false   ; l true )' "3"
528462SApril.Chin@Sun.COMtestfunc '(function l { typeset -S -i x ;  x+=1 ;   $1 && print "$x" ; } ; l false ; (l false) ; l true )' "2"
538462SApril.Chin@Sun.COM
548462SApril.Chin@Sun.COM# float
558462SApril.Chin@Sun.COMtestfunc '(function l { float -S x=0.5 ;  (( x+=.5 )) ;   $1 && print "$x" ; } ; l false ; l false   ; l true )' "2"
568462SApril.Chin@Sun.COMtestfunc '(function l { float -S x=0.5 ;  (( x+=.5 )) ;   $1 && print "$x" ; } ; l false ; (l false) ; l true )' "1.5"
578462SApril.Chin@Sun.COM
588462SApril.Chin@Sun.COM# compound variable
598462SApril.Chin@Sun.COM[[ "${
608462SApril.Chin@Sun.COM	function l
618462SApril.Chin@Sun.COM	{
628462SApril.Chin@Sun.COM		typeset -S s=( a=0 b=0 )
6310898Sroland.mainz@nrubsig.org
648462SApril.Chin@Sun.COM		(( s.a++, s.b++ ))
6510898Sroland.mainz@nrubsig.org
668462SApril.Chin@Sun.COM		$1 && printf 'a=%d, b=%d\n' s.a s.b
678462SApril.Chin@Sun.COM	}
688462SApril.Chin@Sun.COM	l false ; l false ; l true
698462SApril.Chin@Sun.COM}" != "a=3, b=3" ]] && err_exit "static compound var failed"
708462SApril.Chin@Sun.COM
718462SApril.Chin@Sun.COM
728462SApril.Chin@Sun.COM# array variable
738462SApril.Chin@Sun.COMexpected="helloan elementan elementan element"
748462SApril.Chin@Sun.COMgot=$(
758462SApril.Chin@Sun.COM	function ar
768462SApril.Chin@Sun.COM	{
778462SApril.Chin@Sun.COM		typeset -a -S s=( "hello" )
7810898Sroland.mainz@nrubsig.org
798462SApril.Chin@Sun.COM		s+=( "an element" )
8010898Sroland.mainz@nrubsig.org
818462SApril.Chin@Sun.COM		$1 && { printf '%s' "${s[@]}" ; printf '\n' ; }
828462SApril.Chin@Sun.COM	}
838462SApril.Chin@Sun.COM	ar false ; ar false ; ar true
848462SApril.Chin@Sun.COM)
858462SApril.Chin@Sun.COM[[ $got != $expected ]] && err_exit "static array var failed -- expected '$expected', got '$got'"
868462SApril.Chin@Sun.COM
878462SApril.Chin@Sun.COM
888462SApril.Chin@Sun.COM# Test visibilty of "global" vs. "static" variables. if we have a "static" variable in a
898462SApril.Chin@Sun.COM# function and "unset" it we should see a global variable with the same
908462SApril.Chin@Sun.COM# name, right ?
918462SApril.Chin@Sun.COMinteger hx=5
928462SApril.Chin@Sun.COMfunction test_hx_scope
938462SApril.Chin@Sun.COM{
948462SApril.Chin@Sun.COM	integer -S hx=9
958462SApril.Chin@Sun.COM	$2 && unset hx
968462SApril.Chin@Sun.COM	$1 && printf "hx=%d\n" hx
978462SApril.Chin@Sun.COM}
988462SApril.Chin@Sun.COMtest_hx_scope false false
998462SApril.Chin@Sun.COMtest_hx_scope false false
1008462SApril.Chin@Sun.COM# first test the "unset" call in a $(...) subshell...
1018462SApril.Chin@Sun.COM[[ "$( test_hx_scope true true  )" != "hx=5" ]] && err_exit "can't see global variable hx after unsetting static variable hx"
1028462SApril.Chin@Sun.COM# ... end then test whether the value has changed.
1038462SApril.Chin@Sun.COM[[ "${ test_hx_scope true false }" != "hx=9" ]] && err_exit "hx variable somehow changed"
1048462SApril.Chin@Sun.COM
1058462SApril.Chin@Sun.COMexit $((Errors))
1068462SApril.Chin@Sun.COM
107