| 
<?php
 declare(strict_types=1);
 
 namespace voku\tests;
 
 use voku\helper\ASCII;
 use voku\helper\ASCII as u;
 
 /**
 * @internal
 */
 final class TransliterateTest extends \PHPUnit\Framework\TestCase
 {
 public function testUtf8()
 {
 $str = 'testiñg';
 static::assertSame('testing', u::to_transliterate($str));
 }
 
 public function testAscii()
 {
 $str = 'testing';
 static::assertSame('testing', u::to_transliterate($str));
 }
 
 public function testInvalidChar()
 {
 $str = "tes\xE9ting";
 static::assertSame('testing', u::to_transliterate($str));
 }
 
 public function testEmptyStr()
 {
 $str = '';
 static::assertEmpty(u::to_transliterate($str));
 }
 
 public function testNulAndNon7Bit()
 {
 $str = "a\x00ñ\x00c";
 static::assertSame('anc', u::to_transliterate($str));
 }
 
 public function testNul()
 {
 $str = "a\x00b\x00c";
 static::assertSame('abc', u::to_transliterate($str));
 }
 
 public function testToASCII()
 {
 $testsStrict = [];
 if (\extension_loaded('intl') === true) {
 
 // ---
 
 $testString = \file_get_contents(__DIR__ . '/fixtures/sample-unicode-chart.txt');
 $resultString = \file_get_contents(__DIR__ . '/fixtures/sample-ascii-chart.txt');
 
 static::assertSame($resultString, ASCII::to_transliterate($testString, '?', true));
 
 // ---
 
 $testsStrict = [
 // 1                                          => '1',
 // -1                                         => '-1',
 ' ' => ' ',
 // ''                                         => '',
 '???'                                      => 'abz',
 "\xe2\x80\x99"                             => '\'',
 '?test'                                    => 'Btest',
 '  -ABC-????-  '                           => '  -ABC-zhong wen kong bai-  ',
 "      - abc- \xc2\x87"                    => '      - abc- ++',
 'abc'                                      => 'abc',
 'deja vu'                                  => 'deja vu',
 'déjà vu'                                  => 'deja vu',
 'déjà ??? i?ii'                            => 'deja sss iiii',
 "test\x80-\xBFöäü"                         => 'test-oau',
 'Internationalizaetion'                    => 'Internationalizaetion',
 "? - 中 - %&? - \xc2\x80"            => 'zhong - 中 - %&? - EUR',
 'Un été brûlant sur la côte'               => 'Un ete brulant sur la cote',
 '???? ????? ??? ??????'                    => 'Aute einai mia dokime',
 '????'                                     => 'ahbk',
 '?????'                                    => 'kyanpasu',
 '?????????????'                            => 'biologiceskom',
 '?, ??'                                    => 'jeong, byeongho',
 '???, ????'                                => 'masuda, yoshihiko',
 '?????'                                    => 'monica',
 '????'                                     => 'kasadb',
 '???? ?'                                   => 'ahbk ?',
 '???????????????? 5.99?'                   => 'dhrzsshsdtz\'gh[?][?][?][?][?] 5.99EUR',
 '???????????????? £5.99'                   => 'dhrzsshsdtz\'gh[?][?][?][?][?] PS5.99',
 '????????????????? $5.99'                  => '[?]\'bgdhwzhtykklmmn $5.99',
 '??????????????? ¥5990'                    => 'ri yi guo hui ren nian da shi er ben zhong zhang chu san tong Y=5990',
 '5.99? ???????? $5.99'                     => '5.99EUR ri yi guo hui ren nian da shi $5.99',
 '????@??????.com'                          => 'bgdh@dtz\'gh[?].com',
 '???@??????'                               => 'nian da shi@dtz\'gh[?]',
 '???? & ???'                               => 'bgdh & nian da shi',
 '?&? at ??????.???'                        => 'guo&m at dtz\'gh[?].hwz',
 'my username is @????'                     => 'my username is @bgdh',
 'The review gave 5* to ????'               => 'The review gave 5* to z\'gh[?]',
 'use ???@??????.??? to get a 10% discount' => 'use nian da shi@dtz\'gh[?].hwz to get a 10% discount',
 '? = ??^2'                                 => 'ri = ht^2',
 '???? ?? ???? 9.81 m/s2'                   => 'kklm guo hui gh[?][?][?] 9.81 m/s2',
 'The #? comment at @???? = 10% of *&*'     => 'The #hui comment at @bgdh = 10% of *&*',
 '? i ? ?'                                  => '[?] i [?] N',
 '? ? ? ? ? ? ? ?????'                      => '? ? ?  ? ? ? ahbk',
 ];
 }
 
 $tests = [
 // 1                               => '1',
 // -1                              => '-1',
 ' ' => ' ',
 // ''                              => '',
 '???'                           => 'abz',
 "\xe2\x80\x99"                  => '\'',
 '?test'                         => 'Btest',
 '  -ABC-????-  '                => '  -ABC-Zhong Wen Kong Bai -  ',
 "      - abc- \xc2\x87"         => '      - abc- ++',
 'abc'                           => 'abc',
 'deja vu'                       => 'deja vu',
 'déjà vu?'                      => 'deja vu ',
 'déjà ??? i?ii'                 => 'deja sss iiii',
 '?????'                         => 'kosme',
 "test\x80-\xBFöäü"              => 'test-oau',
 'Internationalizaetion'         => 'Internationalizaetion',
 "? - 中 - %&? - \xc2\x80" => 'Zhong  - 中 - %&? - EUR',
 'Un été brûlant sur la côte'    => 'Un ete brulant sur la cote',
 '???? ????? ??? ??????'         => 'Aute einai mia dokime',
 '????'                          => 'aHbk',
 '?????'                         => 'kiyanpasu',
 '?????????????'                 => 'biologicheskom',
 '?, ??'                         => 'jeong, byeongho',
 '???, ????'                     => 'masuda, yosihiko',
 '?????'                         => 'monic',
 '????'                          => 'kssdb',
 '???? ?'                        => 'aHbk ?',
 '? i ? ?'                       => '[?] i [?] N',
 '? ? ? ? ? ? ? ?????'           => '? ? ?  ? ? ? aHbk',
 ];
 
 for ($i = 0; $i <= 2; ++$i) { // keep this loop for simple performance tests
 foreach ($tests as $before => $after) {
 static::assertSame($after, ASCII::to_transliterate($before), 'tested: ' . $before);
 }
 }
 
 foreach ($testsStrict as $before => $after) {
 static::assertSame($after, ASCII::to_transliterate($before, '?', true), 'tested: ' . $before);
 }
 }
 }
 
 |