# # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # # This test module contains misc compound tests which do not have # their own module yet. # # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # global utility functions compound bracketstat=( integer bopen=0 integer bclose=0 ) function count_brackets { typeset x="$1" typeset c integer i (( bracketstat.bopen=0 , bracketstat.bclose=0 )) for (( i=0 ; i < ${#x} ; i++ )) ; do c="${x:i:1}" [[ "$c" == "(" ]] && (( bracketstat.bopen++ )) [[ "$c" == ")" ]] && (( bracketstat.bclose++ )) done (( bracketstat.bopen != bracketstat.bclose )) && return 1 return 0 } typeset ocwd typeset tmpdir # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_compound_misc.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x function test_compound_indexed_array_init_1 { compound vx=( compound -a nodes=( [4]=( ) ) ) compound vy compound -a vy.nodes=( [4]=( ) ) compound vz compound -a vz.nodes vz.nodes[4]=( ) cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-a* ]] || err_exit "'$cx' lacks -C/-a attribute" cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-a* ]] || err_exit "'$cy' lacks -C/-a attribute" cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-a* ]] || err_exit "'$cz' lacks -C/-a attribute" cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" return 0 } # ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x # this test is the same as test_compound_indexed_array_init_1 but "-a" was replaced with "-A" function test_compound_associative_array_init_1 { compound vx=( compound -A nodes=( [4]=( ) ) ) compound vy compound -A vy.nodes=( [4]=( ) ) compound vz compound -A vz.nodes vz.nodes[4]=( ) cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-A* ]] || err_exit "'$cx' lacks -C/-A attribute" cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-A* ]] || err_exit "'$cy' lacks -C/-A attribute" cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-A* ]] || err_exit "'$cz' lacks -C/-A attribute" cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" return 0 } # run tests test_compound_indexed_array_init_1 test_compound_associative_array_init_1 cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors))