Current path: home/webdevt/prestashop17/vendor/symfony/symfony/src/Symfony/Component/Inflector/Tests/
?? Go up: /home/webdevt/prestashop17/vendor/symfony/symfony/src/Symfony/Component/Inflector
<?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\Inflector\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Inflector\Inflector;
class InflectorTest extends TestCase
{
public function singularizeProvider()
{
// see http://english-zone.com/spelling/plurals.html
// see http://www.scribd.com/doc/3271143/List-of-100-Irregular-Plural-Nouns-in-English
return [
['accesses', 'access'],
['addresses', 'address'],
['agendas', 'agenda'],
['alumnae', 'alumna'],
['alumni', 'alumnus'],
['analyses', ['analys', 'analyse', 'analysis']],
['antennae', 'antenna'],
['antennas', 'antenna'],
['appendices', ['appendex', 'appendix', 'appendice']],
['arches', ['arch', 'arche']],
['atlases', ['atlas', 'atlase', 'atlasis']],
['axes', ['ax', 'axe', 'axis']],
['babies', 'baby'],
['bacteria', ['bacterion', 'bacterium']],
['bases', ['bas', 'base', 'basis']],
['batches', ['batch', 'batche']],
['beaux', 'beau'],
['bees', 'bee'],
['boxes', 'box'],
['boys', 'boy'],
['bureaus', 'bureau'],
['bureaux', 'bureau'],
['buses', ['bus', 'buse', 'busis']],
['bushes', ['bush', 'bushe']],
['calves', ['calf', 'calve', 'calff']],
['cars', 'car'],
['cassettes', ['cassett', 'cassette']],
['caves', ['caf', 'cave', 'caff']],
['chateaux', 'chateau'],
['cheeses', ['chees', 'cheese', 'cheesis']],
['children', 'child'],
['circuses', ['circus', 'circuse', 'circusis']],
['cliffs', 'cliff'],
['committee', 'committee'],
['crises', ['cris', 'crise', 'crisis']],
['criteria', ['criterion', 'criterium']],
['cups', 'cup'],
['data', ['daton', 'datum']],
['days', 'day'],
['discos', 'disco'],
['devices', ['devex', 'devix', 'device']],
['drives', 'drive'],
['drivers', 'driver'],
['dwarves', ['dwarf', 'dwarve', 'dwarff']],
['echoes', ['echo', 'echoe']],
['elves', ['elf', 'elve', 'elff']],
['emphases', ['emphas', 'emphase', 'emphasis']],
['employees', 'employee'],
['faxes', 'fax'],
['fees', 'fee'],
['feet', 'foot'],
['feedback', 'feedback'],
['foci', 'focus'],
['focuses', ['focus', 'focuse', 'focusis']],
['formulae', 'formula'],
['formulas', 'formula'],
['fungi', 'fungus'],
['funguses', ['fungus', 'funguse', 'fungusis']],
['garages', ['garag', 'garage']],
['geese', 'goose'],
['halves', ['half', 'halve', 'halff']],
['hats', 'hat'],
['heroes', ['hero', 'heroe']],
['hippopotamuses', ['hippopotamus', 'hippopotamuse', 'hippopotamusis']], //hippopotami
['hoaxes', 'hoax'],
['hooves', ['hoof', 'hoove', 'hooff']],
['houses', ['hous', 'house', 'housis']],
['indexes', 'index'],
['indices', ['index', 'indix', 'indice']],
['ions', 'ion'],
['irises', ['iris', 'irise', 'irisis']],
['kisses', 'kiss'],
['knives', 'knife'],
['lamps', 'lamp'],
['leaves', ['leaf', 'leave', 'leaff']],
['lice', 'louse'],
['lives', 'life'],
['matrices', ['matrex', 'matrix', 'matrice']],
['matrixes', 'matrix'],
['men', 'man'],
['mice', 'mouse'],
['moves', 'move'],
['movies', 'movie'],
['nebulae', 'nebula'],
['neuroses', ['neuros', 'neurose', 'neurosis']],
['news', 'news'],
['oases', ['oas', 'oase', 'oasis']],
['objectives', 'objective'],
['oxen', 'ox'],
['parties', 'party'],
['people', 'person'],
['persons', 'person'],
['phenomena', ['phenomenon', 'phenomenum']],
['photos', 'photo'],
['pianos', 'piano'],
['plateaux', 'plateau'],
['poppies', 'poppy'],
['prices', ['prex', 'prix', 'price']],
['quizzes', 'quiz'],
['radii', 'radius'],
['roofs', 'roof'],
['roses', ['ros', 'rose', 'rosis']],
['sandwiches', ['sandwich', 'sandwiche']],
['scarves', ['scarf', 'scarve', 'scarff']],
['schemas', 'schema'], //schemata
['selfies', 'selfie'],
['series', 'series'],
['services', 'service'],
['sheriffs', 'sheriff'],
['shoes', ['sho', 'shoe']],
['spies', 'spy'],
['staves', ['staf', 'stave', 'staff']],
['stories', 'story'],
['strata', ['straton', 'stratum']],
['suitcases', ['suitcas', 'suitcase', 'suitcasis']],
['syllabi', 'syllabus'],
['tags', 'tag'],
['teeth', 'tooth'],
['theses', ['thes', 'these', 'thesis']],
['thieves', ['thief', 'thieve', 'thieff']],
['trees', 'tree'],
['waltzes', ['waltz', 'waltze']],
['wives', 'wife'],
// test casing: if the first letter was uppercase, it should remain so
['Men', 'Man'],
['GrandChildren', 'GrandChild'],
['SubTrees', 'SubTree'],
// Known issues
//['insignia', 'insigne'],
//['insignias', 'insigne'],
//['rattles', 'rattle'],
];
}
/**
* @dataProvider singularizeProvider
*/
public function testSingularize($plural, $expectedSingular)
{
$singular = Inflector::singularize($plural);
if (\is_string($expectedSingular) && \is_array($singular)) {
$this->fail("--- Expected\n`string`: ".$expectedSingular."\n+++ Actual\n`array`: ".implode(', ', $singular));
} elseif (\is_array($expectedSingular) && \is_string($singular)) {
$this->fail("--- Expected\n`array`: ".implode(', ', $expectedSingular)."\n+++ Actual\n`string`: ".$singular);
}
$this->assertEquals($expectedSingular, $singular);
}
}