xref: /webtrees/tests/app/Encodings/UTF16LETest.php (revision 5a8afed46297e8105e3e5a33ce37e6a8e88bc79d)
11c6adce8SGreg Roach<?php
21c6adce8SGreg Roach
31c6adce8SGreg Roach/**
41c6adce8SGreg Roach * webtrees: online genealogy
5d11be702SGreg Roach * Copyright (C) 2023 webtrees development team
61c6adce8SGreg Roach * This program is free software: you can redistribute it and/or modify
71c6adce8SGreg Roach * it under the terms of the GNU General Public License as published by
81c6adce8SGreg Roach * the Free Software Foundation, either version 3 of the License, or
91c6adce8SGreg Roach * (at your option) any later version.
101c6adce8SGreg Roach * This program is distributed in the hope that it will be useful,
111c6adce8SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
121c6adce8SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
131c6adce8SGreg Roach * GNU General Public License for more details.
141c6adce8SGreg Roach * You should have received a copy of the GNU General Public License
151c6adce8SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
161c6adce8SGreg Roach */
171c6adce8SGreg Roach
181c6adce8SGreg Roachdeclare(strict_types=1);
191c6adce8SGreg Roach
201c6adce8SGreg Roachnamespace Fisharebest\Webtrees\Tests\Encodings;
211c6adce8SGreg Roach
22*202c018bSGreg Roachuse Fisharebest\Webtrees\Encodings\AbstractEncoding;
231c6adce8SGreg Roachuse Fisharebest\Webtrees\Encodings\UTF16LE;
241c6adce8SGreg Roachuse Fisharebest\Webtrees\Encodings\UTF8;
25*202c018bSGreg Roachuse PHPUnit\Framework\Attributes\CoversClass;
261c6adce8SGreg Roachuse PHPUnit\Framework\TestCase;
271c6adce8SGreg Roach
281c6adce8SGreg Roachuse function chr;
291c6adce8SGreg Roachuse function dechex;
301c6adce8SGreg Roachuse function iconv;
311c6adce8SGreg Roachuse function intdiv;
321c6adce8SGreg Roachuse function range;
331c6adce8SGreg Roach
34*202c018bSGreg Roach#[CoversClass(AbstractEncoding::class)]
35*202c018bSGreg Roach#[CoversClass(UTF16LE::class)]
361c6adce8SGreg Roachclass UTF16LETest extends TestCase
371c6adce8SGreg Roach{
381c6adce8SGreg Roach    public function testToUtf8(): void
391c6adce8SGreg Roach    {
401c6adce8SGreg Roach        $encoding = new UTF16LE();
411c6adce8SGreg Roach
421c6adce8SGreg Roach        foreach (range(0, 0x7F) as $code) {
431c6adce8SGreg Roach            $char     = chr($code % 256) . chr(intdiv($code, 256));
441c6adce8SGreg Roach            $expected = iconv(UTF16LE::NAME, UTF8::NAME, $char);
451c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
461c6adce8SGreg Roach
47f01ab4acSGreg Roach            static::assertSame($expected, $actual, 'U+' . dechex($code));
481c6adce8SGreg Roach        }
491c6adce8SGreg Roach
501c6adce8SGreg Roach        foreach (range(0x80, 0xFF) as $code) {
511c6adce8SGreg Roach            $char     = chr($code % 256) . chr(intdiv($code, 256));
521c6adce8SGreg Roach            $actual = $encoding->toUtf8($char);
531c6adce8SGreg Roach
54f01ab4acSGreg Roach            static::assertSame(UTF8::REPLACEMENT_CHARACTER, $actual, 'U+' . dechex($code));
551c6adce8SGreg Roach        }
561c6adce8SGreg Roach
571c6adce8SGreg Roach        foreach (range(0x100, 0xD7FF) as $code) {
581c6adce8SGreg Roach            $char     = chr($code % 256) . chr(intdiv($code, 256));
591c6adce8SGreg Roach            $expected = iconv(UTF16LE::NAME, UTF8::NAME, $char);
601c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
611c6adce8SGreg Roach
62f01ab4acSGreg Roach            static::assertSame($expected, $actual, 'U+' . dechex($code));
631c6adce8SGreg Roach        }
641c6adce8SGreg Roach
651c6adce8SGreg Roach        foreach (range(0xD800, 0xDFFF) as $code) {
661c6adce8SGreg Roach            $char     = chr($code % 256) . chr(intdiv($code, 256));
671c6adce8SGreg Roach            $actual = $encoding->toUtf8($char);
681c6adce8SGreg Roach
69f01ab4acSGreg Roach            static::assertSame(UTF8::REPLACEMENT_CHARACTER, $actual, 'U+' . dechex($code));
701c6adce8SGreg Roach        }
711c6adce8SGreg Roach
721c6adce8SGreg Roach        foreach (range(0xE000, 0xFFFF) as $code) {
731c6adce8SGreg Roach            $char     = chr($code % 256) . chr(intdiv($code, 256));
741c6adce8SGreg Roach            $expected = iconv(UTF16LE::NAME, UTF8::NAME, $char);
751c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
761c6adce8SGreg Roach
77f01ab4acSGreg Roach            static::assertSame($expected, $actual, 'U+' . dechex($code));
781c6adce8SGreg Roach        }
791c6adce8SGreg Roach    }
801c6adce8SGreg Roach}
81