markTestSkipped('native setlocale failed');
}
}
_setlocale(LC_ALL, 'POSIX');
if (PHP_INT_SIZE === 8) {
$GLOBALS['cfg']['IconvExtraParams'] = '//TRANSLIT';
Encoding::setEngine(Encoding::ENGINE_ICONV);
self::assertSame("This is the Euro symbol 'EUR'.", Encoding::convertString(
'UTF-8',
'ISO-8859-1',
"This is the Euro symbol '€'."
));
} elseif (PHP_INT_SIZE === 4) {
// NOTE: this does not work on 32bit systems and requires "//IGNORE"
// NOTE: or it will throw "iconv(): Detected an illegal character in input string"
$GLOBALS['cfg']['IconvExtraParams'] = '//TRANSLIT//IGNORE';
Encoding::setEngine(Encoding::ENGINE_ICONV);
self::assertSame("This is the Euro symbol ''.", Encoding::convertString(
'UTF-8',
'ISO-8859-1',
"This is the Euro symbol '€'."
));
}
}
public function testMbstring(): void
{
Encoding::setEngine(Encoding::ENGINE_MB);
self::assertSame("This is the Euro symbol '?'.", Encoding::convertString(
'UTF-8',
'ISO-8859-1',
"This is the Euro symbol '€'."
));
}
/**
* Test for kanjiChangeOrder
*/
public function testChangeOrder(): void
{
self::assertSame('ASCII,SJIS,EUC-JP,JIS', Encoding::getKanjiEncodings());
Encoding::kanjiChangeOrder();
self::assertSame('ASCII,EUC-JP,SJIS,JIS', Encoding::getKanjiEncodings());
Encoding::kanjiChangeOrder();
self::assertSame('ASCII,SJIS,EUC-JP,JIS', Encoding::getKanjiEncodings());
}
/**
* Test for Encoding::kanjiStrConv
*/
public function testKanjiStrConv(): void
{
self::assertSame('test', Encoding::kanjiStrConv('test', '', ''));
$GLOBALS['kanji_encoding_list'] = 'ASCII,SJIS,EUC-JP,JIS';
self::assertSame('test è', Encoding::kanjiStrConv('test è', '', ''));
self::assertSame(
mb_convert_encoding('test è', 'ASCII', 'SJIS'),
Encoding::kanjiStrConv('test è', 'ASCII', '')
);
self::assertSame(mb_convert_kana('全角', 'KV', 'SJIS'), Encoding::kanjiStrConv('全角', '', 'kana'));
}
/**
* Test for Encoding::kanjiFileConv
*/
public function testFileConv(): void
{
$file_str = '教育漢字常用漢字';
$filename = 'test.kanji';
self::assertNotFalse(file_put_contents($filename, $file_str));
$GLOBALS['kanji_encoding_list'] = 'ASCII,EUC-JP,SJIS,JIS';
$result = Encoding::kanjiFileConv($filename, 'JIS', 'kana');
$string = file_get_contents($result);
Encoding::kanjiChangeOrder();
$expected = Encoding::kanjiStrConv($file_str, 'JIS', 'kana');
Encoding::kanjiChangeOrder();
self::assertSame($string, $expected);
unlink($result);
}
/**
* Test for Encoding::kanjiEncodingForm
*/
public function testEncodingForm(): void
{
$actual = Encoding::kanjiEncodingForm();
self::assertStringContainsString('', $actual);
self::assertStringContainsString('', $actual);
self::assertStringContainsString('', $actual);
}
public function testListEncodings(): void
{
$GLOBALS['cfg']['AvailableCharsets'] = ['utf-8'];
$result = Encoding::listEncodings();
self::assertContains('utf-8', $result);
}
public function testListEncodingsForIso2022CnExt(): void
{
Encoding::setEngine(Encoding::ENGINE_ICONV);
$GLOBALS['cfg']['AvailableCharsets'] = [
'utf-8',
'ISO-2022-CN',
'ISO2022CN',
'ISO-2022-CN-EXT',
'ISO2022CNEXT',
' iso-2022-cn-ext ',
'ISO-2022-CN-EXT//TRANSLIT',
' I S O - 2 0 2 2 - C N - E X T ',
' I S O 2 0 2 2 C N E X T ',
'IS%O-20(22-CN-E$XT',
];
self::assertSame(['utf-8', 'ISO-2022-CN', 'ISO2022CN'], Encoding::listEncodings());
}
}