assertSame('hello-world', SlugHelper::generate('Hello World')); } /** * Les caractères accentués doivent être translittérés en ASCII. */ public function testAccentedCharacters(): void { $this->assertSame('ete-en-foret', SlugHelper::generate('Été en forêt')); } /** * La cédille et les caractères spéciaux courants doivent être translittérés. */ public function testCedillaAndSpecialCharacters(): void { $this->assertSame('ca-la', SlugHelper::generate('Ça & Là !')); } /** * Les tirets multiples consécutifs doivent être fusionnés en un seul. */ public function testMultipleConsecutiveHyphens(): void { $this->assertSame('foo-bar', SlugHelper::generate('foo bar')); } /** * Les tirets en début et fin de slug doivent être supprimés. */ public function testLeadingAndTrailingHyphen(): void { $this->assertSame('foo', SlugHelper::generate(' foo ')); } /** * Les chiffres doivent être conservés dans le slug. */ public function testDigitsPreserved(): void { $this->assertSame('article-2024', SlugHelper::generate('Article 2024')); } /** * Les tirets déjà présents dans la chaîne doivent être conservés (fusionnés si doublons). */ public function testHyphensInSourceString(): void { $this->assertSame('mon-article', SlugHelper::generate('mon-article')); } /** * Une chaîne entièrement en majuscules doit être passée en minuscules. */ public function testUppercaseString(): void { $this->assertSame('php-est-super', SlugHelper::generate('PHP EST SUPER')); } // ── Cas limites ──────────────────────────────────────────────── /** * Une chaîne vide doit retourner une chaîne vide. */ public function testEmptyString(): void { $this->assertSame('', SlugHelper::generate('')); } /** * Une chaîne composée uniquement d'espaces doit retourner une chaîne vide. */ public function testSpacesOnlyString(): void { $this->assertSame('', SlugHelper::generate(' ')); } /** * Une chaîne composée uniquement de caractères spéciaux sans équivalent ASCII * doit retourner une chaîne vide. */ public function testCharactersWithoutAsciiEquivalent(): void { // Les caractères CJK n'ont pas d'équivalent ASCII//TRANSLIT $result = SlugHelper::generate('日本語'); $this->assertSame('', $result); } /** * Un slug déjà valide doit rester identique. */ public function testAlreadyValidSlug(): void { $this->assertSame('mon-slug-valide', SlugHelper::generate('mon-slug-valide')); } }