1# 2# CDDL HEADER START 3# 4# The contents of this file are subject to the terms of the 5# Common Development and Distribution License (the "License"). 6# You may not use this file except in compliance with the License. 7# 8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9# or http://www.opensolaris.org/os/licensing. 10# See the License for the specific language governing permissions 11# and limitations under the License. 12# 13# When distributing Covered Code, include this CDDL HEADER in each 14# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15# If applicable, add the following below this CDDL HEADER, with the 16# fields enclosed by brackets "[]" replaced with your own identifying 17# information: Portions Copyright [yyyy] [name of copyright owner] 18# 19# CDDL HEADER END 20# 21 22# 23# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 24# 25 26 27 28# test setup 29function err_exit 30{ 31 print -u2 -n "\t" 32 print -u2 -r ${Command}[$1]: "${@:2}" 33 (( Errors < 127 && Errors++ )) 34} 35alias err_exit='err_exit $LINENO' 36 37set -o nounset 38Command=${0##*/} 39integer Errors=0 40 41# 42# name reference test #001 43# Note we run this test in a seperate shell to make sure the memory 44# corruption originally reported can be reproduced (which precisely 45# depends on ordering in the testcase) 46( 47cat <<EOF 48 function err_exit 49 { 50 print -u2 -n "\t" 51 print -u2 -r \${Command}[\$1]: "\${@:2}" 52 (( Errors++ )) 53 } 54 alias err_exit='err_exit \$LINENO' 55 56 function function2 57 { 58 nameref v=\$1 59 60 v.x=19 61 v.y=20 62 } 63 64 function function1 65 { 66 typeset compound_var=() 67 68 function2 compound_var 69 70 printf "x=%d, y=%d\n" compound_var.x compound_var.y 71 } 72 73 x="\$(function1)" 74 75 [[ "\$x" == 'x=19, y=20' ]] || err_exit "expected 'x=19, y=20', got '\${x}'" 76 77EOF 78) | ${SHELL} 79(( Errors+=$? )) 80 81 82# 83# name reference test #002 84# Originally derived from the xmldocumenttree1.sh demo which failed 85# with ast-ksh.2009-04-15 since the nodepath+nodesnum nameref calls 86# were removing the compound variable members nodes+nodesnum (caused 87# by a scoping bug) 88# 89( 90cat <<EOF 91 compound xdoc 92 compound -A xdoc.nodes 93 integer xdoc.nodesnum=0 94 95 function test1 96 { 97 nameref doc=xdoc 98 nameref nodepath="doc.nodes" 99 nameref nodesnum="doc.nodesnum" 100 print -v doc 101 } 102 103 test1 104EOF 105) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?" 106 107(( ${ wc -l <<<"${out}" ; } == 4 )) || err_exit "Expected four lines of output, got ${out}" 108(set -o errexit ; read -C tmp <<<"${out}" ; [[ "$(typeset +p tmp.nodes)" == *-A* ]]) || err_exit "missing variable tmp.nodes" 109(set -o errexit ; read -C tmp <<<"${out}" ; [[ -v tmp.nodesnum ]]) || err_exit "missing variable tmp.nodesnum" 110 111 112# 113# name reference test #003a 114# ast-ksh.2009-06-30 failed with the following compound variable/nameref test 115# 116( 117cat <<EOF 118 compound -A addrsp 119 120 nameref sp=addrsp 121 122 sp[14]=( size=1 ) 123 124 if [[ -v sp[19] ]] ; then 125 print "should not happen" 126 else 127 print "Ok" 128 fi 129EOF 130) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?" 131[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}" 132 133 134# 135# name reference test #003b 136# (same as test #003a but uses a function) 137# ast-ksh.2009-06-30 failed with the following compound variable/nameref test 138# 139( 140cat <<EOF 141 compound -A addrsp 142 143 function t1 144 { 145 nameref sp=\$1 146 147 sp[14]=( size=1 ) 148 149 if [[ -v sp[19] ]] ; then 150 print "should not happen" 151 else 152 print "Ok" 153 fi 154 } 155 156 t1 addrsp 157EOF 158) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?" 159[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}" 160 161 162# 163# name reference test #004a 164# (same as #003a but uses an indexed array instead of an associative one) 165# ast-ksh.2009-06-30 failed with the following compound variable/nameref test 166# 167( 168cat <<EOF 169 compound -a addrsp 170 171 nameref sp=addrsp 172 173 sp[14]=( size=1 ) 174 175 if [[ -v sp[19] ]] ; then 176 print "should not happen" 177 else 178 print "Ok" 179 fi 180EOF 181) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?" 182[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}" 183 184 185# 186# name reference test #004b 187# (same as test #004a but uses a function) 188# ast-ksh.2009-06-30 failed with the following compound variable/nameref test 189# 190( 191cat <<EOF 192 compound -a addrsp 193 194 function t1 195 { 196 nameref sp=\$1 197 198 sp[14]=( size=1 ) 199 200 if [[ -v sp[19] ]] ; then 201 print "should not happen" 202 else 203 print "Ok" 204 fi 205 } 206 207 t1 addrsp 208EOF 209) | out=$( ${SHELL} ) || err_exit "shell returned exit code $?" 210[[ "${out}" == "Ok" ]] || err_exit "Expected 'Ok', got ${out}" 211 212 213# tests done 214exit $((Errors)) 215