v1.0 Initial commit of project
This commit is contained in:
149
vendor/symfony/string/Tests/Inflector/FrenchInflectorTest.php
vendored
Normal file
149
vendor/symfony/string/Tests/Inflector/FrenchInflectorTest.php
vendored
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\String\Tests\Inflector;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\String\Inflector\FrenchInflector;
|
||||
|
||||
class FrenchInflectorTest extends TestCase
|
||||
{
|
||||
public static function pluralizeProvider()
|
||||
{
|
||||
return [
|
||||
// Le pluriel par défaut
|
||||
['voiture', 'voitures'],
|
||||
// special characters
|
||||
['œuf', 'œufs'],
|
||||
['oeuf', 'oeufs'],
|
||||
|
||||
// Les mots finissant par s, x, z sont invariables en nombre
|
||||
['bois', 'bois'],
|
||||
['fils', 'fils'],
|
||||
['héros', 'héros'],
|
||||
['nez', 'nez'],
|
||||
['rictus', 'rictus'],
|
||||
['sans', 'sans'],
|
||||
['souris', 'souris'],
|
||||
['tas', 'tas'],
|
||||
['toux', 'toux'],
|
||||
|
||||
// Les mots finissant en eau prennent tous un x au pluriel
|
||||
['eau', 'eaux'],
|
||||
['sceau', 'sceaux'],
|
||||
|
||||
// Les mots finissant en au prennent tous un x au pluriel sauf landau
|
||||
['noyau', 'noyaux'],
|
||||
['landau', 'landaus'],
|
||||
|
||||
// Les mots finissant en eu prennent un x au pluriel sauf pneu, bleu et émeu
|
||||
['pneu', 'pneus'],
|
||||
['bleu', 'bleus'],
|
||||
['émeu', 'émeus'],
|
||||
['cheveu', 'cheveux'],
|
||||
|
||||
// Les mots finissant en al se terminent en aux au pluriel
|
||||
['amiral', 'amiraux'],
|
||||
['animal', 'animaux'],
|
||||
['arsenal', 'arsenaux'],
|
||||
['bocal', 'bocaux'],
|
||||
['canal', 'canaux'],
|
||||
['capital', 'capitaux'],
|
||||
['caporal', 'caporaux'],
|
||||
['cheval', 'chevaux'],
|
||||
['cristal', 'cristaux'],
|
||||
['général', 'généraux'],
|
||||
['hopital', 'hopitaux'],
|
||||
['hôpital', 'hôpitaux'],
|
||||
['idéal', 'idéaux'],
|
||||
['journal', 'journaux'],
|
||||
['littoral', 'littoraux'],
|
||||
['local', 'locaux'],
|
||||
['mal', 'maux'],
|
||||
['métal', 'métaux'],
|
||||
['minéral', 'minéraux'],
|
||||
['principal', 'principaux'],
|
||||
['radical', 'radicaux'],
|
||||
['terminal', 'terminaux'],
|
||||
|
||||
// sauf bal, carnaval, caracal, chacal, choral, corral, étal, festival, récital et val
|
||||
['bal', 'bals'],
|
||||
['carnaval', 'carnavals'],
|
||||
['caracal', 'caracals'],
|
||||
['chacal', 'chacals'],
|
||||
['choral', 'chorals'],
|
||||
['corral', 'corrals'],
|
||||
['étal', 'étals'],
|
||||
['festival', 'festivals'],
|
||||
['récital', 'récitals'],
|
||||
['val', 'vals'],
|
||||
|
||||
// Les noms terminés en -ail prennent un s au pluriel.
|
||||
['portail', 'portails'],
|
||||
['rail', 'rails'],
|
||||
|
||||
// SAUF aspirail, bail, corail, émail, fermail, soupirail, travail, vantail et vitrail qui font leur pluriel en -aux
|
||||
['aspirail', 'aspiraux'],
|
||||
['bail', 'baux'],
|
||||
['corail', 'coraux'],
|
||||
['émail', 'émaux'],
|
||||
['fermail', 'fermaux'],
|
||||
['soupirail', 'soupiraux'],
|
||||
['travail', 'travaux'],
|
||||
['vantail', 'vantaux'],
|
||||
['vitrail', 'vitraux'],
|
||||
|
||||
// Les noms terminés en -ou prennent un s au pluriel.
|
||||
['trou', 'trous'],
|
||||
['fou', 'fous'],
|
||||
|
||||
// SAUF Bijou, caillou, chou, genou, hibou, joujou et pou qui prennent un x au pluriel
|
||||
['bijou', 'bijoux'],
|
||||
['caillou', 'cailloux'],
|
||||
['chou', 'choux'],
|
||||
['genou', 'genoux'],
|
||||
['hibou', 'hiboux'],
|
||||
['joujou', 'joujoux'],
|
||||
['pou', 'poux'],
|
||||
|
||||
// Inflected word
|
||||
['cinquante', 'cinquante'],
|
||||
['soixante', 'soixante'],
|
||||
['mille', 'mille'],
|
||||
|
||||
// Titles
|
||||
['monsieur', 'messieurs'],
|
||||
['madame', 'mesdames'],
|
||||
['mademoiselle', 'mesdemoiselles'],
|
||||
['monseigneur', 'messeigneurs'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider pluralizeProvider
|
||||
*/
|
||||
public function testSingularize(string $singular, string $plural)
|
||||
{
|
||||
$this->assertSame([$singular], (new FrenchInflector())->singularize($plural));
|
||||
// test casing: if the first letter was uppercase, it should remain so
|
||||
$this->assertSame([ucfirst($singular)], (new FrenchInflector())->singularize(ucfirst($plural)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider pluralizeProvider
|
||||
*/
|
||||
public function testPluralize(string $singular, string $plural)
|
||||
{
|
||||
$this->assertSame([$plural], (new FrenchInflector())->pluralize($singular));
|
||||
// test casing: if the first letter was uppercase, it should remain so
|
||||
$this->assertSame([ucfirst($plural)], (new FrenchInflector())->pluralize(ucfirst($singular)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user