Files
roundcubemail/tests/Framework/Charset.php
Michael Voříšek 6a53a1d853 Fix CS (whitespace, visibility) (#9297)
* Fix "method_argument_space"

* Fix "control_structure_continuation_position"

* Fix "new_with_parentheses"

* Fix "blank_line_before_statement"

* Fix "visibility_required"

* Fix some "array_indentation"

* Fix some "array_indentation" - unify all "rcube::raise_error" calls

* rm useless eslint ignores and add rules counts

* sort eslint ignores

* fix eslint ignores grammar

* Revert "Fix "blank_line_before_statement""

* fix CS 3.46.0
2024-01-04 14:26:35 +01:00

233 lines
6.0 KiB
PHP

<?php
/**
* Test class to test rcube_charset class
*
* @group mbstring
*/
class Framework_Charset extends PHPUnit\Framework\TestCase
{
/**
* Data for test_clean()
*/
public function data_clean(): iterable
{
return [
['', ''],
["\xC1", ''],
['Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν', 'Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν'],
["сим\xD0вол", 'символ'],
[["сим\xD0вол"], ['символ']],
[["a\x8cb" => "a\x8cb"], ['ab' => 'ab']],
[["a\x8cb" => "a\x8cb", 'ab' => '12'], ['ab' => '12']],
];
}
/**
* @dataProvider data_clean
*/
public function test_clean($input, $output)
{
$this->assertSame($output, rcube_charset::clean($input));
}
/**
* Data for test_is_valid()
*/
public function data_is_valid(): iterable
{
$list = [];
foreach (mb_list_encodings() as $charset) {
$list[] = [$charset, true];
}
return array_merge($list, [
['', false],
['a', false],
['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', false],
[null, false],
['TCVN5712-1:1993', true],
['JUS_I.B1.002', true],
]);
}
/**
* @dataProvider data_is_valid
*/
public function test_is_valid($input, $result)
{
$this->assertSame($result, rcube_charset::is_valid($input));
}
/**
* Data for test_parse_charset()
*/
public function data_parse_charset(): iterable
{
return [
['UTF8', 'UTF-8'],
['WIN1250', 'WINDOWS-1250'],
];
}
/**
* @dataProvider data_parse_charset
*/
public function test_parse_charset($input, $output)
{
$this->assertSame($output, rcube_charset::parse_charset($input));
}
/**
* Data for test_convert()
*/
public function data_convert(): iterable
{
$data = [
['ö', 'ö', 'UTF-8', 'UTF-8'],
['ö', '', 'UTF-8', 'ASCII'],
['aż', 'a', 'UTF-8', 'US-ASCII'],
['&BCAEMARBBEEESwQ7BDoEOA-', 'Рассылки', 'UTF7-IMAP', 'UTF-8'],
['Рассылки', '&BCAEMARBBEEESwQ7BDoEOA-', 'UTF-8', 'UTF7-IMAP'],
[base64_decode('GyRCLWo7M3l1OSk2SBsoQg=='), '㈱山﨑工業', 'ISO-2022-JP', 'UTF-8'],
['㈱山﨑工業', base64_decode('GyRCLWo7M3l1OSk2SBsoQg=='), 'UTF-8', 'ISO-2022-JP'],
// try some invalid encodings, to make sure no error/exception is thrown
['test', 'test', 'WIN1253', 'INVALID'],
];
if (extension_loaded('iconv')) {
// Windows-1253 is not supported by mbstring, we're testing fallback to iconv
$data[] = ['ε', chr(hexdec('E5')), 'UTF-8', 'WINDOWS-1253'];
// Windows-874 is also not supported by mbstring
$in = quoted_printable_decode('=B5=CD=BA=A1=C5=D1=BA');
$data[] = [$in, 'ตอบกลับ', 'WINDOWS-874', 'UTF-8'];
}
return $data;
}
/**
* @dataProvider data_convert
*/
public function test_convert($input, $output, $from, $to)
{
$this->assertSame($output, rcube_charset::convert($input, $from, $to));
}
/**
* Data for test_utf7_to_utf8()
*/
public function data_utf7_to_utf8(): iterable
{
return [
['+BCAEMARBBEEESwQ7BDoEOA-', 'Рассылки'],
];
}
/**
* @dataProvider data_utf7_to_utf8
*/
public function test_utf7_to_utf8($input, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::utf7_to_utf8($input));
}
/**
* Data for test_utf7imap_to_utf8()
*/
public function data_utf7imap_to_utf8(): iterable
{
return [
['&BCAEMARBBEEESwQ7BDoEOA-', 'Рассылки'],
];
}
/**
* @dataProvider data_utf7imap_to_utf8
*/
public function test_utf7imap_to_utf8($input, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::utf7imap_to_utf8($input));
}
/**
* Data for test_utf8_to_utf7imap()
*/
public function data_utf8_to_utf7imap(): iterable
{
return [
['Рассылки', '&BCAEMARBBEEESwQ7BDoEOA-'],
];
}
/**
* @dataProvider data_utf8_to_utf7imap
*/
public function test_utf8_to_utf7imap($input, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::utf8_to_utf7imap($input));
}
/**
* Data for test_utf16_to_utf8()
*/
public function data_utf16_to_utf8(): iterable
{
return [
[base64_decode('BCAEMARBBEEESwQ7BDoEOA=='), 'Рассылки'],
];
}
/**
* @dataProvider data_utf16_to_utf8
*/
public function test_utf16_to_utf8($input, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::utf16_to_utf8($input));
}
/**
* Data for test_detect()
*/
public function data_detect(): iterable
{
return [
['', '', 'UTF-8'],
['a', 'UTF-8', 'UTF-8'],
];
}
/**
* @dataProvider data_detect
*/
public function test_detect($input, $fallback, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::detect($input, $fallback));
}
/**
* Data for test_detect()
*/
public function data_detect_with_lang(): iterable
{
return [
[base64_decode('xeOl3KZXutkspUStbg=='), 'zh_TW', 'BIG-5'],
];
}
/**
* @dataProvider data_detect_with_lang
*/
public function test_detect_with_lang($input, $lang, $output)
{
// @phpstan-ignore-next-line
$this->assertSame($output, rcube_charset::detect($input, $output, $lang));
}
}