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