1
0
mirror of https://github.com/php/web-php.git synced 2026-03-24 07:12:16 +01:00
Files
archived-web-php/tests/Unit/LangChooserTest.php
2024-11-11 11:50:15 +03:00

131 lines
4.4 KiB
PHP

<?php
declare(strict_types=1);
namespace phpweb\Test\Unit;
use phpweb\LangChooser;
use PHPUnit\Framework;
#[Framework\Attributes\CoversClass(LangChooser::class)]
class LangChooserTest extends Framework\TestCase
{
private const DEFAULT_LANGUAGE_LIST = [
'en' => 'English',
'de' => 'German',
'ja' => 'Japanese',
'pt_BR' => 'Brazilian Portuguese',
'zh' => 'Chinese (Simplified)',
];
public function testChooseCodeWithLangParameter(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', '', 'en');
$result = $langChooser->chooseCode('de', '/', null);
self::assertSame(['de', 'de'], $result);
}
public function testChooseCodeWithShortcutPath(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', '/de/echo', null);
self::assertSame(['de', 'de'], $result);
}
#[Framework\Attributes\TestWith(['de', 'de'])]
#[Framework\Attributes\TestWith(['pt_BR', 'pt_BR'])]
public function testChooseCodeWithManualPath(string $pathLang, string $expected): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', "/manual/$pathLang", null);
self::assertSame([$expected, $expected], $result);
}
public function testChooseCodeWithUserPreference(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], 'de', 'en');
$result = $langChooser->chooseCode('', '/', null);
self::assertSame(['de', ''], $result);
}
public function testChooseCodeWithAcceptLanguage(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', '/', 'de,ja,en');
self::assertSame(['de', ''], $result);
}
public function testChooseCodeWithAcceptLanguageQuality(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', '/', 'de;q=0.8,ja,en');
self::assertSame(['ja', ''], $result);
}
#[Framework\Attributes\TestWith(['de-at', 'de'])]
#[Framework\Attributes\TestWith(['pt-br', 'pt_BR'])]
#[Framework\Attributes\TestWith(['zh-cn', 'zh'])]
#[Framework\Attributes\TestWith(['zh-tw', 'en'])]
public function testChooseCodeWithAcceptLanguageFollowedByCountryCode(string $acceptLanguage, string $expected): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', '/', $acceptLanguage);
self::assertSame([$expected, ''], $result);
}
public function testChooseCodeWithMirrorDefaultLanguage(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'de');
$result = $langChooser->chooseCode('', '/', null);
self::assertSame(['de', ''], $result);
}
public function testChooseCodeWithDefaultLanguage(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'fr');
$result = $langChooser->chooseCode('', '/', null);
self::assertSame(['en', ''], $result);
}
public function testChooseCodeWithLangParameterAndManualPath(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('de', '/manual/en', null);
self::assertSame(['de', 'de'], $result);
}
public function testChooseCodeWithManualPathAndUserPreference(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], 'en', 'en');
$result = $langChooser->chooseCode('', '/manual/de', null);
self::assertSame(['de', 'de'], $result);
}
public function testChooseCodeWithManualPathAndAcceptLanguage(): void
{
$langChooser = new LangChooser(self::DEFAULT_LANGUAGE_LIST, [], '', 'en');
$result = $langChooser->chooseCode('', '/manual/de', 'en');
self::assertSame(['de', 'de'], $result);
}
public function testChooseCodeInactiveLanguageIsNotChosen(): void
{
$langChooser = new LangChooser(['en' => 'English', 'de' => 'German', 'pl' => 'Polish'], ['pl' => 'Polish'], '', '');
$result = $langChooser->chooseCode('pl', '/manual/pl', 'pl');
self::assertSame(['en', 'pl'], $result);
}
}