|
Packit Service |
a8c26c |
########################################################################
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# This software is part of the ast package #
|
|
Packit Service |
a8c26c |
# Copyright (c) 1982-2012 AT&T Intellectual Property #
|
|
Packit Service |
a8c26c |
# and is licensed under the #
|
|
Packit Service |
a8c26c |
# Eclipse Public License, Version 1.0 #
|
|
Packit Service |
a8c26c |
# by AT&T Intellectual Property #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# A copy of the License is available at #
|
|
Packit Service |
a8c26c |
# http://www.eclipse.org/org/documents/epl-v10.html #
|
|
Packit Service |
a8c26c |
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# Information and Software Systems Research #
|
|
Packit Service |
a8c26c |
# AT&T Research #
|
|
Packit Service |
a8c26c |
# Florham Park NJ #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
# David Korn <dgk@research.att.com> #
|
|
Packit Service |
a8c26c |
# #
|
|
Packit Service |
a8c26c |
########################################################################
|
|
Packit Service |
a8c26c |
function err_exit
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -u2 -n "\t"
|
|
Packit Service |
a8c26c |
print -u2 -r ${Command}[$1]: "${@:2}"
|
|
Packit Service |
a8c26c |
let Errors+=1
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
alias err_exit='err_exit $LINENO'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
Command=${0##*/}
|
|
Packit Service |
a8c26c |
integer Errors=0
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset LANG ${!LC_*}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
|
|
Packit Service |
a8c26c |
trap "cd /; rm -rf $tmp" EXIT
|
|
Packit Service |
a8c26c |
cd $tmp || exit
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
a=$($SHELL -c '/' 2>&1 | sed -e "s,.*: *,," -e "s, *\[.*,,")
|
|
Packit Service |
a8c26c |
b=$($SHELL -c '(LC_ALL=debug / 2>/dev/null); /' 2>&1 | sed -e "s,.*: *,," -e "s, *\[.*,,")
|
|
Packit Service |
a8c26c |
[[ "$b" == "$a" ]] || err_exit "locale not restored after subshell -- expected '$a', got '$b'"
|
|
Packit Service |
a8c26c |
b=$($SHELL -c '(LC_ALL=debug; / 2>/dev/null); /' 2>&1 | sed -e "s,.*: *,," -e "s, *\[.*,,")
|
|
Packit Service |
a8c26c |
[[ "$b" == "$a" ]] || err_exit "locale not restored after subshell -- expected '$a', got '$b'"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# test shift-jis \x81\x40 ... \x81\x7E encodings
|
|
Packit Service |
a8c26c |
# (shift char followed by 7 bit ascii)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
typeset -i16 chr
|
|
Packit Service |
a8c26c |
for locale in $(PATH=/bin:/usr/bin locale -a 2>/dev/null | grep -i jis)
|
|
Packit Service |
a8c26c |
do export LC_ALL=$locale
|
|
Packit Service |
a8c26c |
for ((chr=0x40; chr<=0x7E; chr++))
|
|
Packit Service |
a8c26c |
do c=${chr#16#}
|
|
Packit Service |
a8c26c |
for s in \\x81\\x$c \\x$c
|
|
Packit Service |
a8c26c |
do b="$(printf "$s")"
|
|
Packit Service |
a8c26c |
eval n=\$\'$s\'
|
|
Packit Service |
a8c26c |
[[ $b == "$n" ]] || err_exit "LC_ALL=$locale printf difference for \"$s\" -- expected '$n', got '$b'"
|
|
Packit Service |
a8c26c |
u=$(print -- $b)
|
|
Packit Service |
a8c26c |
q=$(print -- "$b")
|
|
Packit Service |
a8c26c |
[[ $u == "$q" ]] || err_exit "LC_ALL=$locale quoted print difference for \"$s\" -- $b => '$u' vs \"$b\" => '$q'"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# this locale is supported by ast on all platforms
|
|
Packit Service |
a8c26c |
# EU for { decimal_point="," thousands_sep="." }
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
locale=C_EU.UTF-8
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
export LC_ALL=C
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# test multibyte value/trace format -- $'\303\274' is UTF-8 u-umlaut
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
c=$(LC_ALL=C $SHELL -c "printf $':%2s:\n' $'\303\274'")
|
|
Packit Service |
a8c26c |
u=$(LC_ALL=$locale $SHELL -c "printf $':%2s:\n' $'\303\274'" 2>/dev/null)
|
|
Packit Service |
a8c26c |
if [[ "$c" != "$u" ]]
|
|
Packit Service |
a8c26c |
then LC_ALL=$locale
|
|
Packit Service |
a8c26c |
x=$'+2+ typeset item.text\
|
|
Packit Service |
a8c26c |
+3+ item.text=\303\274\
|
|
Packit Service |
a8c26c |
+4+ print -- \303\274\
|
|
Packit Service |
a8c26c |
\303\274\
|
|
Packit Service |
a8c26c |
+5+ eval $\'arr[0]=(\\n\\ttext=\\303\\274\\n)\'
|
|
Packit Service |
a8c26c |
+2+ arr[0].text=ü\
|
|
Packit Service |
a8c26c |
+6+ print -- \303\274\
|
|
Packit Service |
a8c26c |
ü\
|
|
Packit Service |
a8c26c |
+7+ eval txt=$\'(\\n\\ttext=\\303\\274\\n)\'
|
|
Packit Service |
a8c26c |
+2+ txt.text=\303\274\
|
|
Packit Service |
a8c26c |
+8+ print -- \'(\' text=$\'\\303\\274\' \')\'\
|
|
Packit Service |
a8c26c |
( text=\303\274 )'
|
|
Packit Service |
a8c26c |
u=$(LC_ALL=$locale PS4='+$LINENO+ ' $SHELL -x -c "
|
|
Packit Service |
a8c26c |
item=(typeset text)
|
|
Packit Service |
a8c26c |
item.text=$'\303\274'
|
|
Packit Service |
a8c26c |
print -- \"\${item.text}\"
|
|
Packit Service |
a8c26c |
eval \"arr[0]=\$item\"
|
|
Packit Service |
a8c26c |
print -- \"\${arr[0].text}\"
|
|
Packit Service |
a8c26c |
eval \"txt=\${arr[0]}\"
|
|
Packit Service |
a8c26c |
print -- \$txt
|
|
Packit Service |
a8c26c |
" 2>&1)
|
|
Packit Service |
a8c26c |
[[ "$u" == "$x" ]] || err_exit LC_ALL=$locale multibyte value/trace format failed
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
x=$'00fc\n20ac'
|
|
Packit Service |
a8c26c |
u=$(LC_ALL=$locale $SHELL -c $'printf "%04x\n" \$\'\"\303\274\"\' \$\'\"\xE2\x82\xAC\"\'')
|
|
Packit Service |
a8c26c |
[[ $u == $x ]] || err_exit LC_ALL=$locale multibyte %04x printf format failed
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if (( $($SHELL -c $'export LC_ALL='$locale$'; print -r "\342\202\254\342\202\254\342\202\254\342\202\254w\342\202\254\342\202\254\342\202\254\342\202\254" | wc -m' 2>/dev/null) == 10 ))
|
|
Packit Service |
a8c26c |
then LC_ALL=$locale $SHELL -c b1=$'"\342\202\254\342\202\254\342\202\254\342\202\254w\342\202\254\342\202\254\342\202\254\342\202\254"; [[ ${b1:4:1} == w ]]' || err_exit 'multibyte ${var:offset:len} not working correctly'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
locale=en_US.UTF-8
|
|
Packit Service |
a8c26c |
#$SHELL -c 'export LANG='$locale'; printf "\u[20ac]\u[20ac]" > $tmp/two_euro_chars.txt'
|
|
Packit Service |
a8c26c |
printf $'\342\202\254\342\202\254' > $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
exp="6 2 6"
|
|
Packit Service |
a8c26c |
set -- $($SHELL -c "
|
|
Packit Service |
a8c26c |
unset LC_CTYPE
|
|
Packit Service |
a8c26c |
export LANG=$locale
|
|
Packit Service |
a8c26c |
export LC_ALL=C
|
|
Packit Service |
a8c26c |
command wc -m < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
unset LC_ALL
|
|
Packit Service |
a8c26c |
command wc -m < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
export LC_ALL=C
|
|
Packit Service |
a8c26c |
command wc -m < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
")
|
|
Packit Service |
a8c26c |
got=$*
|
|
Packit Service |
a8c26c |
[[ $got == $exp ]] || err_exit "command wc LC_ALL default failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
set -- $($SHELL -c "
|
|
Packit Service |
a8c26c |
if builtin wc 2>/dev/null || builtin -f cmd wc 2>/dev/null
|
|
Packit Service |
a8c26c |
then unset LC_CTYPE
|
|
Packit Service |
a8c26c |
export LANG=$locale
|
|
Packit Service |
a8c26c |
export LC_ALL=C
|
|
Packit Service |
a8c26c |
wc -C < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
unset LC_ALL
|
|
Packit Service |
a8c26c |
wc -C < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
export LC_ALL=C
|
|
Packit Service |
a8c26c |
wc -C < $tmp/two_euro_chars.txt
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
")
|
|
Packit Service |
a8c26c |
got=$*
|
|
Packit Service |
a8c26c |
[[ $got == $exp ]] || err_exit "builtin wc LC_ALL default failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
locale=C_EU.UTF-8
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# multibyte char straddling buffer boundary
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
unset i
|
|
Packit Service |
a8c26c |
integer i
|
|
Packit Service |
a8c26c |
for ((i = 0; i < 163; i++))
|
|
Packit Service |
a8c26c |
do print "#234567890123456789012345678901234567890123456789"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
printf $'%-.*c\n' 15 '#'
|
|
Packit Service |
a8c26c |
for ((i = 0; i < 2; i++))
|
|
Packit Service |
a8c26c |
do print $': "\xe5\xae\x9f\xe8\xa1\x8c\xe6\xa9\x9f\xe8\x83\xbd\xe3\x82\x92\xe8\xa1\xa8\xe7\xa4\xba\xe3\x81\x97\xe3\x81\xbe\xe3\x81\x99\xe3\x80\x82" :'
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
} > ko.dat
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
LC_ALL=$locale $SHELL < ko.dat 2> /dev/null || err_exit "script with multibyte char straddling buffer boundary fails"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# exp LC_ALL LC_NUMERIC LANG
|
|
Packit Service |
a8c26c |
set -- \
|
|
Packit Service |
a8c26c |
2,5 $locale C '' \
|
|
Packit Service |
a8c26c |
2.5 C $locale '' \
|
|
Packit Service |
a8c26c |
2,5 $locale '' C \
|
|
Packit Service |
a8c26c |
2,5 '' $locale C \
|
|
Packit Service |
a8c26c |
2.5 C '' $locale \
|
|
Packit Service |
a8c26c |
2.5 '' C $locale \
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset a b c
|
|
Packit Service |
a8c26c |
unset LC_ALL LC_NUMERIC LANG
|
|
Packit Service |
a8c26c |
integer a b c
|
|
Packit Service |
a8c26c |
while (( $# >= 4 ))
|
|
Packit Service |
a8c26c |
do exp=$1
|
|
Packit Service |
a8c26c |
unset H V
|
|
Packit Service |
a8c26c |
typeset -A H
|
|
Packit Service |
a8c26c |
typeset -a V
|
|
Packit Service |
a8c26c |
[[ $2 ]] && V[0]="export LC_ALL=$2;"
|
|
Packit Service |
a8c26c |
[[ $3 ]] && V[1]="export LC_NUMERIC=$3;"
|
|
Packit Service |
a8c26c |
[[ $4 ]] && V[2]="export LANG=$4;"
|
|
Packit Service |
a8c26c |
for ((a = 0; a < 3; a++))
|
|
Packit Service |
a8c26c |
do for ((b = 0; b < 3; b++))
|
|
Packit Service |
a8c26c |
do if (( b != a ))
|
|
Packit Service |
a8c26c |
then for ((c = 0; c < 3; c++))
|
|
Packit Service |
a8c26c |
do if (( c != a && c != b ))
|
|
Packit Service |
a8c26c |
then T=${V[$a]}${V[$b]}${V[$c]}
|
|
Packit Service |
a8c26c |
if [[ ! ${H[$T]} ]]
|
|
Packit Service |
a8c26c |
then H[$T]=1
|
|
Packit Service |
a8c26c |
got=$($SHELL -c "${T}print \$(( $exp ))" 2>&1)
|
|
Packit Service |
a8c26c |
[[ $got == $exp ]] || err_exit "${T} sequence failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
shift 4
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# setocale(LC_ALL,"") after setlocale() initialization
|
|
Packit Service |
a8c26c |
locale=en_US.UTF-8
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
printf 'f1\357\274\240f2\n' > input1
|
|
Packit Service |
a8c26c |
printf 't2\357\274\240f1\n' > input2
|
|
Packit Service |
a8c26c |
printf '\357\274\240\n' > delim
|
|
Packit Service |
a8c26c |
print "export LC_ALL=$locale
|
|
Packit Service |
a8c26c |
join -j1 1 -j2 2 -o 1.1 -t \$(cat delim) input1 input2 > out" > script
|
|
Packit Service |
a8c26c |
$SHELL -c 'unset LANG ${!LC_*}; $SHELL ./script' ||
|
|
Packit Service |
a8c26c |
err_exit "join test script failed -- exit code $?"
|
|
Packit Service |
a8c26c |
exp="f1"
|
|
Packit Service |
a8c26c |
got="$(
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "LC_ALL test script failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# multibyte identifiers
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
exp=OK
|
|
Packit Service |
a8c26c |
got=$(LC_ALL=C.UTF-8 $SHELL -c $'\u[5929]=OK; print ${\u[5929]}' 2>&1)
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "multibyte variable definition/expansion failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
got=$(LC_ALL=C.UTF-8 $SHELL -c $'function \u[5929]\n{\nprint OK;\n}; \u[5929]' 2>&1)
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "multibyte ksh function definition/execution failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
got=$(LC_ALL=C.UTF-8 $SHELL -c $'\u[5929]()\n{\nprint OK;\n}; \u[5929]' 2>&1)
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "multibyte posix function definition/execution failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# this locale is supported by ast on all platforms
|
|
Packit Service |
a8c26c |
# mainly used to debug multibyte and message translation code
|
|
Packit Service |
a8c26c |
# however wctype is not supported but that's ok for these tests
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
locale=debug
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if [[ "$(LC_ALL=$locale $SHELL <<- \+EOF+
|
|
Packit Service |
a8c26c |
x=a<1z>b<2yx>c
|
|
Packit Service |
a8c26c |
print ${#x}
|
|
Packit Service |
a8c26c |
+EOF+)" != 5
|
|
Packit Service |
a8c26c |
]]
|
|
Packit Service |
a8c26c |
then err_exit '${#x} not working with multibyte locales'
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
dir=_not_found_
|
|
Packit Service |
a8c26c |
exp=2
|
|
Packit Service |
a8c26c |
for cmd in \
|
|
Packit Service |
a8c26c |
"cd $dir; export LC_ALL=debug; cd $dir" \
|
|
Packit Service |
a8c26c |
"cd $dir; LC_ALL=debug cd $dir" \
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
do got=$($SHELL -c "$cmd" 2>&1 | sort -u | wc -l)
|
|
Packit Service |
a8c26c |
(( ${got:-0} == $exp )) || err_exit "'$cmd' sequence failed -- error message not localized"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
exp=121
|
|
Packit Service |
a8c26c |
for lc in LANG LC_MESSAGES LC_ALL
|
|
Packit Service |
a8c26c |
do for cmd in "($lc=$locale;cd $dir)" "$lc=$locale;cd $dir;unset $lc" "function tst { typeset $lc=$locale;cd $dir; }; tst"
|
|
Packit Service |
a8c26c |
do tst="$lc=C;cd $dir;$cmd;cd $dir;:"
|
|
Packit Service |
a8c26c |
$SHELL -c "unset LANG \${!LC_*}; $SHELL -c '$tst'" > out 2>&1 ||
|
|
Packit Service |
a8c26c |
err_exit "'$tst' failed -- exit status $?"
|
|
Packit Service |
a8c26c |
integer id=0
|
|
Packit Service |
a8c26c |
unset msg
|
|
Packit Service |
a8c26c |
typeset -A msg
|
|
Packit Service |
a8c26c |
got=
|
|
Packit Service |
a8c26c |
while read -r line
|
|
Packit Service |
a8c26c |
do line=${line##*:}
|
|
Packit Service |
a8c26c |
if [[ ! ${msg[$line]} ]]
|
|
Packit Service |
a8c26c |
then msg[$line]=$((++id))
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
got+=${msg[$line]}
|
|
Packit Service |
a8c26c |
done < out
|
|
Packit Service |
a8c26c |
[[ $got == $exp ]] || err_exit "'$tst' failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
exp=123
|
|
Packit Service |
a8c26c |
got=$(LC_ALL=debug $SHELL -c "a<2A@>z=$exp; print \$a<2A@>z")
|
|
Packit Service |
a8c26c |
[[ $got == $exp ]] || err_exit "multibyte debug locale \$a<2A@>z failed -- expected '$exp', got '$got'"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset LC_ALL LC_MESSAGES
|
|
Packit Service |
a8c26c |
export LANG=debug
|
|
Packit Service |
a8c26c |
function message
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print -r $"An error occurred."
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
exp=$'(libshell,3,46)\nAn error occurred.\n(libshell,3,46)'
|
|
Packit Service |
a8c26c |
alt=$'(debug,message,libshell,An error occurred.)\nAn error occurred.\n(debug,message,libshell,An error occurred.)'
|
|
Packit Service |
a8c26c |
got=$(message; LANG=C message; message)
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" || $got == "$alt" ]] || {
|
|
Packit Service |
a8c26c |
EXP=$(printf %q "$exp")
|
|
Packit Service |
a8c26c |
ALT=$(printf %q "$alt")
|
|
Packit Service |
a8c26c |
GOT=$(printf %q "$got")
|
|
Packit Service |
a8c26c |
err_exit "LANG change not seen by function -- expected $EXP or $ALT, got $GOT"
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
a_thing=fish
|
|
Packit Service |
a8c26c |
got=$(print -r aa$"\\ahello \" /\\${a_thing}/\\"zz)
|
|
Packit Service |
a8c26c |
exp='aa(debug,'$Command',libshell,\ahello " /\fish/\)zz'
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "$\"...\" containing expansions fails: expected $exp, got $got"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
exp='(debug,'$Command',libshell,This is a string\n)'
|
|
Packit Service |
a8c26c |
typeset got=$"This is a string\n"
|
|
Packit Service |
a8c26c |
[[ $got == "$exp" ]] || err_exit "$\"...\" in assignment expansion fails: expected $exp got $got"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
unset LANG
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
LC_ALL=C
|
|
Packit Service |
a8c26c |
x=$"hello"
|
|
Packit Service |
a8c26c |
[[ $x == hello ]] || err_exit 'assignment of message strings not working'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
# tests for multibyte characteer at buffer boundary
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
print 'cat << \\EOF'
|
|
Packit Service |
a8c26c |
for ((i=1; i < 164; i++))
|
|
Packit Service |
a8c26c |
do print 123456789+123456789+123456789+123456789+123456789
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
print $'next character is multibyte<2b|>c<3d|\>foo'
|
|
Packit Service |
a8c26c |
for ((i=1; i < 10; i++))
|
|
Packit Service |
a8c26c |
do print 123456789+123456789+123456789+123456789+123456789
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
print EOF
|
|
Packit Service |
a8c26c |
} > script$$.1
|
|
Packit Service |
a8c26c |
chmod +x script$$.1
|
|
Packit Service |
a8c26c |
x=$( LC_ALL=debug $SHELL ./script$$.1)
|
|
Packit Service |
a8c26c |
[[ ${#x} == 8641 ]] || err_exit 'here doc contains wrong number of chars with multibyte locale'
|
|
Packit Service |
a8c26c |
[[ $x == *$'next character is multibyte<2b|>c<3d|\>foo'* ]] || err_exit "here_doc doesn't contain line with multibyte chars"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
x=$(LC_ALL=debug $SHELL -c 'x="a<2b|>c";print -r -- ${#x}')
|
|
Packit Service |
a8c26c |
(( x == 3 )) || err_exit 'character length of multibyte character should be 3'
|
|
Packit Service |
a8c26c |
x=$(LC_ALL=debug $SHELL -c 'typeset -R10 x="a<2b|>c";print -r -- "${x}"')
|
|
Packit Service |
a8c26c |
[[ $x == ' a<2b|>c' ]] || err_exit 'typeset -R10 should begin with three spaces'
|
|
Packit Service |
a8c26c |
x=$(LC_ALL=debug $SHELL -c 'typeset -L10 x="a<2b|>c";print -r -- "${x}"')
|
|
Packit Service |
a8c26c |
[[ $x == 'a<2b|>c ' ]] || err_exit 'typeset -L10 should end in three spaces'
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if $SHELL -c "export LC_ALL=en_US.UTF-8; c=$'\342\202\254'; [[ \${#c} == 1 ]]" 2>/dev/null
|
|
Packit Service |
a8c26c |
then LC_ALL=en_US.UTF-8
|
|
Packit Service |
a8c26c |
unset i p1 p2 x
|
|
Packit Service |
a8c26c |
for i in 9 b c d 20 1680 2000 2001 2002 2003 2004 2005 2006 2008 2009 200a 2028 2029 3000 # 1803 2007 202f 205f
|
|
Packit Service |
a8c26c |
do if ! eval "[[ \$'\\u[$i]' == [[:space:]] ]]"
|
|
Packit Service |
a8c26c |
then x+=,$i
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
done
|
|
Packit Service |
a8c26c |
if [[ $x ]]
|
|
Packit Service |
a8c26c |
then if [[ $x == ,*,* ]]
|
|
Packit Service |
a8c26c |
then p1=s p2="are not space characters"
|
|
Packit Service |
a8c26c |
else p1= p2="is not a space character"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
err_exit "unicode char$p1 ${x#?} $p2 in locale $LC_ALL"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
unset x
|
|
Packit Service |
a8c26c |
x=$(printf "hello\u[20ac]\xee world")
|
|
Packit Service |
a8c26c |
[[ $(print -r -- "$x") == $'hello\u[20ac]\xee world' ]] || err_exit '%q with unicode and non-unicode not working'
|
|
Packit Service |
a8c26c |
if [[ $(whence od) ]]
|
|
Packit Service |
a8c26c |
then got='68 65 6c 6c 6f e2 82 ac ee 20 77 6f 72 6c 64 0a'
|
|
Packit Service |
a8c26c |
[[ $(print -r -- "$x" | od -An -tx1) =~ $got ]] || err_exit "incorrect string from printf %q"
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
fi
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
exit $((Errors<125?Errors:125))
|
|
Packit Service |
a8c26c |
|