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