110898Sroland.mainz@nrubsig.org#
210898Sroland.mainz@nrubsig.org# CDDL HEADER START
310898Sroland.mainz@nrubsig.org#
410898Sroland.mainz@nrubsig.org# The contents of this file are subject to the terms of the
510898Sroland.mainz@nrubsig.org# Common Development and Distribution License (the "License").
610898Sroland.mainz@nrubsig.org# You may not use this file except in compliance with the License.
710898Sroland.mainz@nrubsig.org#
810898Sroland.mainz@nrubsig.org# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
910898Sroland.mainz@nrubsig.org# or http://www.opensolaris.org/os/licensing.
1010898Sroland.mainz@nrubsig.org# See the License for the specific language governing permissions
1110898Sroland.mainz@nrubsig.org# and limitations under the License.
1210898Sroland.mainz@nrubsig.org#
1310898Sroland.mainz@nrubsig.org# When distributing Covered Code, include this CDDL HEADER in each
1410898Sroland.mainz@nrubsig.org# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1510898Sroland.mainz@nrubsig.org# If applicable, add the following below this CDDL HEADER, with the
1610898Sroland.mainz@nrubsig.org# fields enclosed by brackets "[]" replaced with your own identifying
1710898Sroland.mainz@nrubsig.org# information: Portions Copyright [yyyy] [name of copyright owner]
1810898Sroland.mainz@nrubsig.org#
1910898Sroland.mainz@nrubsig.org# CDDL HEADER END
2010898Sroland.mainz@nrubsig.org#
2110898Sroland.mainz@nrubsig.org
2210898Sroland.mainz@nrubsig.org#
23*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
2410898Sroland.mainz@nrubsig.org#
2510898Sroland.mainz@nrubsig.org
2610898Sroland.mainz@nrubsig.org
2710898Sroland.mainz@nrubsig.org
2810898Sroland.mainz@nrubsig.org# test setup
2910898Sroland.mainz@nrubsig.orgfunction err_exit
3010898Sroland.mainz@nrubsig.org{
3110898Sroland.mainz@nrubsig.org	print -u2 -n "\t"
3210898Sroland.mainz@nrubsig.org	print -u2 -r ${Command}[$1]: "${@:2}"
33*12068SRoger.Faulkner@Oracle.COM	(( Errors < 127 && Errors++ ))
3410898Sroland.mainz@nrubsig.org}
3510898Sroland.mainz@nrubsig.orgalias err_exit='err_exit $LINENO'
3610898Sroland.mainz@nrubsig.org
3710898Sroland.mainz@nrubsig.orgset -o nounset
3810898Sroland.mainz@nrubsig.orgCommand=${0##*/}
3910898Sroland.mainz@nrubsig.orginteger Errors=0
4010898Sroland.mainz@nrubsig.org
4110898Sroland.mainz@nrubsig.org#
4210898Sroland.mainz@nrubsig.org# name reference test #001
4310898Sroland.mainz@nrubsig.org# Note we run this test in a seperate shell to make sure the memory
4410898Sroland.mainz@nrubsig.org# corruption originally reported can be reproduced (which precisely
4510898Sroland.mainz@nrubsig.org# depends on ordering in the testcase)
4610898Sroland.mainz@nrubsig.org(
4710898Sroland.mainz@nrubsig.orgcat <<EOF
4810898Sroland.mainz@nrubsig.org	function err_exit
4910898Sroland.mainz@nrubsig.org	{
5010898Sroland.mainz@nrubsig.org		print -u2 -n "\t"
5110898Sroland.mainz@nrubsig.org		print -u2 -r \${Command}[\$1]: "\${@:2}"
5210898Sroland.mainz@nrubsig.org		(( Errors++ ))
5310898Sroland.mainz@nrubsig.org	}
5410898Sroland.mainz@nrubsig.org	alias err_exit='err_exit \$LINENO'
5510898Sroland.mainz@nrubsig.org
5610898Sroland.mainz@nrubsig.org	function function2
5710898Sroland.mainz@nrubsig.org	{
5810898Sroland.mainz@nrubsig.org		nameref v=\$1
5910898Sroland.mainz@nrubsig.org
6010898Sroland.mainz@nrubsig.org		v.x=19
6110898Sroland.mainz@nrubsig.org		v.y=20
6210898Sroland.mainz@nrubsig.org	}
6310898Sroland.mainz@nrubsig.org
6410898Sroland.mainz@nrubsig.org	function function1
6510898Sroland.mainz@nrubsig.org	{
6610898Sroland.mainz@nrubsig.org		typeset compound_var=()
6710898Sroland.mainz@nrubsig.org
6810898Sroland.mainz@nrubsig.org		function2 compound_var
6910898Sroland.mainz@nrubsig.org
7010898Sroland.mainz@nrubsig.org		printf "x=%d, y=%d\n" compound_var.x compound_var.y 
7110898Sroland.mainz@nrubsig.org	}
7210898Sroland.mainz@nrubsig.org
7310898Sroland.mainz@nrubsig.org	x="\$(function1)"
7410898Sroland.mainz@nrubsig.org
7510898Sroland.mainz@nrubsig.org	[[ "\$x" == 'x=19, y=20' ]] || err_exit "expected 'x=19, y=20', got '\${x}'"
7610898Sroland.mainz@nrubsig.org
7710898Sroland.mainz@nrubsig.orgEOF
7810898Sroland.mainz@nrubsig.org) | ${SHELL}
7910898Sroland.mainz@nrubsig.org(( Errors+=$? ))
8010898Sroland.mainz@nrubsig.org
8110898Sroland.mainz@nrubsig.org
8210898Sroland.mainz@nrubsig.org#
8310898Sroland.mainz@nrubsig.org# name reference test #002
8410898Sroland.mainz@nrubsig.org# Originally derived from the xmldocumenttree1.sh demo which failed
8510898Sroland.mainz@nrubsig.org# with ast-ksh.2009-04-15 since the nodepath+nodesnum nameref calls
8610898Sroland.mainz@nrubsig.org# were removing the compound variable members nodes+nodesnum (caused
8710898Sroland.mainz@nrubsig.org# by a scoping bug)
8810898Sroland.mainz@nrubsig.org#
8910898Sroland.mainz@nrubsig.org(
9010898Sroland.mainz@nrubsig.orgcat <<EOF
9110898Sroland.mainz@nrubsig.org	compound xdoc
9210898Sroland.mainz@nrubsig.org	compound -A xdoc.nodes
9310898Sroland.mainz@nrubsig.org	integer xdoc.nodesnum=0
9410898Sroland.mainz@nrubsig.org
9510898Sroland.mainz@nrubsig.org	function test1
9610898Sroland.mainz@nrubsig.org	{
9710898Sroland.mainz@nrubsig.org        	nameref doc=xdoc
9810898Sroland.mainz@nrubsig.org        	nameref nodepath="doc.nodes"
9910898Sroland.mainz@nrubsig.org        	nameref nodesnum="doc.nodesnum"
10010898Sroland.mainz@nrubsig.org        	print -v doc
10110898Sroland.mainz@nrubsig.org	}
10210898Sroland.mainz@nrubsig.org
10310898Sroland.mainz@nrubsig.org	test1
10410898Sroland.mainz@nrubsig.orgEOF
10510898Sroland.mainz@nrubsig.org) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?"
10610898Sroland.mainz@nrubsig.org
10710898Sroland.mainz@nrubsig.org(( ${ wc -l <<<"${out}" ; } == 4 )) || err_exit "Expected four lines of output, got ${out}"
10810898Sroland.mainz@nrubsig.org(set -o errexit ; read -C tmp <<<"${out}" ; [[ "$(typeset +p tmp.nodes)" == *-A* ]]) || err_exit "missing variable tmp.nodes"
10910898Sroland.mainz@nrubsig.org(set -o errexit ; read -C tmp <<<"${out}" ; [[ -v tmp.nodesnum                   ]]) || err_exit "missing variable tmp.nodesnum"
11010898Sroland.mainz@nrubsig.org
11110898Sroland.mainz@nrubsig.org
11210898Sroland.mainz@nrubsig.org#
11310898Sroland.mainz@nrubsig.org# name reference test #003a
11410898Sroland.mainz@nrubsig.org# ast-ksh.2009-06-30 failed with the following compound variable/nameref test
11510898Sroland.mainz@nrubsig.org#
11610898Sroland.mainz@nrubsig.org(
11710898Sroland.mainz@nrubsig.orgcat <<EOF
11810898Sroland.mainz@nrubsig.org	compound -A addrsp
11910898Sroland.mainz@nrubsig.org
12010898Sroland.mainz@nrubsig.org	nameref sp=addrsp
12110898Sroland.mainz@nrubsig.org        
12210898Sroland.mainz@nrubsig.org	sp[14]=( size=1 )
12310898Sroland.mainz@nrubsig.org        
12410898Sroland.mainz@nrubsig.org	if [[ -v sp[19] ]] ; then
12510898Sroland.mainz@nrubsig.org        	print "should not happen"
12610898Sroland.mainz@nrubsig.org	else
12710898Sroland.mainz@nrubsig.org        	print "Ok"
12810898Sroland.mainz@nrubsig.org	fi
12910898Sroland.mainz@nrubsig.orgEOF
13010898Sroland.mainz@nrubsig.org) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?"
13110898Sroland.mainz@nrubsig.org[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}"
13210898Sroland.mainz@nrubsig.org
13310898Sroland.mainz@nrubsig.org
13410898Sroland.mainz@nrubsig.org#
13510898Sroland.mainz@nrubsig.org# name reference test #003b
13610898Sroland.mainz@nrubsig.org# (same as test #003a but uses a function)
13710898Sroland.mainz@nrubsig.org# ast-ksh.2009-06-30 failed with the following compound variable/nameref test
13810898Sroland.mainz@nrubsig.org#
13910898Sroland.mainz@nrubsig.org(
14010898Sroland.mainz@nrubsig.orgcat <<EOF
14110898Sroland.mainz@nrubsig.org	compound -A addrsp
14210898Sroland.mainz@nrubsig.org	
14310898Sroland.mainz@nrubsig.org	function t1
14410898Sroland.mainz@nrubsig.org	{
14510898Sroland.mainz@nrubsig.org		nameref sp=\$1
14610898Sroland.mainz@nrubsig.org        
14710898Sroland.mainz@nrubsig.org		sp[14]=( size=1 )
14810898Sroland.mainz@nrubsig.org        
14910898Sroland.mainz@nrubsig.org		if [[ -v sp[19] ]] ; then
15010898Sroland.mainz@nrubsig.org        		print "should not happen"
15110898Sroland.mainz@nrubsig.org		else
15210898Sroland.mainz@nrubsig.org        		print "Ok"
15310898Sroland.mainz@nrubsig.org		fi
15410898Sroland.mainz@nrubsig.org	}
15510898Sroland.mainz@nrubsig.org
15610898Sroland.mainz@nrubsig.org	t1 addrsp
15710898Sroland.mainz@nrubsig.orgEOF
15810898Sroland.mainz@nrubsig.org) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?"
15910898Sroland.mainz@nrubsig.org[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}"
16010898Sroland.mainz@nrubsig.org
16110898Sroland.mainz@nrubsig.org
16210898Sroland.mainz@nrubsig.org#
16310898Sroland.mainz@nrubsig.org# name reference test #004a
16410898Sroland.mainz@nrubsig.org# (same as #003a but uses an indexed array instead of an associative one)
16510898Sroland.mainz@nrubsig.org# ast-ksh.2009-06-30 failed with the following compound variable/nameref test
16610898Sroland.mainz@nrubsig.org#
16710898Sroland.mainz@nrubsig.org(
16810898Sroland.mainz@nrubsig.orgcat <<EOF
16910898Sroland.mainz@nrubsig.org	compound -a addrsp
17010898Sroland.mainz@nrubsig.org
17110898Sroland.mainz@nrubsig.org	nameref sp=addrsp
17210898Sroland.mainz@nrubsig.org        
17310898Sroland.mainz@nrubsig.org	sp[14]=( size=1 )
17410898Sroland.mainz@nrubsig.org        
17510898Sroland.mainz@nrubsig.org	if [[ -v sp[19] ]] ; then
17610898Sroland.mainz@nrubsig.org        	print "should not happen"
17710898Sroland.mainz@nrubsig.org	else
17810898Sroland.mainz@nrubsig.org        	print "Ok"
17910898Sroland.mainz@nrubsig.org	fi
18010898Sroland.mainz@nrubsig.orgEOF
18110898Sroland.mainz@nrubsig.org) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?"
18210898Sroland.mainz@nrubsig.org[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}"
18310898Sroland.mainz@nrubsig.org
18410898Sroland.mainz@nrubsig.org
18510898Sroland.mainz@nrubsig.org#
18610898Sroland.mainz@nrubsig.org# name reference test #004b
18710898Sroland.mainz@nrubsig.org# (same as test #004a but uses a function)
18810898Sroland.mainz@nrubsig.org# ast-ksh.2009-06-30 failed with the following compound variable/nameref test
18910898Sroland.mainz@nrubsig.org#
19010898Sroland.mainz@nrubsig.org(
19110898Sroland.mainz@nrubsig.orgcat <<EOF
19210898Sroland.mainz@nrubsig.org	compound -a addrsp
19310898Sroland.mainz@nrubsig.org	
19410898Sroland.mainz@nrubsig.org	function t1
19510898Sroland.mainz@nrubsig.org	{
19610898Sroland.mainz@nrubsig.org		nameref sp=\$1
19710898Sroland.mainz@nrubsig.org        
19810898Sroland.mainz@nrubsig.org		sp[14]=( size=1 )
19910898Sroland.mainz@nrubsig.org        
20010898Sroland.mainz@nrubsig.org		if [[ -v sp[19] ]] ; then
20110898Sroland.mainz@nrubsig.org        		print "should not happen"
20210898Sroland.mainz@nrubsig.org		else
20310898Sroland.mainz@nrubsig.org        		print "Ok"
20410898Sroland.mainz@nrubsig.org		fi
20510898Sroland.mainz@nrubsig.org	}
20610898Sroland.mainz@nrubsig.org
20710898Sroland.mainz@nrubsig.org	t1 addrsp
20810898Sroland.mainz@nrubsig.orgEOF
20910898Sroland.mainz@nrubsig.org) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?"
21010898Sroland.mainz@nrubsig.org[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}"
21110898Sroland.mainz@nrubsig.org
21210898Sroland.mainz@nrubsig.org
21310898Sroland.mainz@nrubsig.org# tests done
21410898Sroland.mainz@nrubsig.orgexit $((Errors))
215