From 00470ccd12ec6dba92a8ab035ef3dc507fdb2527 Mon Sep 17 00:00:00 2001 From: Jenny Tam Date: Mon, 24 Jan 2022 18:28:05 -0800 Subject: [PATCH] Modified locale tests for issue 1063 (#1363) --- .../pdo_sqlsrv/pdo_1063_test_locale.php | 30 +++++++++------- .../sqlsrv/srv_1063_test_locale.php | 34 +++++++++++-------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/test/functional/pdo_sqlsrv/pdo_1063_test_locale.php b/test/functional/pdo_sqlsrv/pdo_1063_test_locale.php index 4140f80a..4e62cd61 100644 --- a/test/functional/pdo_sqlsrv/pdo_1063_test_locale.php +++ b/test/functional/pdo_sqlsrv/pdo_1063_test_locale.php @@ -48,30 +48,34 @@ $locale = ($_SERVER['argv'][2] ?? ''); echo "**Begin**" . PHP_EOL; -// Assuming LC_ALL is 'en_US.UTF-8', so is LC_CTYPE, except in PHP 8 (TODO) -// But default LC_MONETARY varies -$ctype = (PHP_MAJOR_VERSION == 8 && $setLocaleInfo == 0) ? 'C' : 'en_US.UTF-8'; +// Assuming LC_ALL is 'en_US.UTF-8', but default LC_CTYPE and LC_MONETARY vary in various +// platforms and PHP versions, so only check when $setLocaleInfo is 2 switch ($setLocaleInfo) { case 0: case 1: - $m = 'C'; $symbol = ''; $sep = ''; + $symbol = ''; $sep = ''; break; case 2: - $m = 'en_US.UTF-8'; $symbol = '$'; $sep = ','; + $symbol = '$'; $sep = ','; break; default: die("Unexpected $setLocaleInfo\n"); break; } -$m1 = setlocale(LC_MONETARY, 0); -if ($m !== $m1) { - echo "Unexpected LC_MONETARY: $m1" . PHP_EOL; -} -$c1 = setlocale(LC_CTYPE, 0); -if ($ctype !== $c1) { - echo "Unexpected LC_CTYPE: $c1" . PHP_EOL; - echo "LC_NUMERIC for $setLocaleInfo: " . setlocale(LC_NUMERIC, 0) . PHP_EOL; +if ($setLocaleInfo == 2) { + $ctype = 'en_US.UTF-8'; + $m = 'en_US.UTF-8'; + + $m1 = setlocale(LC_MONETARY, 0); + if ($m !== $m1) { + echo "Unexpected LC_MONETARY: $m1" . PHP_EOL; + } + $c1 = setlocale(LC_CTYPE, 0); + if ($ctype !== $c1) { + echo "Unexpected LC_CTYPE: $c1" . PHP_EOL; + echo "LC_NUMERIC for $setLocaleInfo: " . setlocale(LC_NUMERIC, 0) . PHP_EOL; + } } // Set a different locale, if the input is not empty diff --git a/test/functional/sqlsrv/srv_1063_test_locale.php b/test/functional/sqlsrv/srv_1063_test_locale.php index b8fea4d5..2ee88f56 100644 --- a/test/functional/sqlsrv/srv_1063_test_locale.php +++ b/test/functional/sqlsrv/srv_1063_test_locale.php @@ -13,7 +13,7 @@ function fatalError($message) die($message); } -function printMoney($amt, $info) +function printMoney($amt, $info) { // The money_format() function is deprecated in PHP 7.4, so use intl NumberFormatter $loc = setlocale(LC_MONETARY, 0); @@ -53,30 +53,34 @@ $locale = ($_SERVER['argv'][2] ?? ''); echo "**Begin**" . PHP_EOL; -// Assuming LC_ALL is 'en_US.UTF-8', so is LC_CTYPE, except in PHP 8 (TODO) -// But default LC_MONETARY varies -$ctype = (PHP_MAJOR_VERSION == 8 && $setLocaleInfo == 0) ? 'C' : 'en_US.UTF-8'; +// Assuming LC_ALL is 'en_US.UTF-8', but default LC_CTYPE and LC_MONETARY vary in various +// platforms and PHP versions, so only check when $setLocaleInfo is 2 switch ($setLocaleInfo) { case 0: case 1: - $m = 'C'; $symbol = ''; $sep = ''; + $symbol = ''; $sep = ''; break; case 2: - $m = 'en_US.UTF-8'; $symbol = '$'; $sep = ','; + $symbol = '$'; $sep = ','; break; default: fatalError("Unexpected $setLocaleInfo\n"); break; } -$m1 = setlocale(LC_MONETARY, 0); -if ($m !== $m1) { - echo "Unexpected LC_MONETARY: $m1" . PHP_EOL; -} -$c1 = setlocale(LC_CTYPE, 0); -if ($ctype !== $c1) { - echo "Unexpected LC_CTYPE: $c1" . PHP_EOL; - echo "LC_NUMERIC for $setLocaleInfo: " . setlocale(LC_NUMERIC, 0) . PHP_EOL; +if ($setLocaleInfo == 2) { + $ctype = 'en_US.UTF-8'; + $m = 'en_US.UTF-8'; + + $m1 = setlocale(LC_MONETARY, 0); + if ($m !== $m1) { + echo "Unexpected LC_MONETARY: $m1" . PHP_EOL; + } + $c1 = setlocale(LC_CTYPE, 0); + if ($ctype !== $c1) { + echo "Unexpected LC_CTYPE: $c1" . PHP_EOL; + echo "LC_NUMERIC for $setLocaleInfo: " . setlocale(LC_NUMERIC, 0) . PHP_EOL; + } } // Set a different locale, if the input is not empty @@ -86,7 +90,7 @@ if (!empty($locale)) { if ($loc !== $locale) { echo "Unexpected $loc for LC_ALL " . PHP_EOL; } - + // Currency symbol and thousands separator in Linux and macOS may be different if ($loc === 'de_DE.UTF-8') { $symbol = strtoupper(PHP_OS) === 'LINUX' ? '€' : 'Eu';