1
0
mirror of https://github.com/php/php-src.git synced 2026-04-02 13:43:02 +02:00
Files
archived-php-src/ext/mbstring/tests/big5_encoding.phpt
Alex Dowad 73c6a5b89d Fix conversion of Big5 and CP950 text (and add test suite)
- Truncated multi-byte characters are treated as an error
- Follow recommended mappings from Unicode consortium
2021-07-19 12:17:00 +02:00

40 lines
1.3 KiB
PHP

--TEST--
Exhaustive test of verification and conversion of Big5 text
--EXTENSIONS--
mbstring
--SKIPIF--
<?php
if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
?>
--FILE--
<?php
include('encoding_tests.inc');
srand(1000); // Make results consistent
mb_substitute_character(0x25); // '%'
readConversionTable(__DIR__ . '/data/BIG5.txt', $toUnicode, $fromUnicode);
// Non-reversible mappings (two different BIG5 codepoints map to same Unicode codepoint)
$fromUnicode["\x25\x50"] = "\xA2\xA4";
$fromUnicode["\x25\x5E"] = "\xA2\xA5";
$fromUnicode["\x25\x61"] = "\xA2\xA7";
$fromUnicode["\x25\x6A"] = "\xA2\xA6";
$fromUnicode["\x25\x6D"] = "\xA2\x7E";
$fromUnicode["\x25\x6E"] = "\xA2\xA1";
$fromUnicode["\x25\x6F"] = "\xA2\xA3";
$fromUnicode["\x25\x70"] = "\xA2\xA2";
findInvalidChars($toUnicode, $invalid, $truncated);
testAllValidChars($toUnicode, 'BIG5', 'UTF-16BE', false);
testAllInvalidChars($invalid, $toUnicode, 'BIG5', 'UTF-16BE', "\x00%");
testTruncatedChars($truncated, 'BIG5', 'UTF-16BE', "\x00%");
echo "Tested BIG5 -> UTF-16BE\n";
testAllValidChars($fromUnicode, 'UTF-16BE', 'BIG5', false);
findInvalidChars($fromUnicode, $invalid, $unused, array_fill_keys(range(0,0xFF), 2));
convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'BIG5', '%');
echo "Tested UTF-16BE -> BIG5\n";
?>
--EXPECT--
Tested BIG5 -> UTF-16BE
Tested UTF-16BE -> BIG5