Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
63 lines
2.8 KiB
PHP
63 lines
2.8 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||
|
||
use LIT\MCP\Integrations\Divi\Design\FontNameRules;
|
||
use PHPUnit\Framework\TestCase;
|
||
|
||
final class FontNameRulesTest extends TestCase
|
||
{
|
||
private const RESERVED = ['Open Sans', 'Roboto', 'Arial', 'Times New Roman', 'Hausschrift'];
|
||
|
||
public function testLettersDigitsSpacesUnderscoresAndHyphensAreAllowed(): void
|
||
{
|
||
self::assertNull(FontNameRules::check('Inter Display_2-Bold'));
|
||
self::assertNull(FontNameRules::check('X'));
|
||
}
|
||
|
||
public function testOtherCharactersAreRefusedWithTheNameDiviWouldStore(): void
|
||
{
|
||
$problem = (string) FontNameRules::check('Grotesk (Pro)!');
|
||
self::assertStringContainsString('nur Buchstaben', $problem);
|
||
self::assertStringContainsString('„Grotesk Pro“', $problem);
|
||
|
||
self::assertStringContainsString('„Mller“', (string) FontNameRules::check('Müller'));
|
||
self::assertStringContainsString('nur Buchstaben', (string) FontNameRules::check('a.b'));
|
||
self::assertStringContainsString('nur Buchstaben', (string) FontNameRules::check("Tab\tName"));
|
||
self::assertStringContainsString('nichts übrig', (string) FontNameRules::check('«»'));
|
||
}
|
||
|
||
public function testEmptyAndPaddedNamesAreRefused(): void
|
||
{
|
||
self::assertStringContainsString('1–100 Zeichen', (string) FontNameRules::check(''));
|
||
self::assertStringContainsString('1–100 Zeichen', (string) FontNameRules::check(' '));
|
||
self::assertStringContainsString('Anfang oder Ende', (string) FontNameRules::check(' Inter'));
|
||
self::assertStringContainsString('Anfang oder Ende', (string) FontNameRules::check('Inter '));
|
||
}
|
||
|
||
public function testTheLengthLimitIsOneHundredCharactersOrDivisBound(): void
|
||
{
|
||
self::assertNull(FontNameRules::check(str_repeat('a', 100)));
|
||
self::assertStringContainsString(
|
||
'höchstens 100 Zeichen (101 angegeben)',
|
||
(string) FontNameRules::check(str_repeat('a', 101))
|
||
);
|
||
self::assertStringContainsString(
|
||
'höchstens 50 Zeichen',
|
||
(string) FontNameRules::check(str_repeat('a', 51), 50)
|
||
);
|
||
}
|
||
|
||
public function testNamesOfGoogleWebSafeAndUploadedFontsAreTakenWhateverTheCase(): void
|
||
{
|
||
self::assertSame('Open Sans', FontNameRules::taken('open sans', self::RESERVED));
|
||
self::assertSame('Arial', FontNameRules::taken('ARIAL', self::RESERVED), 'web-safe fonts too (Divi skips them)');
|
||
self::assertSame('Hausschrift', FontNameRules::taken('Hausschrift', self::RESERVED));
|
||
self::assertNull(FontNameRules::taken('Open Sans Pro', self::RESERVED));
|
||
self::assertNull(FontNameRules::taken('Roboto', []));
|
||
self::assertNull(FontNameRules::check('times new roman'), 'the form is fine; the collision is taken()');
|
||
}
|
||
}
|