xref: /webtrees/tests/app/Encodings/UTF16BETest.php (revision 1c6adce825f16611bd8b75a22114302de4b41cfe)
1*1c6adce8SGreg Roach<?php
2*1c6adce8SGreg Roach
3*1c6adce8SGreg Roach/**
4*1c6adce8SGreg Roach * webtrees: online genealogy
5*1c6adce8SGreg Roach * Copyright (C) 2021 webtrees development team
6*1c6adce8SGreg Roach * This program is free software: you can redistribute it and/or modify
7*1c6adce8SGreg Roach * it under the terms of the GNU General Public License as published by
8*1c6adce8SGreg Roach * the Free Software Foundation, either version 3 of the License, or
9*1c6adce8SGreg Roach * (at your option) any later version.
10*1c6adce8SGreg Roach * This program is distributed in the hope that it will be useful,
11*1c6adce8SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*1c6adce8SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*1c6adce8SGreg Roach * GNU General Public License for more details.
14*1c6adce8SGreg Roach * You should have received a copy of the GNU General Public License
15*1c6adce8SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
16*1c6adce8SGreg Roach */
17*1c6adce8SGreg Roach
18*1c6adce8SGreg Roachdeclare(strict_types=1);
19*1c6adce8SGreg Roach
20*1c6adce8SGreg Roachnamespace Fisharebest\Webtrees\Tests\Encodings;
21*1c6adce8SGreg Roach
22*1c6adce8SGreg Roachuse Fisharebest\Webtrees\Encodings\UTF16BE;
23*1c6adce8SGreg Roachuse Fisharebest\Webtrees\Encodings\UTF8;
24*1c6adce8SGreg Roachuse PHPUnit\Framework\TestCase;
25*1c6adce8SGreg Roach
26*1c6adce8SGreg Roachuse function chr;
27*1c6adce8SGreg Roachuse function dechex;
28*1c6adce8SGreg Roachuse function iconv;
29*1c6adce8SGreg Roachuse function intdiv;
30*1c6adce8SGreg Roachuse function range;
31*1c6adce8SGreg Roach
32*1c6adce8SGreg Roach/**
33*1c6adce8SGreg Roach * Tests for class UTF16BE.
34*1c6adce8SGreg Roach */
35*1c6adce8SGreg Roachclass UTF16BETest extends TestCase
36*1c6adce8SGreg Roach{
37*1c6adce8SGreg Roach    /**
38*1c6adce8SGreg Roach     * @covers \Fisharebest\Webtrees\Encodings\AbstractEncoding
39*1c6adce8SGreg Roach     * @covers \Fisharebest\Webtrees\Encodings\UTF16BE
40*1c6adce8SGreg Roach     *
41*1c6adce8SGreg Roach     * @return void
42*1c6adce8SGreg Roach     */
43*1c6adce8SGreg Roach    public function testToUtf8(): void
44*1c6adce8SGreg Roach    {
45*1c6adce8SGreg Roach        $encoding = new UTF16BE();
46*1c6adce8SGreg Roach
47*1c6adce8SGreg Roach        foreach (range(0, 0x7F) as $code) {
48*1c6adce8SGreg Roach            $char     = chr(intdiv($code, 256)) . chr($code % 256);
49*1c6adce8SGreg Roach            $expected = iconv(UTF16BE::NAME, UTF8::NAME, $char);
50*1c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
51*1c6adce8SGreg Roach
52*1c6adce8SGreg Roach            $this->assertSame($expected, $actual, 'U+' . dechex($code));
53*1c6adce8SGreg Roach        }
54*1c6adce8SGreg Roach
55*1c6adce8SGreg Roach        foreach (range(0x80, 0xFF) as $code) {
56*1c6adce8SGreg Roach            $char   = chr(intdiv($code, 256)) . chr($code % 256);
57*1c6adce8SGreg Roach            $actual = $encoding->toUtf8($char);
58*1c6adce8SGreg Roach
59*1c6adce8SGreg Roach            $this->assertSame(UTF8::REPLACEMENT_CHARACTER, $actual, 'U+' . dechex($code));
60*1c6adce8SGreg Roach        }
61*1c6adce8SGreg Roach
62*1c6adce8SGreg Roach        foreach (range(0x100, 0xD7FF) as $code) {
63*1c6adce8SGreg Roach            $char     = chr(intdiv($code, 256)) . chr($code % 256);
64*1c6adce8SGreg Roach            $expected = iconv(UTF16BE::NAME, UTF8::NAME, $char);
65*1c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
66*1c6adce8SGreg Roach
67*1c6adce8SGreg Roach            $this->assertSame($expected, $actual, 'U+' . dechex($code));
68*1c6adce8SGreg Roach        }
69*1c6adce8SGreg Roach
70*1c6adce8SGreg Roach        foreach (range(0xD800, 0xDFFF) as $code) {
71*1c6adce8SGreg Roach            $char   = chr(intdiv($code, 256)) . chr($code % 256);
72*1c6adce8SGreg Roach            $actual = $encoding->toUtf8($char);
73*1c6adce8SGreg Roach
74*1c6adce8SGreg Roach            $this->assertSame(UTF8::REPLACEMENT_CHARACTER, $actual, 'U+' . dechex($code));
75*1c6adce8SGreg Roach        }
76*1c6adce8SGreg Roach
77*1c6adce8SGreg Roach        foreach (range(0xE000, 0xFFFF) as $code) {
78*1c6adce8SGreg Roach            $char     = chr(intdiv($code, 256)) . chr($code % 256);
79*1c6adce8SGreg Roach            $expected = iconv(UTF16BE::NAME, UTF8::NAME, $char);
80*1c6adce8SGreg Roach            $actual   = $encoding->toUtf8($char);
81*1c6adce8SGreg Roach
82*1c6adce8SGreg Roach            $this->assertSame($expected, $actual, 'U+' . dechex($code));
83*1c6adce8SGreg Roach        }
84*1c6adce8SGreg Roach    }
85*1c6adce8SGreg Roach}
86