1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4b30d1939SAndy Fiddaman# Copyright (c) 1982-2012 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# David Korn <dgk@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchinfunction err_exit 21da2e3ebdSchin{ 22da2e3ebdSchin print -u2 -n "\t" 23da2e3ebdSchin print -u2 -r ${Command}[$1]: "${@:2}" 24da2e3ebdSchin let Errors+=1 25da2e3ebdSchin} 26da2e3ebdSchinalias err_exit='err_exit $LINENO' 27da2e3ebdSchin 28da2e3ebdSchinCommand=${0##*/} 29da2e3ebdSchininteger Errors=0 3034f9b3eeSRoland Mainz 3134f9b3eeSRoland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 3234f9b3eeSRoland Mainztrap "cd /; rm -rf $tmp" EXIT 3334f9b3eeSRoland Mainz 34da2e3ebdSchinr=readonly u=Uppercase l=Lowercase i=22 i8=10 L=abc L5=def uL5=abcdef xi=20 35da2e3ebdSchinx=export t=tagged H=hostname LZ5=026 RZ5=026 Z5=123 lR5=ABcdef R5=def n=l 36da2e3ebdSchinfor option in u l i i8 L L5 LZ5 RZ5 Z5 r x H t R5 uL5 lR5 xi n 37da2e3ebdSchindo typeset -$option $option 38da2e3ebdSchindone 39da2e3ebdSchin(r=newval) 2> /dev/null && err_exit readonly attribute fails 40da2e3ebdSchini=i+5 41da2e3ebdSchinif ((i != 27)) 42da2e3ebdSchinthen err_exit integer attributes fails 43da2e3ebdSchinfi 44da2e3ebdSchinif [[ $i8 != 8#12 ]] 45da2e3ebdSchinthen err_exit integer base 8 fails 46da2e3ebdSchinfi 47da2e3ebdSchinif [[ $u != UPPERCASE ]] 48da2e3ebdSchinthen err_exit uppercase fails 49da2e3ebdSchinfi 50da2e3ebdSchinif [[ $l != lowercase ]] 51da2e3ebdSchinthen err_exit lowercase fails 52da2e3ebdSchinfi 53da2e3ebdSchinif [[ $n != lowercase ]] 54da2e3ebdSchinthen err_exit reference variables fail 55da2e3ebdSchinfi 56da2e3ebdSchinif [[ t=tagged != $(typeset -t) ]] 57da2e3ebdSchinthen err_exit tagged fails 58da2e3ebdSchinfi 59da2e3ebdSchinif [[ t != $(typeset +t) ]] 60da2e3ebdSchinthen err_exit tagged fails 61da2e3ebdSchinfi 62da2e3ebdSchinif [[ $Z5 != 00123 ]] 63da2e3ebdSchinthen err_exit zerofill fails 64da2e3ebdSchinfi 65da2e3ebdSchinif [[ $RZ5 != 00026 ]] 66da2e3ebdSchinthen err_exit right zerofill fails 67da2e3ebdSchinfi 68da2e3ebdSchinL=12345 69da2e3ebdSchinif [[ $L != 123 ]] 70da2e3ebdSchinthen err_exit leftjust fails 71da2e3ebdSchinfi 72da2e3ebdSchinif [[ $L5 != "def " ]] 73da2e3ebdSchinthen err_exit leftjust fails 74da2e3ebdSchinfi 75da2e3ebdSchinif [[ $uL5 != ABCDE ]] 76da2e3ebdSchinthen err_exit leftjust uppercase fails 77da2e3ebdSchinfi 78da2e3ebdSchinif [[ $lR5 != bcdef ]] 79da2e3ebdSchinthen err_exit rightjust fails 80da2e3ebdSchinfi 81da2e3ebdSchinif [[ $R5 != " def" ]] 82da2e3ebdSchinthen err_exit rightjust fails 83da2e3ebdSchinfi 84da2e3ebdSchinif [[ $($SHELL -c 'echo $x') != export ]] 85da2e3ebdSchinthen err_exit export fails 86da2e3ebdSchinfi 87da2e3ebdSchinif [[ $($SHELL -c 'xi=xi+4;echo $xi') != 24 ]] 88da2e3ebdSchinthen err_exit export attributes fails 89da2e3ebdSchinfi 90da2e3ebdSchinx=$(foo=abc $SHELL <<! 91da2e3ebdSchin foo=bar 92da2e3ebdSchin $SHELL -c 'print \$foo' 93da2e3ebdSchin! 94da2e3ebdSchin) 95da2e3ebdSchinif [[ $x != bar ]] 96da2e3ebdSchinthen err_exit 'environment variables require re-export' 97da2e3ebdSchinfi 98da2e3ebdSchin(typeset + ) > /dev/null 2>&1 || err_exit 'typeset + not working' 99da2e3ebdSchin(typeset -L-5 buf="A" 2>/dev/null) 100da2e3ebdSchinif [[ $? == 0 ]] 101da2e3ebdSchinthen err_exit 'typeset allows negative field for left/right adjust' 102da2e3ebdSchinfi 103da2e3ebdSchina=b 104da2e3ebdSchinreadonly $a=foo 105da2e3ebdSchinif [[ $b != foo ]] 106da2e3ebdSchinthen err_exit 'readonly $a=b not working' 107da2e3ebdSchinfi 108da2e3ebdSchinif [[ $(export | grep '^PATH=') != PATH=* ]] 109da2e3ebdSchinthen err_exit 'export not working' 110da2e3ebdSchinfi 111da2e3ebdSchinpicture=( 112da2e3ebdSchin bitmap=/fruit 113da2e3ebdSchin size=(typeset -E x=2.5) 114da2e3ebdSchin) 115da2e3ebdSchinstring="$(print $picture)" 116da2e3ebdSchinif [[ "${string}" != *'size=( typeset -E'* ]] 117da2e3ebdSchinthen err_exit 'print of compound exponential variable not working' 118da2e3ebdSchinfi 119da2e3ebdSchinsz=(typeset -E y=2.2) 120da2e3ebdSchinstring="$(print $sz)" 121da2e3ebdSchinif [[ "${sz}" == *'typeset -E -F'* ]] 12234f9b3eeSRoland Mainzthen err_exit 'print of exponential shows both -E and -F attributes' 123da2e3ebdSchinfi 12434f9b3eeSRoland Mainzprint 'typeset -i m=48/4+1;print -- $m' > $tmp/script 12534f9b3eeSRoland Mainzchmod +x $tmp/script 126da2e3ebdSchintypeset -Z2 m 12734f9b3eeSRoland Mainzif [[ $($tmp/script) != 13 ]] 128da2e3ebdSchinthen err_exit 'attributes not cleared for script execution' 129da2e3ebdSchinfi 13034f9b3eeSRoland Mainzprint 'print VAR=$VAR' > $tmp/script 1317c2fbfb3SApril Chintypeset -L70 VAR=var 13234f9b3eeSRoland Mainz$tmp/script > $tmp/script.1 13334f9b3eeSRoland Mainz[[ $(< $tmp/script.1) == VAR= ]] || err_exit 'typeset -L should not be inherited' 134da2e3ebdSchintypeset -Z LAST=00 135da2e3ebdSchinunset -f foo 136da2e3ebdSchinfunction foo 137da2e3ebdSchin{ 138da2e3ebdSchin if [[ $1 ]] 139da2e3ebdSchin then LAST=$1 140da2e3ebdSchin else ((LAST++)) 141da2e3ebdSchin fi 142da2e3ebdSchin} 143da2e3ebdSchinfoo 1 144da2e3ebdSchinif (( ${#LAST} != 2 )) 145da2e3ebdSchinthen err_exit 'LAST!=2' 146da2e3ebdSchinfi 147da2e3ebdSchinfoo 148da2e3ebdSchinif (( ${#LAST} != 2 )) 149da2e3ebdSchinthen err_exit 'LAST!=2' 150da2e3ebdSchinfi 1517c2fbfb3SApril Chin[[ $(set | grep LAST) == LAST=02 ]] || err_exit "LAST not correct in set list" 152da2e3ebdSchinset -a 153da2e3ebdSchinunset foo 154da2e3ebdSchinfoo=bar 155da2e3ebdSchinif [[ $(export | grep ^foo=) != 'foo=bar' ]] 156da2e3ebdSchinthen err_exit 'all export not working' 157da2e3ebdSchinfi 158da2e3ebdSchinunset foo 159da2e3ebdSchinread foo <<! 160da2e3ebdSchinbar 161da2e3ebdSchin! 162da2e3ebdSchinif [[ $(export | grep ^foo=) != 'foo=bar' ]] 163da2e3ebdSchinthen err_exit 'all export not working with read' 164da2e3ebdSchinfi 165da2e3ebdSchinif [[ $(typeset | grep PS2) == PS2 ]] 166da2e3ebdSchinthen err_exit 'typeset without arguments outputs names without attributes' 167da2e3ebdSchinfi 168da2e3ebdSchinunset a z q x 169da2e3ebdSchinw1=hello 170da2e3ebdSchinw2=world 171da2e3ebdSchint1="$w1 $w2" 172da2e3ebdSchinif (( 'a' == 97 )) 173da2e3ebdSchinthen b1=aGVsbG8gd29ybGQ= 174da2e3ebdSchin b2=aGVsbG8gd29ybGRoZWxsbyB3b3JsZA== 175da2e3ebdSchinelse b1=iIWTk5ZAppaZk4Q= 176da2e3ebdSchin b2=iIWTk5ZAppaZk4SIhZOTlkCmlpmThA== 177da2e3ebdSchinfi 178da2e3ebdSchinz=$b1 179da2e3ebdSchintypeset -b x=$b1 180da2e3ebdSchin[[ $x == "$z" ]] || print -u2 'binary variable not expanding correctly' 181da2e3ebdSchin[[ $(printf "%B" x) == $t1 ]] || err_exit 'typeset -b not working' 182da2e3ebdSchintypeset -b -Z5 a=$b1 183da2e3ebdSchin[[ $(printf "%B" a) == $w1 ]] || err_exit 'typeset -b -Z5 not working' 184da2e3ebdSchintypeset -b q=$x$x 185da2e3ebdSchin[[ $q == $b2 ]] || err_exit 'typeset -b not working with concatination' 186da2e3ebdSchin[[ $(printf "%B" q) == $t1$t1 ]] || err_exit 'typeset -b concatination not working' 187da2e3ebdSchinx+=$b1 188da2e3ebdSchin[[ $x == $b2 ]] || err_exit 'typeset -b not working with append' 189da2e3ebdSchin[[ $(printf "%B" x) == $t1$t1 ]] || err_exit 'typeset -b append not working' 190da2e3ebdSchintypeset -b -Z20 z=$b1 191da2e3ebdSchin(( $(printf "%B" z | wc -c) == 20 )) || err_exit 'typeset -b -Z20 not storing 20 bytes' 192da2e3ebdSchin{ 193da2e3ebdSchin typeset -b v1 v2 194da2e3ebdSchin read -N11 v1 195da2e3ebdSchin read -N22 v2 196da2e3ebdSchin} << ! 197da2e3ebdSchinhello worldhello worldhello world 198da2e3ebdSchin! 199da2e3ebdSchin[[ $v1 == "$b1" ]] || err_exit "v1=$v1 should be $b1" 200da2e3ebdSchin[[ $v2 == "$x" ]] || err_exit "v1=$v2 should be $x" 20134f9b3eeSRoland Mainzif env '!=1' >/dev/null 2>&1 20234f9b3eeSRoland Mainzthen [[ $(env '!=1' $SHELL -c 'echo ok' 2>/dev/null) == ok ]] || err_exit 'malformed environment terminates shell' 20334f9b3eeSRoland Mainzfi 204da2e3ebdSchinunset var 205da2e3ebdSchintypeset -b var 206da2e3ebdSchinprintf '12%Z34' | read -r -N 5 var 207da2e3ebdSchin[[ $var == MTIAMzQ= ]] || err_exit 'binary files with zeros not working' 208da2e3ebdSchinunset var 209da2e3ebdSchinif command typeset -usi var=0xfffff 2> /dev/null 210da2e3ebdSchinthen (( $var == 0xffff )) || err_exit 'unsigned short integers not working' 211da2e3ebdSchinelse err_exit 'typeset -usi cannot be used for unsigned short' 212da2e3ebdSchinfi 213da2e3ebdSchin[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:-3}' 2> /dev/null) == 3 ]] || err_exit '${foo:-3} not 3 when typeset -Z2 field undefined' 214da2e3ebdSchin[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:=3}' 2> /dev/null) == 03 ]] || err_exit '${foo:=-3} not 3 when typeset -Z2 foo undefined' 215da2e3ebdSchinunset foo bar 216da2e3ebdSchinunset -f fun 217da2e3ebdSchinfunction fun 218da2e3ebdSchin{ 21934f9b3eeSRoland Mainz export foo=hello 220da2e3ebdSchin typeset -x bar=world 221da2e3ebdSchin [[ $foo == hello ]] || err_exit 'export scoping problem in function' 22234f9b3eeSRoland Mainz} 223da2e3ebdSchinfun 224da2e3ebdSchin[[ $(export | grep foo) == 'foo=hello' ]] || err_exit 'export not working in functions' 225da2e3ebdSchin[[ $(export | grep bar) ]] && err_exit 'typeset -x not local' 2267c2fbfb3SApril Chin[[ $($SHELL -c 'typeset -r IFS=;print -r $(pwd)' 2> /dev/null) == "$(pwd)" ]] || err_exit 'readonly IFS causes command substitution to fail' 2277c2fbfb3SApril Chinfred[66]=88 2287c2fbfb3SApril Chin[[ $(typeset -pa) == *fred* ]] || err_exit 'typeset -pa not working' 2297c2fbfb3SApril Chinunset x y z 2307c2fbfb3SApril Chintypeset -LZ3 x=abcd y z=00abcd 2317c2fbfb3SApril Chiny=03 23234f9b3eeSRoland Mainz[[ $y == "3 " ]] || err_exit '-LZ3 not working for value 03' 23334f9b3eeSRoland Mainz[[ $x == "abc" ]] || err_exit '-LZ3 not working for value abcd' 23434f9b3eeSRoland Mainz[[ $x == "abc" ]] || err_exit '-LZ3 not working for value 00abcd' 2357c2fbfb3SApril Chinunset x z 2367c2fbfb3SApril Chinset +a 2377c2fbfb3SApril Chin[[ $(typeset -p z) ]] && err_exit "typeset -p for z undefined failed" 2387c2fbfb3SApril Chinunset z 2397c2fbfb3SApril Chinx='typeset -i z=45' 2407c2fbfb3SApril Chineval "$x" 2417c2fbfb3SApril Chin[[ $(typeset -p z) == "$x" ]] || err_exit "typeset -p for '$x' failed" 2427c2fbfb3SApril Chin[[ $(typeset +p z) == "${x%=*}" ]] || err_exit "typeset +p for '$x' failed" 2437c2fbfb3SApril Chinunset z 2447c2fbfb3SApril Chinx='typeset -a z=(a b c)' 2457c2fbfb3SApril Chineval "$x" 2467c2fbfb3SApril Chin[[ $(typeset -p z) == "$x" ]] || err_exit "typeset -p for '$x' failed" 2477c2fbfb3SApril Chin[[ $(typeset +p z) == "${x%=*}" ]] || err_exit "typeset +p for '$x' failed" 2487c2fbfb3SApril Chinunset z 2497c2fbfb3SApril Chinx='typeset -C z=( 2507c2fbfb3SApril Chin foo=bar 2517c2fbfb3SApril Chin xxx=bam 2527c2fbfb3SApril Chin)' 2537c2fbfb3SApril Chineval "$x" 2547c2fbfb3SApril Chinx=${x//$'\t'} 2557c2fbfb3SApril Chinx=${x//$'(\n'/'('} 2567c2fbfb3SApril Chinx=${x//$'\n'/';'} 257b30d1939SAndy Fiddamanx=${x%';)'}')' 2587c2fbfb3SApril Chin[[ $(typeset -p z) == "$x" ]] || err_exit "typeset -p for '$x' failed" 2597c2fbfb3SApril Chin[[ $(typeset +p z) == "${x%%=*}" ]] || err_exit "typeset +p for '$x' failed" 2607c2fbfb3SApril Chinunset z 2617c2fbfb3SApril Chinx='typeset -A z=([bar]=bam [xyz]=bar)' 2627c2fbfb3SApril Chineval "$x" 2637c2fbfb3SApril Chin[[ $(typeset -p z) == "$x" ]] || err_exit "typeset -p for '$x' failed" 2647c2fbfb3SApril Chin[[ $(typeset +p z) == "${x%%=*}" ]] || err_exit "typeset +p for '$x' failed" 2657c2fbfb3SApril Chinunset z 2667c2fbfb3SApril Chinfoo=abc 2677c2fbfb3SApril Chinx='typeset -n z=foo' 2687c2fbfb3SApril Chineval "$x" 2697c2fbfb3SApril Chin[[ $(typeset -p z) == "$x" ]] || err_exit "typeset -p for '$x' failed" 2707c2fbfb3SApril Chin[[ $(typeset +p z) == "${x%%=*}" ]] || err_exit "typeset +p for '$x' failed" 2717c2fbfb3SApril Chintypeset +n z 2727c2fbfb3SApril Chinunset foo z 2737c2fbfb3SApril Chintypeset -T Pt_t=( 2747c2fbfb3SApril Chin float x=1 y=2 2757c2fbfb3SApril Chin) 2767c2fbfb3SApril ChinPt_t z 2777c2fbfb3SApril Chinx=${z//$'\t'} 2787c2fbfb3SApril Chinx=${x//$'(\n'/'('} 2797c2fbfb3SApril Chinx=${x//$'\n'/';'} 280b30d1939SAndy Fiddamanx=${x%';)'}')' 2817c2fbfb3SApril Chin[[ $(typeset -p z) == "Pt_t z=$x" ]] || err_exit "typeset -p for type failed" 2827c2fbfb3SApril Chin[[ $(typeset +p z) == "Pt_t z" ]] || err_exit "typeset +p for type failed" 2837c2fbfb3SApril Chinunset z 2847c2fbfb3SApril Chinfunction foo 2857c2fbfb3SApril Chin{ 2867c2fbfb3SApril Chin typeset -p bar 2877c2fbfb3SApril Chin} 2887c2fbfb3SApril Chinbar=xxx 2897c2fbfb3SApril Chin[[ $(foo) == bar=xxx ]] || err_exit 'typeset -p not working inside a function' 29034f9b3eeSRoland Mainzunset foo 29134f9b3eeSRoland Mainztypeset -L5 foo 29234f9b3eeSRoland Mainz[[ $(typeset -p foo) == 'typeset -L 5 foo' ]] || err_exit 'typeset -p not working for variables with attributes but without a value' 29334f9b3eeSRoland Mainz{ $SHELL <<- EOF 29434f9b3eeSRoland Mainz typeset -L3 foo=aaa 29534f9b3eeSRoland Mainz typeset -L6 foo=bbbbbb 29634f9b3eeSRoland Mainz [[ \$foo == bbbbbb ]] 29734f9b3eeSRoland MainzEOF 29834f9b3eeSRoland Mainz} || err_exit 'typeset -L should not preserve old attributes' 29934f9b3eeSRoland Mainz{ $SHELL <<- EOF 30034f9b3eeSRoland Mainz typeset -R3 foo=aaa 30134f9b3eeSRoland Mainz typeset -R6 foo=bbbbbb 30234f9b3eeSRoland Mainz [[ \$foo == bbbbbb ]] 30334f9b3eeSRoland MainzEOF 30434f9b3eeSRoland Mainz} 2> /dev/null || err_exit 'typeset -R should not preserve old attributes' 30534f9b3eeSRoland Mainz 30634f9b3eeSRoland Mainzexpected='YWJjZGVmZ2hpag==' 30734f9b3eeSRoland Mainzunset foo 30834f9b3eeSRoland Mainztypeset -b -Z10 foo 30934f9b3eeSRoland Mainzread foo <<< 'abcdefghijklmnop' 31034f9b3eeSRoland Mainz[[ $foo == "$expected" ]] || err_exit 'read foo, where foo is "typeset -b -Z10" not working' 31134f9b3eeSRoland Mainzunset foo 31234f9b3eeSRoland Mainztypeset -b -Z10 foo 31334f9b3eeSRoland Mainzread -N10 foo <<< 'abcdefghijklmnop' 31434f9b3eeSRoland Mainz[[ $foo == "$expected" ]] || err_exit 'read -N10 foo, where foo is "typeset -b -Z10" not working' 31534f9b3eeSRoland Mainzunset foo 31634f9b3eeSRoland Mainztypeset -b -A foo 31734f9b3eeSRoland Mainzread -N10 foo[4] <<< 'abcdefghijklmnop' 31834f9b3eeSRoland Mainz[[ ${foo[4]} == "$expected" ]] || err_exit 'read -N10 foo, where foo is "typeset -b -A" foo not working' 31934f9b3eeSRoland Mainzunset foo 32034f9b3eeSRoland Mainztypeset -b -a foo 32134f9b3eeSRoland Mainzread -N10 foo[4] <<< 'abcdefghijklmnop' 32234f9b3eeSRoland Mainz[[ ${foo[4]} == "$expected" ]] || err_exit 'read -N10 foo, where foo is "typeset -b -a" foo not working' 32334f9b3eeSRoland Mainz[[ $(printf %B foo[4]) == abcdefghij ]] || err_exit 'printf %B for binary associative array element not working' 32434f9b3eeSRoland Mainz[[ $(printf %B foo[4]) == abcdefghij ]] || err_exit 'printf %B for binary indexed array element not working' 32534f9b3eeSRoland Mainzunset foo 32634f9b3eeSRoland Mainz 32734f9b3eeSRoland Mainz$SHELL 2> /dev/null -c 'export foo=(bar=3)' && err_exit 'compound variables cannot be exported' 32834f9b3eeSRoland Mainz 3293e14f97fSRoger A. Faulkner$SHELL -c 'builtin date' >/dev/null 2>&1 && 3303e14f97fSRoger A. Faulkner{ 3313e14f97fSRoger A. Faulkner 3323e14f97fSRoger A. Faulkner# check env var changes against a builtin that uses the env var 3333e14f97fSRoger A. Faulkner 3343e14f97fSRoger A. FaulknerSEC=1234252800 3353e14f97fSRoger A. FaulknerETZ=EST5EDT 3363e14f97fSRoger A. FaulknerEDT=03 3373e14f97fSRoger A. FaulknerPTZ=PST8PDT 3383e14f97fSRoger A. FaulknerPDT=00 3393e14f97fSRoger A. Faulkner 3403e14f97fSRoger A. FaulknerCMD="date -f%H \\#$SEC" 3413e14f97fSRoger A. Faulkner 3423e14f97fSRoger A. Faulknerexport TZ=$ETZ 3433e14f97fSRoger A. Faulkner 3443e14f97fSRoger A. Faulknerset -- \ 3453e14f97fSRoger A. Faulkner "$EDT $PDT $EDT" "" "TZ=$PTZ" "" \ 3463e14f97fSRoger A. Faulkner "$EDT $PDT $EDT" "" "TZ=$PTZ" "TZ=$ETZ" \ 3473e14f97fSRoger A. Faulkner "$EDT $PDT $EDT" "TZ=$ETZ" "TZ=$PTZ" "TZ=$ETZ" \ 3483e14f97fSRoger A. Faulkner "$PDT $EDT $PDT" "TZ=$PTZ" "" "TZ=$PTZ" \ 3493e14f97fSRoger A. Faulkner "$PDT $EDT $PDT" "TZ=$PTZ" "TZ=$ETZ" "TZ=$PTZ" \ 3503e14f97fSRoger A. Faulkner "$EDT $PDT $EDT" "foo=bar" "TZ=$PTZ" "TZ=$ETZ" \ 3513e14f97fSRoger A. Faulkner 3523e14f97fSRoger A. Faulknerwhile (( $# >= 4 )) 3533e14f97fSRoger A. Faulknerdo exp=$1 3543e14f97fSRoger A. Faulkner got=$(print $($SHELL -c "builtin date; $2 $CMD; $3 $CMD; $4 $CMD")) 3553e14f97fSRoger A. Faulkner [[ $got == $exp ]] || err_exit "[ '$2' '$3' '$4' ] env sequence failed -- expected '$exp', got '$got'" 3563e14f97fSRoger A. Faulkner shift 4 3573e14f97fSRoger A. Faulknerdone 3583e14f97fSRoger A. Faulkner 3593e14f97fSRoger A. Faulkner} 3603e14f97fSRoger A. Faulkner 3613e14f97fSRoger A. Faulknerunset v 3623e14f97fSRoger A. Faulknertypeset -H v=/dev/null 3633e14f97fSRoger A. Faulkner[[ $v == *nul* ]] || err_exit 'typeset -H for /dev/null not working' 3643e14f97fSRoger A. Faulkner 365b30d1939SAndy Fiddamanunset x 366b30d1939SAndy Fiddaman(typeset +C x) 2> /dev/null && err_exit 'typeset +C should be an error' 367b30d1939SAndy Fiddaman(typeset +A x) 2> /dev/null && err_exit 'typeset +A should be an error' 368b30d1939SAndy Fiddaman(typeset +a x) 2> /dev/null && err_exit 'typeset +a should be an error' 369b30d1939SAndy Fiddaman 370b30d1939SAndy Fiddamanunset x 371b30d1939SAndy Fiddaman{ 372b30d1939SAndy Fiddamanx=$($SHELL -c 'integer -s x=5;print -r -- $x') 373b30d1939SAndy Fiddaman} 2> /dev/null 374b30d1939SAndy Fiddaman[[ $x == 5 ]] || err_exit 'integer -s not working' 375b30d1939SAndy Fiddaman 376b30d1939SAndy Fiddaman[[ $(typeset -l) == *namespace*.sh* ]] && err_exit 'typeset -l should not contain namespace .sh' 377b30d1939SAndy Fiddaman 378b30d1939SAndy Fiddamanunset got 379b30d1939SAndy Fiddamantypeset -u got 380b30d1939SAndy Fiddamanexp=100 381b30d1939SAndy Fiddaman((got=$exp)) 382b30d1939SAndy Fiddaman[[ $got == $exp ]] || err_exit "typeset -l fails on numeric value -- expected '$exp', got '$got'" 383*5b8dd251SAndy Fiddamanunset got 384b30d1939SAndy Fiddaman 385b30d1939SAndy Fiddamanunset s 386b30d1939SAndy Fiddamantypeset -a -u s=( hello world chicken ) 387b30d1939SAndy Fiddaman[[ ${s[2]} == CHICKEN ]] || err_exit 'typeset -u not working with indexed arrays' 388b30d1939SAndy Fiddamanunset s 389b30d1939SAndy Fiddamantypeset -A -u s=( [1]=hello [0]=world [2]=chicken ) 390b30d1939SAndy Fiddaman[[ ${s[2]} == CHICKEN ]] || err_exit 'typeset -u not working with associative arrays' 391b30d1939SAndy Fiddamanexpected=$'(\n\t[0]=WORLD\n\t[1]=HELLO\n\t[2]=CHICKEN\n)' 392b30d1939SAndy Fiddaman[[ $(print -v s) == "$expected" ]] || err_exit 'typeset -u for associative array does not display correctly' 393b30d1939SAndy Fiddaman 394b30d1939SAndy Fiddamanunset s 395b30d1939SAndy Fiddamanif command typeset -M totitle s 2> /dev/null 396b30d1939SAndy Fiddamanthen [[ $(typeset +p s) == 'typeset -M totitle s' ]] || err_exit 'typeset -M totitle does not display correctly with typeset -p' 397b30d1939SAndy Fiddamanfi 398b30d1939SAndy Fiddaman 399b30d1939SAndy Fiddaman{ $SHELL <<- \EOF 400b30d1939SAndy Fiddaman compound -a a1 401b30d1939SAndy Fiddaman for ((i=1 ; i < 100 ; i++ )) 402b30d1939SAndy Fiddaman do [[ "$( typeset + a1[$i] )" == '' ]] && a1[$i].text='hello' 403b30d1939SAndy Fiddaman done 404b30d1939SAndy Fiddaman [[ ${a1[70].text} == hello ]] 405b30d1939SAndy FiddamanEOF 406b30d1939SAndy Fiddaman} 2> /dev/null 407b30d1939SAndy Fiddaman(( $? )) && err_exit 'typeset + a[i] not working' 408b30d1939SAndy Fiddaman 409b30d1939SAndy Fiddamantypeset groupDB="" userDB="" 410b30d1939SAndy Fiddamantypeset -l -L1 DBPick="" 411b30d1939SAndy Fiddaman[[ -n "$groupDB" ]] && err_exit 'typeset -l -L1 causes unwanted side effect' 412b30d1939SAndy Fiddaman 413b30d1939SAndy FiddamanHISTFILE=foo 414b30d1939SAndy Fiddamantypeset -u PS1='hello --- ' 415b30d1939SAndy FiddamanHISTFILE=foo 416b30d1939SAndy Fiddaman[[ $HISTFILE == foo ]] || err_exit 'typeset -u PS1 affects HISTFILE' 417b30d1939SAndy Fiddaman 418b30d1939SAndy Fiddamantypeset -a a=( aA= ZQ= bA= bA= bw= Cg= ) 419b30d1939SAndy Fiddamantypeset -b x 420b30d1939SAndy Fiddamanfor (( i=0 ; i < ${#a[@]} ; i++ )) 421b30d1939SAndy Fiddamando x+="${a[i]}" 422b30d1939SAndy Fiddamandone 423b30d1939SAndy Fiddaman[[ $(printf "%B" x) == hello ]] || err_exit "append for typeset -b not working: got '$(printf "%B" x)' should get hello" 424b30d1939SAndy Fiddaman 425b30d1939SAndy Fiddaman( 426b30d1939SAndy Fiddaman trap 'exit $?' EXIT 427b30d1939SAndy Fiddaman $SHELL -c 'typeset v=foo; [[ $(typeset -p v[0]) == v=foo ]]' 428b30d1939SAndy Fiddaman) 2> /dev/null || err_exit 'typeset -p v[0] not working for simple variable v' 429b30d1939SAndy Fiddaman 430b30d1939SAndy Fiddamanunset x 431b30d1939SAndy Fiddamanexpected='typeset -a x=(a\=3 b\=4)' 432b30d1939SAndy Fiddamantypeset -a x=( a=3 b=4) 433b30d1939SAndy Fiddaman[[ $(typeset -p x) == "$expected" ]] || err_exit 'assignment elements in typeset -a assignment not working' 434b30d1939SAndy Fiddaman 435b30d1939SAndy Fiddamanunset z 436b30d1939SAndy Fiddamanz='typeset -a q=(a b c)' 437b30d1939SAndy Fiddaman$SHELL -c "$z; [[ \$(typeset -pa) == '$z' ]]" || err_exit 'typeset -pa does not list only index arrays' 438b30d1939SAndy Fiddamanz='typeset -C z=(foo=bar)' 439b30d1939SAndy Fiddaman$SHELL -c "$z; [[ \$(typeset -pC) == '$z' ]]" || err_exit 'typeset -pC does not list only compound variables' 440b30d1939SAndy Fiddamanunset y 441b30d1939SAndy Fiddamanz='typeset -A y=([a]=foo)' 442b30d1939SAndy Fiddaman$SHELL -c "$z; [[ \$(typeset -pA) == '$z' ]]" || err_exit 'typeset -pA does not list only associative arrays' 443b30d1939SAndy Fiddaman 444b30d1939SAndy Fiddaman$SHELL 2> /dev/null -c 'typeset -C arr=( aa bb cc dd )' && err_exit 'invalid compound variable assignment not reported' 445b30d1939SAndy Fiddaman 446b30d1939SAndy Fiddamanunset x 447b30d1939SAndy Fiddamantypeset -l x= 448b30d1939SAndy Fiddaman[[ ${x:=foo} == foo ]] || err_exit '${x:=foo} with x unset, not foo when x is a lowercase variable' 449b30d1939SAndy Fiddaman 450b30d1939SAndy Fiddamanunset x 451b30d1939SAndy Fiddamantypeset -L4 x=$'\001abcdef' 452b30d1939SAndy Fiddaman[[ ${#x} == 5 ]] || err_exit "width of character '\01' is not zero" 453b30d1939SAndy Fiddaman 454b30d1939SAndy Fiddamanunset x 455b30d1939SAndy Fiddamantypeset -L x=-1 456b30d1939SAndy Fiddamancommand typeset -F x=0-1 2> /dev/null || err_exit 'typeset -F after typeset -L fails' 457b30d1939SAndy Fiddaman 458b30d1939SAndy Fiddamanunset val 459b30d1939SAndy Fiddamantypeset -i val=10#0-3 460b30d1939SAndy Fiddamantypeset -Z val=0-1 461b30d1939SAndy Fiddaman[[ $val == 0-1 ]] || err_exit 'integer attribute not cleared for subsequent typeset' 462b30d1939SAndy Fiddaman 463b30d1939SAndy Fiddamanunset x 464b30d1939SAndy Fiddamantypeset -L -Z x=foo 465b30d1939SAndy Fiddaman[[ $(typeset -p x) == 'typeset -Z 3 -L 3 x=foo' ]] || err_exit '-LRZ without [n] not defaulting to width of variable' 466b30d1939SAndy Fiddaman 467b30d1939SAndy Fiddamanunset foo 468b30d1939SAndy Fiddamantypeset -Z2 foo=3 469b30d1939SAndy Fiddaman[[ $(typeset -p foo) == 'typeset -Z 2 -R 2 foo=03' ]] || err_exit '-Z2 not working' 470b30d1939SAndy Fiddamanexport foo 471b30d1939SAndy Fiddaman[[ $(typeset -p foo) == 'typeset -x -Z 2 -R 2 foo=03' ]] || err_exit '-Z2 not working after export' 472b30d1939SAndy Fiddaman 473b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 474