| 
<?php
 declare(strict_types=1);
 
 namespace voku\tests;
 
 use voku\helper\ASCII;
 
 /**
 * @internal
 */
 final class AsciiGlobalTest extends \PHPUnit\Framework\TestCase
 {
 public function slugifyProvider(): array
 {
 return [
 ['foo-bar', ' foo  bar '],
 ['foo-bar', 'foo -.-"-...bar'],
 ['another-and-foo-bar', 'another..& foo -.-"-...bar'],
 ['foo-dbar', " Foo d'Bar "],
 ['a-string-with-dashes', 'A string-with-dashes'],
 ['user-at-host', 'user@host'],
 ['using-strings-like-foo-bar', 'Using strings like fòô bà?'],
 ['numbers-1234', 'numbers 1234'],
 ['perevirka-ryadka', '????????? ?????'],
 ['bukvar-s-bukvoi-y', '??????? ? ?????? ?'],
 ['podehal-k-podezdu-moego-doma', '???????? ? ???????? ????? ????'],
 ['foo:bar:baz', 'Foo bar baz', ':'],
 ['a_string_with_underscores', 'A_string with_underscores', '_'],
 ['a_string_with_dashes', 'A string-with-dashes', '_'],
 ['one_euro_or_a_dollar', 'one ? or a $', '_'],
 ['a\string\with\dashes', 'A string-with-dashes', '\\'],
 ['an_odd_string', '--   An odd__   string-_', '_'],
 ];
 }
 
 public function testCharsArrayWithMultiLanguageValues()
 {
 $array = ASCII::charsArrayWithMultiLanguageValues();
 
 static::assertSame(['?', '?', '?', '?', '?'], $array['b']);
 
 // ---
 
 $array = ASCII::charsArrayWithMultiLanguageValues(true);
 
 static::assertSame(['?', '?', '?', '?', '?'], $array['b']);
 static::assertSame(['&'], $array['&']);
 static::assertSame(['?'], $array[' Euro ']);
 }
 
 public function testCharsArrayWithOneLanguage()
 {
 $array = ASCII::charsArrayWithOneLanguage('de');
 
 static::assertContains('Ae', $array['replace']);
 static::assertNotContains('yo', $array['replace']);
 
 // ---
 
 $array = ASCII::charsArrayWithOneLanguage('ru');
 
 static::assertNotContains('Ae', $array['replace']);
 static::assertContains('yo', $array['replace']);
 
 $tmpKey = \array_search('yo', $array['replace'], true);
 static::assertSame('?', $array['orig'][$tmpKey]);
 
 // ---
 
 $array = ASCII::charsArrayWithOneLanguage('de', true);
 
 static::assertContains('Ae', $array['replace']);
 static::assertNotContains('yo', $array['replace']);
 static::assertContains(' und ', $array['replace']);
 static::assertNotContains(' ? ', $array['replace']);
 
 $tmpKey = \array_search(' und ', $array['replace'], true);
 static::assertSame('&', $array['orig'][$tmpKey]);
 
 // ---
 
 $array = ASCII::charsArrayWithOneLanguage('ru', true);
 
 static::assertContains('yo', $array['replace']);
 static::assertNotContains('Ae', $array['replace']);
 static::assertContains(' ? ', $array['replace']);
 static::assertNotContains(' und ', $array['replace']);
 
 $tmpKey = \array_search(' ? ', $array['replace'], true);
 static::assertSame('&', $array['orig'][$tmpKey]);
 }
 
 public function testCharsArrayWithSingleLanguageValues()
 {
 $array = ASCII::charsArrayWithSingleLanguageValues();
 
 static::assertContains('hnaik', $array['replace']);
 static::assertContains('yo', $array['replace']);
 
 $tmpKey = \array_search('hnaik', $array['replace'], true);
 static::assertSame('?', $array['orig'][$tmpKey]);
 
 // ---
 
 $array = ASCII::charsArrayWithSingleLanguageValues(true);
 
 static::assertContains('hnaik', $array['replace']);
 static::assertContains('yo', $array['replace']);
 static::assertContains(' pound ', $array['replace']);
 
 $tmpKey = \array_search(' pound ', $array['replace'], true);
 static::assertSame('£', $array['orig'][$tmpKey]);
 }
 
 public function testCharsArray()
 {
 $array = ASCII::charsArray();
 
 static::assertSame('b', $array['ru']['?']);
 }
 
 public function testFilterFile()
 {
 $testArray = [
 "test-\xe9\x00\x0é????.txt"      => 'test-.txt',
 'test-????.txt'                  => 'test-.txt',
 '????.jpg'                       => '.jpg',
 '????.jpg'                       => '.jpg',
 'öäü  - test'                    => 'test',
 '??????.png'                     => '.png',
 '?©®±àáâãäåæÒÓÔÕÖ¼½¾§µçðþú?.jpg' => '.jpg',
 '000?©?©.txt'                    => '000.txt',
 ' '                              => '',
 ];
 
 foreach ($testArray as $before => $after) {
 static::assertSame($after, ASCII::to_filename($before, false));
 }
 
 // ---
 
 $testArray = [
 "test-\xe9\x00\x0é????.txt"      => 'test-eDa-Ban-Ruo-Jing-.txt',
 'test-????.txt'                  => 'test-Da-Ban-Ruo-Jing-.txt',
 '????.jpg'                       => 'foto.jpg',
 '????.jpg'                       => 'Foto.jpg',
 'öäü  - test'                    => 'oau-test',
 '??????.png'                     => 'shdgshdg.png',
 '?©®±àáâãäåæÒÓÔÕÖ¼½¾§µçðþú?.jpg' => 'cr-aaaaaaaeOOOOO141234SSucdthu-.jpg',
 '000?©?©.txt'                    => '000-c-c.txt',
 ' '                              => '',
 ];
 
 foreach ($testArray as $before => $after) {
 static::assertSame($after, ASCII::to_filename($before, true));
 }
 }
 
 /**
 * @dataProvider slugifyProvider()
 *
 * @param mixed $expected
 * @param mixed $str
 * @param mixed $replacement
 */
 public function testSlugify($expected, $str, $replacement = '-')
 {
 $str = ASCII::to_slugify($str, $replacement);
 
 static::assertSame($expected, $str);
 }
 
 /**
 * @dataProvider toAsciiProvider()
 *
 * @param mixed $expected
 * @param mixed $str
 * @param mixed $language
 * @param mixed $removeUnsupported
 */
 public function testToAscii(
 $expected,
 $str,
 $language = 'en',
 $removeUnsupported = true
 ) {
 $result = ASCII::to_ascii($str, $language, $removeUnsupported);
 
 static::assertSame($expected, $result);
 }
 
 public function toAsciiProvider(): array
 {
 return [
 ['foo bar', 'fòô bà?'],
 [' TEST ', ' ?É?? '],
 ['f = z = 3', '? = ? = 3'],
 ['perevirka', '?????????'],
 ['lysaya gora', '????? ????'],
 ['user@host', 'user@host'],
 ['shuka', '????'],
 ['', '??'],
 ['xin chao the gioi', 'xin chào th? gi?i'],
 ['XIN CHAO THE GIOI', 'XIN CHÀO TH? GI?I'],
 ['dam phat chet luon', '??m phát ch?t luôn'],
 [' ', ' '], // no-break space (U+00A0)
 ['           ', '??????? ???'], // spaces U+2000 to U+200A
 [' ', ' '], // narrow no-break space (U+202F)
 [' ', '?'], // medium mathematical space (U+205F)
 [' ', '?'], // ideographic space (U+3000)
 ['', '?'], // some uncommon, unsupported character (U+10349)
 ['?', '?', 'en', false],
 ['aouAOU', 'äöüÄÖÜ'],
 ['aeoeueAeOeUe', 'äöüÄÖÜ', 'de'],
 ['aeoeueAeOeUe', 'äöüÄÖÜ', 'de_DE'],
 ];
 }
 
 public function testCleanParameter()
 {
 $dirtyTestString = "\xEF\xBB\xBF?Abcdef\xc2\xa0\x20?? ? ?";
 
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, false, true, false, false));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, false, false, false, true));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, false, false, false, false));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, false, false, true, true));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, false, false, true, false));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, false, true, true, false));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, false, true, true, true));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, true, false, false, false));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, true, false, false, true));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, true, false, true, false));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, true, false, true, true));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, true, true, false, false));
 static::assertSame('??Abcdef  ?? ? ?', ASCII::clean($dirtyTestString, true, true, false, true));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, true, true, true, false));
 static::assertSame('?"Abcdef  ..." - ?', ASCII::clean($dirtyTestString, true, true, true, true));
 }
 }
 
 |