A set of dependency-free basic internationalization tools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
741 KiB

<?php
/** @license MIT
6 years ago
* Copyright 2018 J. King et al.
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace MensBeam\Intl\TestCase\Encoding;
use MensBeam\Intl\Encoding\GBK;
use MensBeam\Intl\Encoding\GB18030;
use MensBeam\Intl\Encoding\Encoding;
use MensBeam\Intl\Encoding\EncoderException;
class TestGB18030 extends \MensBeam\Intl\Test\CoderDecoderTest {
6 years ago
protected $testedClass = GB18030::class;
/*
Char 0 U+007A (1 byte) Offset 0
Char 1 U+00A2 (4 bytes) Offset 1
Char 2 U+6C34 (2 bytes) Offset 5
Char 3 U+1D11E (4 bytes) Offset 7
Char 4 U+F8FF (4 bytes) Offset 11
Char 5 U+10FFFD (4 bytes) Offset 15
Char 6 U+FFFE (4 bytes) Offset 19
End of string at char 7, offset 23
*/
protected $seekString = "7A 81 30 84 34 CB AE 94 32 BE 34 84 30 81 30 E3 32 9A 33 84 31 A4 38";
6 years ago
protected $seekCodes = [0x007A, 0x00A2, 0x6C34, 0x1D11E, 0xF8FF, 0x10FFFD, 0xFFFE];
protected $seekOffsets = [0, 1, 5, 7, 11, 15, 19, 23];
6 years ago
/* This string contains an invalid character sequence sandwiched between two null characters */
protected $brokenChar = "00 FF 00";
6 years ago
public function tearDown(): void {
6 years ago
$this->testedClass = GB18030::class;
}
/**
* @dataProvider provideCodePoints
* @covers MensBeam\Intl\Encoding\GB18030::encode
* @covers MensBeam\Intl\Encoding\GB18030::err
* @covers MensBeam\Intl\Encoding\GBK::encode
* @covers MensBeam\Intl\Encoding\GBK::err
*/
6 years ago
public function testEncodeCodePoints(bool $fatal, $input, $exp, $class = self::class) {
$this->testedClass = $class;
return parent::testEncodeCodePoints($fatal, $input, $exp);
}
/**
* @dataProvider provideStrings
* @covers MensBeam\Intl\Encoding\GB18030::__construct
* @covers MensBeam\Intl\Encoding\GB18030::nextCode
*/
public function testDecodeMultipleCharactersAsCodePoints(string $input, array $exp) {
6 years ago
return parent::testDecodeMultipleCharactersAsCodePoints($input, $exp);
}
/**
* @dataProvider provideStrings
* @covers MensBeam\Intl\Encoding\GB18030::__construct
* @covers MensBeam\Intl\Encoding\GB18030::nextChar
*/
public function testDecodeMultipleCharactersAsStrings(string $input, array $exp) {
6 years ago
return parent::testDecodeMultipleCharactersAsStrings($input, $exp);
}
/**
* @dataProvider provideStrings
* @covers MensBeam\Intl\Encoding\GB18030::seekBack
*/
public function testSTepBackThroughAString(string $input, array $exp) {
6 years ago
return parent::testSTepBackThroughAString($input, $exp);
}
/**
* @covers MensBeam\Intl\Encoding\GB18030::seek
* @covers MensBeam\Intl\Encoding\GB18030::posChar
* @covers MensBeam\Intl\Encoding\GB18030::posByte
* @covers MensBeam\Intl\Encoding\GB18030::rewind
*/
public function testSeekThroughAString() {
6 years ago
return parent::testSeekThroughAString();
}
/**
* @covers MensBeam\Intl\Encoding\GB18030::posChar
* @covers MensBeam\Intl\Encoding\GB18030::posByte
4 years ago
* @covers MensBeam\Intl\Encoding\GB18030::eof
*/
public function testTraversePastTheEndOfAString() {
6 years ago
return parent::testTraversePastTheEndOfAString();
}
/**
* @covers MensBeam\Intl\Encoding\GB18030::peekChar
* @covers MensBeam\Intl\Encoding\GB18030::stateSave
* @covers MensBeam\Intl\Encoding\GB18030::stateApply
*/
public function testPeekAtCharacters() {
6 years ago
return parent::testPeekAtCharacters();
}
/**
* @covers MensBeam\Intl\Encoding\GB18030::peekCode
* @covers MensBeam\Intl\Encoding\GB18030::stateSave
* @covers MensBeam\Intl\Encoding\GB18030::stateApply
*/
public function testPeekAtCodePoints() {
6 years ago
return parent::testPeekAtCodePoints();
}
/**
* @dataProvider provideStrings
4 years ago
* @covers MensBeam\Intl\Encoding\GB18030::lenChar
* @covers MensBeam\Intl\Encoding\GB18030::lenByte
* @covers MensBeam\Intl\Encoding\GB18030::stateSave
* @covers MensBeam\Intl\Encoding\GB18030::stateApply
*/
public function testGetStringLength(string $input, array $points) {
6 years ago
return parent::testGetStringLength($input, $points);
}
/**
* @covers MensBeam\Intl\Encoding\GB18030::err
*/
public function testReplacementModes() {
6 years ago
return parent::testReplacementModes();
}
/**
* @dataProvider provideStrings
* @covers MensBeam\Intl\Encoding\GB18030::rewind
* @covers MensBeam\Intl\Encoding\GB18030::chars
* @covers MensBeam\Intl\Encoding\GB18030::codes
*/
public function testIterateThroughAString(string $input, array $exp) {
6 years ago
return parent::testIterateThroughAString($input, $exp);
}
/**
* @dataProvider provideStrings
* @coversNothing
*/
public function testIterateThroughAStringAllowingSurrogates(string $input, array $strictExp, array $relaxedExp = null) {
return parent::testIterateThroughAStringAllowingSurrogates($input, $strictExp, $relaxedExp);
}
public function provideCodePoints() {
// bytes confirmed using Firefox
$series_gb18030 = [
6 years ago
'U+0064 (HTML)' => [false, 0x64, "64"],
'U+0064 (fatal)' => [true, 0x64, "64"],
'U+20AC (HTML)' => [false, 0x20AC, "A2 E3"],
'U+20AC (fatal)' => [true, 0x20AC, "A2 E3"],
'U+2164 (HTML)' => [false, 0x2164, "A2 F5"],
'U+2164 (fatal)' => [true, 0x2164, "A2 F5"],
'U+3A74 (HTML)' => [false, 0x3A74, "82 31 97 30"],
'U+3A74 (fatal)' => [true, 0x3A74, "82 31 97 30"],
'U+E7C7 (HTML)' => [false, 0xE7C7, "81 35 F4 37"],
'U+E7C7 (fatal)' => [true, 0xE7C7, "81 35 F4 37"],
'U+1D11E (HTML)' => [false, 0x1D11E, "94 32 BE 34"],
'U+1D11E (fatal)' => [true, 0x1D11E, "94 32 BE 34"],
'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("&#58853;")],
'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)],
'-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
];
$series_gbk = [
6 years ago
'U+0064 (HTML)' => [false, 0x64, "64"],
'U+0064 (fatal)' => [true, 0x64, "64"],
'U+20AC (HTML)' => [false, 0x20AC, "80"],
'U+20AC (fatal)' => [true, 0x20AC, "80"],
'U+2164 (HTML)' => [false, 0x2164, "A2 F5"],
'U+2164 (fatal)' => [true, 0x2164, "A2 F5"],
'U+3A74 (HTML)' => [false, 0x3A74, bin2hex("&#14964;")],
'U+3A74 (fatal)' => [true, 0x3A74, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)],
'U+E7C7 (HTML)' => [false, 0xE7C7, bin2hex("&#59335;")],
'U+E7C7 (fatal)' => [true, 0xE7C7, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)],
'U+1D11E (HTML)' => [false, 0x1D11E, bin2hex("&#119070;")],
'U+1D11E (fatal)' => [true, 0x1D11E, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)],
'U+E5E5 (HTML)' => [false, 0xE5E5, bin2hex("&#58853;")],
'U+E5E5 (fatal)' => [true, 0xE5E5, new EncoderException("", Encoding::E_UNAVAILABLE_CODE_POINT)],
'-1 (HTML)' => [false, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'-1 (fatal)' => [true, -1, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'0x110000 (HTML)' => [false, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
'0x110000 (fatal)' => [true, 0x110000, new EncoderException("", Encoding::E_INVALID_CODE_POINT)],
];
foreach ($series_gb18030 as $name => $test) {
array_push($test, GB18030::class);
yield "gb18030 $name" => $test;
}
foreach ($series_gbk as $name => $test) {
array_push($test, GBK::class);
yield "GBK $name" => $test;
6 years ago
}
}
public function provideStrings() {
return [
'empty string' => ["", []],
// valid single characters
'sanity check' => ["40", [64]],
'special case for 0x80' => ["80", [8364]],
'four-byte special case' => ["81 35 F4 37", [59335]],
'two-byte character' => ["A8 4E", [8735]],
'four-byte character' => ["82 31 A2 37", [15081]],
// cut sequences
'EOF after first byte' => ["82", [65533]],
'EOF after second byte' => ["82 30", [65533]],
'EOF after third byte' => ["82 30 81", [65533]],
// invalid sequences
'bad first byte' => ["FF 35 F4 37", [65533, 53, 65533]],
'bad second byte' => ["81 FF F4 37", [65533, 65533]],
'bad third byte' => ["81 35 FF 37", [65533, 53, 65533, 55]],
'bad fourth byte' => ["81 35 F4 FF", [65533, 53, 65533]],
'control first byte' => ["00 35 F4 37", [0, 53, 65533]],
'control second byte' => ["81 00 F4 37", [65533, 0, 65533]],
'control third byte' => ["81 35 00 37", [65533, 53, 0, 55]],
'control fourth byte' => ["81 35 F4 00", [65533, 53, 65533, 0]],
// invalid sequences with clean EOF
'bad first byte (padded)' => ["FF 35 F4 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]],
'bad second byte (padded)' => ["81 FF F4 37 00 00 00 00", [65533, 65533, 55, 0, 0, 0, 0]],
'bad third byte (padded)' => ["81 35 FF 37 00 00 00 00", [65533, 53, 65533, 55, 0, 0, 0, 0]],
'bad fourth byte (padded)' => ["81 35 F4 FF 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0]],
'control first byte (padded)' => ["00 35 F4 37 00 00 00 00", [0, 53, 65533, 55, 0, 0, 0, 0]],
'control second byte (padded)' => ["81 00 F4 37 00 00 00 00", [65533, 0, 65533, 55, 0, 0, 0, 0]],
'control third byte (padded)' => ["81 35 00 37 00 00 00 00", [65533, 53, 0, 55, 0, 0, 0, 0]],
'control fourth byte (padded)' => ["81 35 F4 00 00 00 00 00", [65533, 53, 65533, 0, 0, 0, 0, 0]],
// out-of-range sequences
'void sequence' => ["84 32 A4 39", [65533]],
'void sequence 2' => ["FE 39 FE 39", [65533]],
// backward seeking tests
'seek test 1' => ["81 81 81 30", [20118, 65533]],
'seek test 2' => ["81 81 80", [20118, 8364]],
'seek test 3' => ["81 81 00", [20118, 0]],
'seek test 4' => ["81 81 81 00", [20118, 65533, 0]],
'seek test 5' => ["81 30 30 30", [65533, 48, 48, 48]],
'seek test 6' => ["81 30 81 81", [65533, 48, 20118]],
'seek test 7' => ["30 30 81 81", [48, 48, 20118]],
'seek test 8' => ["F8 83 FE 80", [40229, 18211]],
'seek test 1 (padded)' => ["00 00 00 00 81 81 81 30 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 48, 0, 0, 0, 0]],
'seek test 2 (padded)' => ["00 00 00 00 81 81 80 00 00 00 00", [0, 0, 0, 0, 20118, 8364, 0, 0, 0, 0]],
'seek test 3 (padded)' => ["00 00 00 00 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 0, 0, 0, 0, 0]],
'seek test 4 (padded)' => ["00 00 00 00 81 81 81 00 00 00 00 00", [0, 0, 0, 0, 20118, 65533, 0, 0, 0, 0, 0]],
'seek test 5 (padded)' => ["00 00 00 00 81 30 30 30 00 00 00 00", [0, 0, 0, 0, 65533, 48, 48, 48, 0, 0, 0, 0]],
'seek test 6 (padded)' => ["00 00 00 00 81 30 81 81 00 00 00 00", [0, 0, 0, 0, 65533, 48, 20118, 0, 0, 0, 0]],
'seek test 7 (padded)' => ["00 00 00 00 30 30 81 81 00 00 00 00", [0, 0, 0, 0, 48, 48, 20118, 0, 0, 0, 0]],
'seek test 8 (padded)' => ["00 00 00 00 F8 83 FE 80 00 00 00 00", [0, 0, 0, 0, 40229, 18211, 0, 0, 0, 0]],
];
}
/**
* @group optional
*/
public function testPedanticallyDecodeSingleCharactersAsCodePoint() {
$series = [
'two-byte GBK' => [["A1E8","A1EC","A1A7","A1E3","A1C0","A1A4","A1C1","A8A4","A8A2","A8A8","A8A6","A8BA","A8AC","A8AA","A8B0","A8AE","A1C2","A8B4","A8B2","A8B9","A8A1","A8A5","A8A7","A8A9","A8BD","A8BE","A8AD","A8B1","A8A3","A8AB","A8AF","A8B3","A8B5","A8B6","A8B7","A8B8","A8BF","A8BB","A8C0","A1A6","A1A5","A840","A841","A842","A6A1","A6A2","A6A3","A6A4","A6A5","A6A6","A6A7","A6A8","A6A9","A6AA","A6AB","A6AC","A6AD","A6AE","A6AF","A6B0","A6B1","A6B2","A6B3","A6B4","A6B5","A6B6","A6B7","A6B8","A6C1","A6C2","A6C3","A6C4","A6C5","A6C6","A6C7","A6C8","A6C9","A6CA","A6CB","A6CC","A6CD","A6CE","A6CF","A6D0","A6D1","A6D2","A6D3","A6D4","A6D5","A6D6","A6D7","A6D8","A7A7","A7A1","A7A2","A7A3","A7A4","A7A5","A7A6","A7A8","A7A9","A7AA","A7AB","A7AC","A7AD","A7AE","A7AF","A7B0","A7B1","A7B2","A7B3","A7B4","A7B5","A7B6","A7B7","A7B8","A7B9","A7BA","A7BB","A7BC","A7BD","A7BE","A7BF","A7C0","A7C1","A7D1","A7D2","A7D3","A7D4","A7D5","A7D6","A7D8","A7D9","A7DA","A7DB","A7DC","A7DD","A7DE","A7DF","A7E0","A7E1","A7E2","A7E3","A7E4","A7E5","A7E6","A7E7","A7E8","A7E9","A7EA","A7EB","A7EC","A7ED","A7EE","A7EF","A7F0","A7F1","A7D7","A95C","A843","A1AA","A844","A1AC","A1AE","A1AF","A1B0","A1B1","A845","A1AD","A1EB","A1E4","A1E5","A846","A1F9","A2E3","A1E6","A847","A848","A1ED","A959","A2F1","A2F2","A2F3","A2F4","A2F5","A2F6","A2F7","A2F8","A2F9","A2FA","A2FB","A2FC","A2A1","A2A2","A2A3","A2A4","A2A5","A2A6","A2A7","A2A8","A2A9","A2AA","A1FB","A1FC","A1FA","A1FD","A849","A84A","A84B","A84C","A1CA","A1C7","A1C6","A84D","A1CC","A1D8","A1DE","A84E","A1CF","A84F","A1CE","A1C4","A1C5","A1C9","A1C8","A1D2","A1D3","A1E0","A1DF","A1C3","A1CB","A1D7","A1D6","A1D5","A850","A1D9","A1D4","A1DC","A1DD","A851","A852","A1DA","A1DB","A892","A1D1","A1CD","A853","A1D0","A2D9","A2DA","A2DB","A2DC","A2DD","A2DE","A2DF","A2E0","A2E1","A2E2","A2C5","A2C6","A2C7","A2C8","A2C9","A2CA","A2CB","A2CC","A2CD","A2CE","A2CF","A2D0","A2D1","A2D2","A2D3","A2D4","A2D5","A2D6","A2D7","A2D8","A2B1","A2B2","A2B3","A2B4","A2B5","A2B6","A2B7","A2B8","A2B9","A2BA","A2BB","A2BC","A2BD","A2BE","A2BF","A2C0","A2C1","A2C2","A2C3","A2C4","A9A4","A9A5","A9A6","A9A7","A9A8","A9A9","A9AA","A9AB","A9AC","A9AD","A9AE","A9AF","A9B0","A9B1","A9B2","A9B3","A9B4","A9B5","A9B6","A9B7","A9B8","A9B9","A9BA","A9BB","A9BC","A9BD","A9BE","A9BF","A9C0","A9C1","A9C2","A9C3","A9C4","A9C5","A9C6","A9C7","A9C8","A9C9","A9CA","A9CB","A9CC","A9CD","A9CE","A9CF","A9D0","A9D1","A9D2","A9D3","A9D4","A9D5","A9D6","A9D7","A9D8","A9D9","A9DA","A9DB","A9DC","A9DD","A9DE","A9DF","A9E0","A9E1","A9E2","A9E3","A9E4","A9E5","A9E6","A9E7","A9E8","A9E9","A9EA","A9EB","A9EC","A9ED","A9EE","A9EF","A854","A855","A856","A857","A858","A859","A85A","A85B","A85C","A85D","A85E","A85F","A860","A861","A862","A863","A864","A865","A866","A867","A868","A869","A86A","A86B","A86C","A86D","A86E","A86F","A870","A871","A872","A873","A874","A875","A876","A877","A878","A879","A87A","A87B","A87C","A87D","A87E","A880","A881","A882","A883","A884","A885","A886","A887","A888","A889","A88A","A1F6","A1F5","A1F8","A1F7","A88B","A88C","A1F4","A1F3","A1F0","A1F2","A1F1","A88D","A88E","A88F","A890","A1EF","A1EE","A891","A1E2","A1E1","FE50","FE54","FE57","FE58","FE5D","FE5E","FE6B","FE6E","FE71","FE73","FE74","FE75","FE79","FE84","A98A","A98B","A98C","A98D","A98E","A98F","A990","A991","A992","A993","A994","A995","A1A1","A1A2","A1A3","A1A8","A1A9","A965","A996","A1B4","A1B5","A1B6","A1B7","A1B8","A1B9","A1BA","A1BB","A1BE","A1BF","A893","A1FE","A1B2","A1B3","A1BC","A1BD","A894","A895","A940","A941","A942","A943","A944","A945","A946","A947","A948","A989","A4A1","A4A2","A4A3","A4A4","A4A5","A4A6","A4A7","A4A8","A4A9","A4AA","A4AB","A4AC","A4AD","A4AE","A4AF","A4B0","A4B1","A4B2","A4B3","A4B4","A4B5","A4B6","A4B7","A4B8","A4B9","A4BA","A4BB","A4BC","A4BD","A4BE","A4BF","A4C0","A4C1","A4C2","A4C3","A4C4","A4C5","A4C6","A4C7","A4C8","A4C9","A4CA","A4CB","A4CC","A4CD","A4CE","A4CF","A4D0","A4D1","A4D2","A4D3","A4D4","A4D5","A4D6","A4D7","A4D8","A4D9","A4DA","A4DB","A4DC","A4DD","A4DE","A4DF","A4E0","A4E1","A4E2","A4E3","A4E4","A4E5","A4E6","A4E7","A4
'four-byte Han' => [["82358F33","82358F34","82358F35","82358F36","82358F37","82358F38","82358F39","82359030","82359031","82359032","82359033","82359034","82359035","82359036","82359037","82359038","82359039","82359130","82359131","82359132","84308131","84308132","84308133","84308134","84308135","84308136","84308137","84308138","84308139","84308230","84308231","84308232","84308233","84308234","84308235","84308236","84308237","84308238","84308239","84308330","84308331","84308332","84308333","84308334","84308335","84308336","84308337","84308338","84308339","84308430","84308431","84308432","84308433","84308434","84308435","84308436","84308437","84308438","84308439","84308530","84308531","84308532","84308533","84308534","84308535","84308536","84308537","84308538","84308539","84308630","84308631","84308632","84308633","84308634","84308635","84308636","84308637","84308638","84308639","84308730","84308731","84308732","84308733","84308734","84308735","84308736","84308737","84308738","84308739","84308830","84308831","84308832","84308833","84308834","84308835","84308836","84308837","84308838","84308839","84308930","84308931","84308932","84308933","84308934","84308935","84308936","84308937","84308938","84308939","84308A30","84308A31","84308A32","84308A33","84308A34","84308A35","84308A36","84308A37","84308A38","84308A39","84308B30","84308B31","84308B32","84308B33","84308B34","84308B35","84308B36","84308B37","84308B38","84308B39","84308C30","84308C31","84308C32","84308C33","84308C34","84308C35","84308C36","84308C37","84308C38","84308C39","84308D30","84308D31","84308D32","84308D33","84308D34","84308D35","84308D36","84308D37","84308D38","84308D39","84308E30","84308E31","84308E32","84308E33","84308E34","84308E35","84308E36","84308E37","84308E38","84308E39","84308F30","84308F31","84308F32","84308F33","84308F34","84308F35","84308F36","84308F37","84308F38","84308F39","84309030","84309031","84309032","84309033","84309034","84309035","84309036","84309037","84309038","84309039","84309130","84309131","84309132","84309133","84309134","84309135","84309136","84309137","84309138","84309139","84309230","84309231","84309232","84309233","84309234","84309235","84309236","84309237","84309238","84309239","84309330","84309331","84309332","84309333","84309334","84309335","84309336","84309337","84309338","84309339","84309430","84309431","84309432","84309433","84309434","84309435","84309436","84309437","84309438","84309439","84309530","84309531","84309532","84309533","84309534","84309535","84309536","84309537","84309538","84309539","84309630","84309631","84309632","84309633","84309634","84309635","84309636","84309637","84309638","84309639","84309730","84309731","84309732","84309733","84309734","84309735","84309736","84309737","84309738","84309739","84309830","84309831","84309832","84309833","84309834","84309835","84309836","84309837","84309838","84309839","84309930","84309931","84309932","84309933","84309934","84309935","84309936","84309937","84309938","84309939","84309A30","84309A31","84309A32","84309A33","84309A34","84309A35","84309A36","84309A37","84309A38","84309A39","84309B30","84309B31","84309B32","84309B33","84309B34","84309B35","84309B36","84309B37","84309B38","84309B39","84309C30","84309C31","84309C32","84309C33","84309C34","84309C35","84309C36","84309C37","84309C38","84309C39","84309D30","84309D31","84309D32","84309D33","84309D34","84309D35","84309D36","84309D37","84309D38","84309D39","84309E30","84309E31","84309E32","84309E33","84309E34","84309E35","84309E36","84309E37","84309E38","84309E39","84309F30","84309F31","84309F32","84309F33","84309F34","84309F35","84309F36","84309F37","84309F38","84309F39","8430A030","8430A031","8430A032","8430A033","8430A034","8430A035","8430A036","8430A037","8430A038","8430A039","8430A130","8430A131","8430A132","8430A133","8430A134","8430A135","8430A136","8430A137","8430A138","8430A139","8430A230","8430A231","8430A232","8430A233","8430A234","8430A235","8430A236","8430A237","8430A238","8430A239","8430A330","8430A331","8430A332","8430A333","8430A334","8430A335","8430A338","8430A339","8430A430","8430A431","84
'four-byte Hangul' => [["8237CF35","8237CF36","8237CF37","8237CF38","8237CF39","8237D030","8237D031","8237D032","8237D033","8237D034","8237D035","8237D036","8237D037","8237D038","8237D039","8237D130","8237D131","8237D132","8237D133","8237D134","8237D135","8237D136","8237D137","8237D138","8237D139","8237D230","8237D231","8237D232","8237D233","8237D234","8237D235","8237D236","8237D237","8237D238","8237D239","8237D330","8237D331","8237D332","8237D333","8237D334","8237D335","8237D336","8237D337","8237D338","8237D339","8237D430","8237D431","8237D432","8237D433","8237D434","8237D435","8237D436","8237D437","8237D438","8237D439","8237D530","8237D531","8237D532","8237D533","8237D534","8237D535","8237D536","8237D537","8237D538","8237D539","8237D630","8237D631","8237D632","8237D633","8237D634","8237D635","8237D636","8237D637","8237D638","8237D639","8237D730","8237D731","8237D732","8237D733","8237D734","8237D735","8237D736","8237D737","8237D738","8237D739","8237D830","8237D831","8237D832","8237D833","8237D834","8237D835","8237D836","8237D837","8237D838","8237D839","8237D930","8237D931","8237D932","8237D933","8237D934","8237D935","8237D936","8237D937","8237D938","8237D939","8237DA30","8237DA31","8237DA32","8237DA33","8237DA34","8237DA35","8237DA36","8237DA37","8237DA38","8237DA39","8237DB30","8237DB31","8237DB32","8237DB33","8237DB34","8237DB35","8237DB36","8237DB37","8237DB38","8237DB39","8237DC30","8237DC31","8237DC32","8237DC33","8237DC34","8237DC35","8237DC36","8237DC37","8237DC38","8237DC39","8237DD30","8237DD31","8237DD32","8237DD33","8237DD34","8237DD35","8237DD36","8237DD37","8237DD38","8237DD39","8237DE30","8237DE31","8237DE32","8237DE33","8237DE34","8237DE35","8237DE36","8237DE37","8237DE38","8237DE39","8237DF30","8237DF31","8237DF32","8237DF33","8237DF34","8237DF35","8237DF36","8237DF37","8237DF38","8237DF39","8237E030","8237E031","8237E032","8237E033","8237E034","8237E035","8237E036","8237E037","8237E038","8237E039","8237E130","8237E131","8237E132","8237E133","8237E134","8237E135","8237E136","8237E137","8237E138","8237E139","8237E230","8237E231","8237E232","8237E233","8237E234","8237E235","8237E236","8237E237","8237E238","8237E239","8237E330","8237E331","8237E332","8237E333","8237E334","8237E335","8237E336","8237E337","8237E338","8237E339","8237E430","8237E431","8237E432","8237E433","8237E434","8237E435","8237E436","8237E437","8237E438","8237E439","8237E530","8237E531","8237E532","8237E533","8237E534","8237E535","8237E536","8237E537","8237E538","8237E539","8237E630","8237E631","8237E632","8237E633","8237E634","8237E635","8237E636","8237E637","8237E638","8237E639","8237E730","8237E731","8237E732","8237E733","8237E734","8237E735","8237E736","8237E737","8237E738","8237E739","8237E830","8237E831","8237E832","8237E833","8237E834","8237E835","8237E836","8237E837","8237E838","8237E839","8237E930","8237E931","8237E932","8237E933","8237E934","8237E935","8237E936","8237E937","8237E938","8237E939","8237EA30","8237EA31","8237EA32","8237EA33","8237EA34","8237EA35","8237EA36","8237EA37","8237EA38","8237EA39","8237EB30","8237EB31","8237EB32","8237EB33","8237EB34","8237EB35","8237EB36","8237EB37","8237EB38","8237EB39","8237EC30","8237EC31","8237EC32","8237EC33","8237EC34","8237EC35","8237EC36","8237EC37","8237EC38","8237EC39","8237ED30","8237ED31","8237ED32","8237ED33","8237ED34","8237ED35","8237ED36","8237ED37","8237ED38","8237ED39","8237EE30","8237EE31","8237EE32","8237EE33","8237EE34","8237EE35","8237EE36","8237EE37","8237EE38","8237EE39","8237EF30","8237EF31","8237EF32","8237EF33","8237EF34","8237EF35","8237EF36","8237EF37","8237EF38","8237EF39","8237F030","8237F031","8237F032","8237F033","8237F034","8237F035","8237F036","8237F037","8237F038","8237F039","8237F130","8237F131","8237F132","8237F133","8237F134","8237F135","8237F136","8237F137","8237F138","8237F139","8237F230","8237F231","8237F232","8237F233","8237F234","8237F235","8237F236","8237F237","8237F238","8237F239","8237F330","8237F331","8237F332","8237F333","8237F334","8237F335","8237F336","8237F337","8237F338","8237F339","8237F430","8237F431","8237F432","8237F433",
'four-byte miscellaneous' => [["81308432","81308433","81308434","81308435","81308436","81308437","81308438","81308439","81308530","81308531","81308532","81308533","81308534","81308535","81308536","81308537","81308538","81308539","81308630","81308631","81308632","81308633","81308634","81308635","81308636","81308637","81308638","81308639","81308730","81308731","81308732","81308733","81308734","81308735","81308736","81308737","81308738","81308739","81308830","81308831","81308832","81308833","81308834","81308835","81308836","81308837","81308838","81308839","81308930","81308931","81308932","81308933","81308934","81308935","81308936","81308937","81308938","81308939","81308A30","81308A31","81308A32","81308A33","81308A34","81308A35","81308A36","81308A37","81308A38","81308A39","81308B30","81308B31","81308B32","81308B33","81308B34","81308B35","81308B36","81308B37","81308B38","81308B39","81308C30","81308C31","81308C32","81308C33","81308C34","81308C35","81308C36","81308C37","81308C38","81308C39","81308D30","81308D31","81308D32","81308D33","81308D34","81308D35","81308D36","81308D37","81308D38","81308D39","81308E30","81308E31","81308E32","81308E33","81308E34","81308E35","81308E36","81308E37","81308E38","81308E39","81308F30","81308F31","81308F32","81308F33","81308F34","81308F35","81308F36","81308F37","81308F38","81308F39","81309030","81309031","81309032","81309033","81309034","81309035","81309036","81309037","81309038","81309039","81309130","81309131","81309132","81309133","81309134","81309135","81309136","81309137","81309138","81309139","81309230","81309231","81309232","81309233","81309234","81309235","81309236","81309237","81309238","81309239","81309330","81309331","81309332","81309333","81309334","81309335","81309336","81309337","81309338","81309339","81309430","81309431","81309432","81309433","81309434","81309435","81309436","81309437","81309438","81309439","81309530","81309531","81309532","81309533","81309534","81309535","81309536","81309537","81309538","81309539","81309630","81309631","81309632","81309633","81309634","81309635","81309636","81309637","81309638","81309639","81309730","81309731","81309732","81309733","81309734","81309735","81309736","81309737","81309738","81309739","81309830","81309831","81309832","81309833","81309834","81309835","81309836","81309837","81309838","81309839","81309930","81309931","81309932","81309933","81309934","81309935","81309936","81309937","81309938","81309939","81309A30","81309A31","81309A32","81309A33","81309A34","81309A35","81309A36","81309A37","81309A38","81309A39","81309B30","81309B31","81309B32","81309B33","81309B34","81309B35","81309B36","81309B37","81309B38","81309B39","81309C30","81309C31","81309C32","81309C33","81309C34","81309C35","81309C36","81309C37","81309C38","81309C39","81309D30","81309D31","81309D32","81309D33","81309D34","81309D35","81309D36","81309D37","81309D38","81309D39","81309E30","81309E31","81309E32","81309E33","81309E34","81309E35","81309E36","81309E37","81309E38","81309E39","81309F30","81309F31","81309F32","81309F33","81309F34","81309F35","81309F36","81309F37","81309F38","81309F39","8130A030","8130A031","8130A032","8130A033","8130A034","8130A035","8130A036","8130A037","8130A038","8130A039","8130A130","8130A131","8130A132","8130A133","8130A134","8130A135","8130A136","8130A137","8130A138","8130A139","8130A230","8130A231","8130A232","8130A233","8130A234","8130A235","8130A236","8130A237","8130A238","8130A239","8130A330","8130A331","8130A332","8130A333","8130A334","8130A335","8130A336","8130A337","8130A338","8130A339","8130A430","8130A431","8130A432","8130A433","8130A434","8130A435","8130A436","8130A437","8130A438","8130A439","8130A530","8130A531","8130A532","8130A533","8130A534","8130A535","8130A536","8130A537","8130A538","8130A539","8130A630","8130A631","8130A632","8130A633","8130A634","8130A635","8130A636","8130A637","8130A638","8130A639","8130A730","8130A731","8130A732","8130A733","8130A734","8130A735","8130A736","8130A737","8130A738","8130A739","8130A830","8130A831","8130A832","8130A833","8130A834","8130A835","8130A836","8130A837","8130A838","8130A839","813
'four-byte private use' => [["8336C739","8336C830","8336C831","8336C832","8336C833","8336C834","8336C835","8336C836","8336C837","8336C838","8336C839","8336C930","8336C931","8336C932","8336C933","8336C934","8336C935","8336C936","8336C937","8336C938","8336C939","8336CA30","8336CA31","8336CA32","8336CA33","8336CA34","8336CA35","8336CA36","8336CA37","8336CA38","8336CA39","8336CB30","8336CB31","8336CB32","8336CB33","8336CB34","8336CB35","8336CB36","8336CB37","8336CB38","8336CB39","8336CC30","8336CC31","8336CC32","8336CC33","8336CC34","8336CC35","8336CC36","8336CC37","8336CC38","8336CC39","8336CD30","8336CD31","8336CD32","8336CD33","8336CD34","8336CD35","8336CD36","8336CD37","8336CD38","8336CD39","8336CE30","8336CE31","8336CE32","8336CE33","8336CE34","8336CE35","8336CE36","8336CE37","8336CE38","8336CE39","8336CF30","8336CF31","8336CF32","8336CF33","8336CF34","8336CF35","8336CF36","8336CF37","8336CF38","8336CF39","8336D030","8336D031","8336D032","8336D033","8336D034","8336D035","8336D036","8336D037","8336D038","8336D039","8336D130","8336D131","8336D132","8336D133","8336D134","8336D135","8336D136","8336D137","8336D138","8336D139","8336D230","8336D231","8336D232","8336D233","8336D234","8336D235","8336D236","8336D237","8336D238","8336D239","8336D330","8336D331","8336D332","8336D333","8336D334","8336D335","8336D336","8336D337","8336D338","8336D339","8336D430","8336D431","8336D432","8336D433","8336D434","8336D435","8336D436","8336D437","8336D438","8336D439","8336D530","8336D531","8336D532","8336D533","8336D534","8336D535","8336D536","8336D537","8336D538","8336D539","8336D630","8336D631","8336D632","8336D633","8336D634","8336D635","8336D636","8336D637","8336D638","8336D639","8336D730","8336D731","8336D732","8336D733","8336D734","8336D735","8336D736","8336D737","8336D738","8336D739","8336D830","8336D831","8336D832","8336D833","8336D834","8336D835","8336D836","8336D837","8336D838","8336D839","8336D930","8336D931","8336D932","8336D933","8336D934","8336D935","8336D936","8336D937","8336D938","8336D939","8336DA30","8336DA31","8336DA32","8336DA33","8336DA34","8336DA35","8336DA36","8336DA37","8336DA38","8336DA39","8336DB30","8336DB31","8336DB32","8336DB33","8336DB34","8336DB35","8336DB36","8336DB37","8336DB38","8336DB39","8336DC30","8336DC31","8336DC32","8336DC33","8336DC34","8336DC35","8336DC36","8336DC37","8336DC38","8336DC39","8336DD30","8336DD31","8336DD32","8336DD33","8336DD34","8336DD35","8336DD36","8336DD37","8336DD38","8336DD39","8336DE30","8336DE31","8336DE32","8336DE33","8336DE34","8336DE35","8336DE36","8336DE37","8336DE38","8336DE39","8336DF30","8336DF31","8336DF32","8336DF33","8336DF34","8336DF35","8336DF36","8336DF37","8336DF38","8336DF39","8336E030","8336E031","8336E032","8336E033","8336E034","8336E035","8336E036","8336E037","8336E038","8336E039","8336E130","8336E131","8336E132","8336E133","8336E134","8336E135","8336E136","8336E137","8336E138","8336E139","8336E230","8336E231","8336E232","8336E233","8336E234","8336E235","8336E236","8336E237","8336E238","8336E239","8336E330","8336E331","8336E332","8336E333","8336E334","8336E335","8336E336","8336E337","8336E338","8336E339","8336E430","8336E431","8336E432","8336E433","8336E434","8336E435","8336E436","8336E437","8336E438","8336E439","8336E530","8336E531","8336E532","8336E533","8336E534","8336E535","8336E536","8336E537","8336E538","8336E539","8336E630","8336E631","8336E632","8336E633","8336E634","8336E635","8336E636","8336E637","8336E638","8336E639","8336E730","8336E731","8336E732","8336E733","8336E734","8336E735","8336E736","8336E737","8336E738","8336E739","8336E830","8336E831","8336E832","8336E833","8336E834","8336E835","8336E836","8336E837","8336E838","8336E839","8336E930","8336E931","8336E932","8336E933","8336E934","8336E935","8336E936","8336E937","8336E938","8336E939","8336EA30","8336EA31","8336EA32","8336EA33","8336EA34","8336EA35","8336EA36","8336EA37","8336EA38","8336EA39","8336EB30","8336EB31","8336EB32","8336EB33","8336EB34","8336EB35","8336EB36","8336EB37","8336EB38","8336EB39","8336EC30","8336EC31","8336EC32","8336EC33","8336EC34","8336EC35","8336EC36","8336E
];
foreach ($series as $test) {
foreach ($test[0] as $a => $input) {
$class = $this->testedClass;
$char = hex2bin($input);
$exp = $test[1][$a];
$s = new $class($char);
$this->assertSame($exp, $s->nextCode(), "Sequence $input did not decode to $exp.");
$this->assertFalse($s->nextCode());
}
}
}
}