xref: /webtrees/tests/app/Encodings/ISO88591Test.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\ISO88591;
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 range;
30*1c6adce8SGreg Roach
31*1c6adce8SGreg Roach/**
32*1c6adce8SGreg Roach * Tests for class ISO88591.
33*1c6adce8SGreg Roach */
34*1c6adce8SGreg Roachclass ISO88591Test extends TestCase
35*1c6adce8SGreg Roach{
36*1c6adce8SGreg Roach    /**
37*1c6adce8SGreg Roach     * @covers \Fisharebest\Webtrees\Encodings\AbstractEncoding
38*1c6adce8SGreg Roach     * @covers \Fisharebest\Webtrees\Encodings\ISO88591
39*1c6adce8SGreg Roach     *
40*1c6adce8SGreg Roach     * @return void
41*1c6adce8SGreg Roach     */
42*1c6adce8SGreg Roach    public function testToUtf8(): void
43*1c6adce8SGreg Roach    {
44*1c6adce8SGreg Roach        $encoding = new ISO88591();
45*1c6adce8SGreg Roach
46*1c6adce8SGreg Roach        // iconv uses CP1252, and therefore adds chacaters to 0x80 - 0x9F
47*1c6adce8SGreg Roach        $ranges = [
48*1c6adce8SGreg Roach            range(0, 0x7F),
49*1c6adce8SGreg Roach            range(0xA0, 0xFF),
50*1c6adce8SGreg Roach        ];
51*1c6adce8SGreg Roach
52*1c6adce8SGreg Roach        foreach (range(0x80, 0x9F) as $code_point) {
53*1c6adce8SGreg Roach            $character = chr($code_point);
54*1c6adce8SGreg Roach            $actual    = $encoding->toUtf8($character);
55*1c6adce8SGreg Roach
56*1c6adce8SGreg Roach            $this->assertSame(UTF8::REPLACEMENT_CHARACTER, $actual, dechex($code_point) . '=>' . $actual);
57*1c6adce8SGreg Roach        }
58*1c6adce8SGreg Roach
59*1c6adce8SGreg Roach        foreach ($ranges as $range) {
60*1c6adce8SGreg Roach            foreach ($range as $code_point) {
61*1c6adce8SGreg Roach                $character = chr($code_point);
62*1c6adce8SGreg Roach                $actual    = $encoding->toUtf8($character);
63*1c6adce8SGreg Roach                $expected  = iconv(ISO88591::NAME, UTF8::NAME, $character);
64*1c6adce8SGreg Roach                $expected  = $expected === '' ? UTF8::REPLACEMENT_CHARACTER : $expected;
65*1c6adce8SGreg Roach
66*1c6adce8SGreg Roach                $this->assertSame($expected, $actual, dechex($code_point) . '=>' . $actual . ' ' . $expected);
67*1c6adce8SGreg Roach            }
68*1c6adce8SGreg Roach        }
69*1c6adce8SGreg Roach    }
70*1c6adce8SGreg Roach}
71