1*12068SRoger.Faulkner@Oracle.COM# 2*12068SRoger.Faulkner@Oracle.COM# CDDL HEADER START 3*12068SRoger.Faulkner@Oracle.COM# 4*12068SRoger.Faulkner@Oracle.COM# The contents of this file are subject to the terms of the 5*12068SRoger.Faulkner@Oracle.COM# Common Development and Distribution License (the "License"). 6*12068SRoger.Faulkner@Oracle.COM# You may not use this file except in compliance with the License. 7*12068SRoger.Faulkner@Oracle.COM# 8*12068SRoger.Faulkner@Oracle.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*12068SRoger.Faulkner@Oracle.COM# or http://www.opensolaris.org/os/licensing. 10*12068SRoger.Faulkner@Oracle.COM# See the License for the specific language governing permissions 11*12068SRoger.Faulkner@Oracle.COM# and limitations under the License. 12*12068SRoger.Faulkner@Oracle.COM# 13*12068SRoger.Faulkner@Oracle.COM# When distributing Covered Code, include this CDDL HEADER in each 14*12068SRoger.Faulkner@Oracle.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*12068SRoger.Faulkner@Oracle.COM# If applicable, add the following below this CDDL HEADER, with the 16*12068SRoger.Faulkner@Oracle.COM# fields enclosed by brackets "[]" replaced with your own identifying 17*12068SRoger.Faulkner@Oracle.COM# information: Portions Copyright [yyyy] [name of copyright owner] 18*12068SRoger.Faulkner@Oracle.COM# 19*12068SRoger.Faulkner@Oracle.COM# CDDL HEADER END 20*12068SRoger.Faulkner@Oracle.COM# 21*12068SRoger.Faulkner@Oracle.COM 22*12068SRoger.Faulkner@Oracle.COM# 23*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24*12068SRoger.Faulkner@Oracle.COM# 25*12068SRoger.Faulkner@Oracle.COM 26*12068SRoger.Faulkner@Oracle.COM# 27*12068SRoger.Faulkner@Oracle.COM# This test module contains misc compound tests which do not have 28*12068SRoger.Faulkner@Oracle.COM# their own module yet. 29*12068SRoger.Faulkner@Oracle.COM# 30*12068SRoger.Faulkner@Oracle.COM# 31*12068SRoger.Faulkner@Oracle.COM 32*12068SRoger.Faulkner@Oracle.COM# test setup 33*12068SRoger.Faulkner@Oracle.COMfunction err_exit 34*12068SRoger.Faulkner@Oracle.COM{ 35*12068SRoger.Faulkner@Oracle.COM print -u2 -n "\t" 36*12068SRoger.Faulkner@Oracle.COM print -u2 -r ${Command}[$1]: "${@:2}" 37*12068SRoger.Faulkner@Oracle.COM (( Errors < 127 && Errors++ )) 38*12068SRoger.Faulkner@Oracle.COM} 39*12068SRoger.Faulkner@Oracle.COMalias err_exit='err_exit $LINENO' 40*12068SRoger.Faulkner@Oracle.COM 41*12068SRoger.Faulkner@Oracle.COMset -o nounset 42*12068SRoger.Faulkner@Oracle.COMCommand=${0##*/} 43*12068SRoger.Faulkner@Oracle.COMinteger Errors=0 44*12068SRoger.Faulkner@Oracle.COM 45*12068SRoger.Faulkner@Oracle.COM# global utility functions 46*12068SRoger.Faulkner@Oracle.COMcompound bracketstat=( 47*12068SRoger.Faulkner@Oracle.COM integer bopen=0 48*12068SRoger.Faulkner@Oracle.COM integer bclose=0 49*12068SRoger.Faulkner@Oracle.COM) 50*12068SRoger.Faulkner@Oracle.COM 51*12068SRoger.Faulkner@Oracle.COMfunction count_brackets 52*12068SRoger.Faulkner@Oracle.COM{ 53*12068SRoger.Faulkner@Oracle.COM typeset x="$1" 54*12068SRoger.Faulkner@Oracle.COM typeset c 55*12068SRoger.Faulkner@Oracle.COM 56*12068SRoger.Faulkner@Oracle.COM integer i 57*12068SRoger.Faulkner@Oracle.COM (( bracketstat.bopen=0 , bracketstat.bclose=0 )) 58*12068SRoger.Faulkner@Oracle.COM 59*12068SRoger.Faulkner@Oracle.COM for (( i=0 ; i < ${#x} ; i++ )) ; do 60*12068SRoger.Faulkner@Oracle.COM c="${x:i:1}" 61*12068SRoger.Faulkner@Oracle.COM [[ "$c" == "(" ]] && (( bracketstat.bopen++ )) 62*12068SRoger.Faulkner@Oracle.COM [[ "$c" == ")" ]] && (( bracketstat.bclose++ )) 63*12068SRoger.Faulkner@Oracle.COM done 64*12068SRoger.Faulkner@Oracle.COM 65*12068SRoger.Faulkner@Oracle.COM (( bracketstat.bopen != bracketstat.bclose )) && return 1 66*12068SRoger.Faulkner@Oracle.COM 67*12068SRoger.Faulkner@Oracle.COM return 0 68*12068SRoger.Faulkner@Oracle.COM} 69*12068SRoger.Faulkner@Oracle.COM 70*12068SRoger.Faulkner@Oracle.COM 71*12068SRoger.Faulkner@Oracle.COMtypeset ocwd 72*12068SRoger.Faulkner@Oracle.COMtypeset tmpdir 73*12068SRoger.Faulkner@Oracle.COM 74*12068SRoger.Faulkner@Oracle.COM# create temporary test directory 75*12068SRoger.Faulkner@Oracle.COMocwd="$PWD" 76*12068SRoger.Faulkner@Oracle.COMtmpdir="$(mktemp -t -d "test_sun_solaris_compound_misc.XXXXXXXX")" || err_exit "Cannot create temporary directory" 77*12068SRoger.Faulkner@Oracle.COM 78*12068SRoger.Faulkner@Oracle.COMcd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } 79*12068SRoger.Faulkner@Oracle.COM 80*12068SRoger.Faulkner@Oracle.COM# ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x 81*12068SRoger.Faulkner@Oracle.COMfunction test_compound_indexed_array_init_1 82*12068SRoger.Faulkner@Oracle.COM{ 83*12068SRoger.Faulkner@Oracle.COM compound vx=( compound -a nodes=( [4]=( ) ) ) 84*12068SRoger.Faulkner@Oracle.COM compound vy 85*12068SRoger.Faulkner@Oracle.COM compound -a vy.nodes=( [4]=( ) ) 86*12068SRoger.Faulkner@Oracle.COM compound vz 87*12068SRoger.Faulkner@Oracle.COM compound -a vz.nodes 88*12068SRoger.Faulkner@Oracle.COM vz.nodes[4]=( ) 89*12068SRoger.Faulkner@Oracle.COM 90*12068SRoger.Faulkner@Oracle.COM cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" 91*12068SRoger.Faulkner@Oracle.COM cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" 92*12068SRoger.Faulkner@Oracle.COM cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" 93*12068SRoger.Faulkner@Oracle.COM [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" 94*12068SRoger.Faulkner@Oracle.COM [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" 95*12068SRoger.Faulkner@Oracle.COM [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" 96*12068SRoger.Faulkner@Oracle.COM 97*12068SRoger.Faulkner@Oracle.COM count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" 98*12068SRoger.Faulkner@Oracle.COM count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" 99*12068SRoger.Faulkner@Oracle.COM count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" 100*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" 101*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" 102*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" 103*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" 104*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" 105*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" 106*12068SRoger.Faulkner@Oracle.COM 107*12068SRoger.Faulkner@Oracle.COM cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-a* ]] || err_exit "'$cx' lacks -C/-a attribute" 108*12068SRoger.Faulkner@Oracle.COM cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-a* ]] || err_exit "'$cy' lacks -C/-a attribute" 109*12068SRoger.Faulkner@Oracle.COM cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-a* ]] || err_exit "'$cz' lacks -C/-a attribute" 110*12068SRoger.Faulkner@Oracle.COM cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" 111*12068SRoger.Faulkner@Oracle.COM cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" 112*12068SRoger.Faulkner@Oracle.COM cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" 113*12068SRoger.Faulkner@Oracle.COM 114*12068SRoger.Faulkner@Oracle.COM return 0 115*12068SRoger.Faulkner@Oracle.COM} 116*12068SRoger.Faulkner@Oracle.COM 117*12068SRoger.Faulkner@Oracle.COM# ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x 118*12068SRoger.Faulkner@Oracle.COM# this test is the same as test_compound_indexed_array_init_1 but "-a" was replaced with "-A" 119*12068SRoger.Faulkner@Oracle.COMfunction test_compound_associative_array_init_1 120*12068SRoger.Faulkner@Oracle.COM{ 121*12068SRoger.Faulkner@Oracle.COM compound vx=( compound -A nodes=( [4]=( ) ) ) 122*12068SRoger.Faulkner@Oracle.COM compound vy 123*12068SRoger.Faulkner@Oracle.COM compound -A vy.nodes=( [4]=( ) ) 124*12068SRoger.Faulkner@Oracle.COM compound vz 125*12068SRoger.Faulkner@Oracle.COM compound -A vz.nodes 126*12068SRoger.Faulkner@Oracle.COM vz.nodes[4]=( ) 127*12068SRoger.Faulkner@Oracle.COM 128*12068SRoger.Faulkner@Oracle.COM cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" 129*12068SRoger.Faulkner@Oracle.COM cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" 130*12068SRoger.Faulkner@Oracle.COM cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" 131*12068SRoger.Faulkner@Oracle.COM [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" 132*12068SRoger.Faulkner@Oracle.COM [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" 133*12068SRoger.Faulkner@Oracle.COM [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" 134*12068SRoger.Faulkner@Oracle.COM 135*12068SRoger.Faulkner@Oracle.COM count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" 136*12068SRoger.Faulkner@Oracle.COM count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" 137*12068SRoger.Faulkner@Oracle.COM count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" 138*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" 139*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" 140*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" 141*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" 142*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" 143*12068SRoger.Faulkner@Oracle.COM count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" 144*12068SRoger.Faulkner@Oracle.COM 145*12068SRoger.Faulkner@Oracle.COM cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-A* ]] || err_exit "'$cx' lacks -C/-A attribute" 146*12068SRoger.Faulkner@Oracle.COM cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-A* ]] || err_exit "'$cy' lacks -C/-A attribute" 147*12068SRoger.Faulkner@Oracle.COM cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-A* ]] || err_exit "'$cz' lacks -C/-A attribute" 148*12068SRoger.Faulkner@Oracle.COM cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" 149*12068SRoger.Faulkner@Oracle.COM cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" 150*12068SRoger.Faulkner@Oracle.COM cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" 151*12068SRoger.Faulkner@Oracle.COM 152*12068SRoger.Faulkner@Oracle.COM return 0 153*12068SRoger.Faulkner@Oracle.COM} 154*12068SRoger.Faulkner@Oracle.COM 155*12068SRoger.Faulkner@Oracle.COM# run tests 156*12068SRoger.Faulkner@Oracle.COMtest_compound_indexed_array_init_1 157*12068SRoger.Faulkner@Oracle.COMtest_compound_associative_array_init_1 158*12068SRoger.Faulkner@Oracle.COM 159*12068SRoger.Faulkner@Oracle.COMcd "${ocwd}" 160*12068SRoger.Faulkner@Oracle.COMrmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". 161*12068SRoger.Faulkner@Oracle.COM 162*12068SRoger.Faulkner@Oracle.COM# tests done 163*12068SRoger.Faulkner@Oracle.COMexit $((Errors)) 164