From f66a10a8c3b504074a51efa056cbf60316b5a5d0 Mon Sep 17 00:00:00 2001 From: Johnothan King Date: Tue, 30 Mar 2021 06:53:08 -0700 Subject: [PATCH] tests/variables.sh: Fix locale tests (#247) src/cmd/ksh93/tests/variables.sh: LC_* error tests: - Since operating systems validate locale strings differently, try a few different bad locale strings to find one that makes setlocale(2) fail, fixing test failures on OpenBSD and Debian. - Restore warning removed in aed5c6d7, issuing it if none of the bad locale strings produce a diagnostic. - Reenable test for diagnostic message disabled in aed5c6d7. Co-authored-by: Martijn Dekker --- src/cmd/ksh93/tests/variables.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/cmd/ksh93/tests/variables.sh b/src/cmd/ksh93/tests/variables.sh index 7e0f02154..3eb164d33 100755 --- a/src/cmd/ksh93/tests/variables.sh +++ b/src/cmd/ksh93/tests/variables.sh @@ -736,15 +736,22 @@ unset r v x ) Errors=$? # ensure error count survives subshell ( - errmsg=$({ LANG=bad_LOCALE; } 2>&1) - x=x + # $x must be an unknown locale. + for x in x x.b@d xx_XX xx_XX.b@d + do errmsg=$({ LANG=$x; } 2>&1) + [[ -n $errmsg ]] && break + done + if [[ -z $errmsg ]] + then warning "C library does not seem to verify locales: skipping LC_* tests" + exit $Errors + fi + for v in LC_ALL LC_CTYPE LC_MESSAGES LC_COLLATE LC_NUMERIC do nameref r=$v unset $v [[ $r ]] && err_exit "unset $v failed -- expected '', got '$r'" - # Test disabled: some system libraries do not verify the locale, so no diagnostic is printed. - #d=$($SHELL -c "$v=$x" 2>&1) - #[[ $d ]] || err_exit "$v=$x failed -- expected locale diagnostic" + d=$($SHELL -c "$v=$x" 2>&1) + [[ $d ]] || err_exit "$v=$x failed -- expected locale diagnostic" { g=$( r=$x; print -- $r ); } 2>/dev/null [[ $g == '' ]] || err_exit "$v=$x failed -- expected '', got '$g'" { g=$( r=C; r=$x; print -- $r ); } 2>/dev/null