feat(domain-formatter): decode punycode hosts to Cyrillic with fallbacks

This commit is contained in:
Vladimir Bryzgalov
2026-04-17 22:03:33 +05:00
parent 6aa1ef41e6
commit 6068a6a54f
2 changed files with 96 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace Cf7stg\Tests;
use Cf7stg\DomainFormatter;
use PHPUnit\Framework\TestCase;
final class DomainFormatterTest extends TestCase
{
public function test_decodes_punycode_to_cyrillic(): void
{
self::assertSame(
'вашаняня.рф',
DomainFormatter::humanize('xn--80aae0ca7d8bb.xn--p1ai')
);
}
public function test_latin_domain_unchanged(): void
{
self::assertSame(
'washanyanya.ru',
DomainFormatter::humanize('washanyanya.ru')
);
}
public function test_strips_scheme_and_path(): void
{
self::assertSame(
'washanyanya.ru',
DomainFormatter::humanize('https://washanyanya.ru/contact/?a=1')
);
}
public function test_strips_leading_www(): void
{
self::assertSame(
'washanyanya.ru',
DomainFormatter::humanize('www.washanyanya.ru')
);
}
public function test_invalid_input_returns_empty_string(): void
{
self::assertSame('', DomainFormatter::humanize(''));
}
public function test_broken_idn_returns_original(): void
{
// Looks like IDN but is garbage; idn_to_utf8 returns false → we fall back
self::assertSame('xn--', DomainFormatter::humanize('xn--'));
}
}