Fixes #3486, Incorrect rule in Inflector::singularize()

Added additional test for Inflector

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@5957 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
phpnut 2007-11-06 05:12:37 +00:00
parent 1e1c49025a
commit e48e49073b
2 changed files with 115 additions and 19 deletions

View file

@ -76,24 +76,24 @@ class Inflector extends Object {
$_this =& Inflector::getInstance();
$corePluralRules = array('/(s)tatus$/i' => '\1\2tatuses',
'/(quiz)$/i' => '\1zes',
'/^(ox)$/i' => '\1\2en', # ox
'/([m|l])ouse$/i' => '\1ice', # mouse, louse
'/(matr|vert|ind)(ix|ex)$/i' => '\1ices', # matrix, vertex, index
'/(x|ch|ss|sh)$/i' => '\1es', # search, switch, fix, box, process, address
'/([^aeiouy]|qu)y$/i' => '\1ies', # query, ability, agency
'/(hive)$/i' => '\1s', # archive, hive
'/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', # half, safe, wife
'/sis$/i' => 'ses', # basis, diagnosis
'/([ti])um$/i' => '\1a', # datum, medium
'/(p)erson$/i' => '\1eople', # person, salesperson
'/(m)an$/i' => '\1en', # man, woman, spokesman
'/(c)hild$/i' => '\1hildren', # child
'/(buffal|tomat)o$/i' => '\1\2oes', # buffalo, tomato
'/us$/' => 'uses', # us
'/(alias)$/i' => '\1es', # alias
'/(octop|vir)us$/i' => '\1i', # octopus, virus - virus has no defined plural (according to Latin/dictionary.com), but viri is better than viruses/viruss
'/(ax|cri|test)is$/i' => '\1es', # axis, crisis
'/s$/' => 's', # no change (compatibility)
'/^(ox)$/i' => '\1\2en',
'/([m|l])ouse$/i' => '\1ice',
'/(matr|vert|ind)(ix|ex)$/i' => '\1ices',
'/(x|ch|ss|sh)$/i' => '\1es',
'/([^aeiouy]|qu)y$/i' => '\1ies',
'/(hive)$/i' => '\1s',
'/(?:([^f])fe|([lr])f)$/i' => '\1\2ves',
'/sis$/i' => 'ses',
'/([ti])um$/i' => '\1a',
'/(p)erson$/i' => '\1eople',
'/(m)an$/i' => '\1en',
'/(c)hild$/i' => '\1hildren',
'/(buffal|tomat)o$/i' => '\1\2oes',
'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i',
'/us$/' => 'uses',
'/(alias)$/i' => '\1es',
'/(ax|cri|test)is$/i' => '\1es',
'/s$/' => 's',
'/$/' => 's',);
$coreUninflectedPlural = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*sheep', 'Amoyese',
@ -211,7 +211,7 @@ class Inflector extends Object {
'/(vert|ind)ices$/i' => '\1ex',
'/^(ox)en/i' => '\1',
'/(alias)(es)*$/i' => '\1',
'/([octop|vir])i$/i' => '\1us',
'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us',
'/(cris|ax|test)es$/i' => '\1is',
'/(shoe)s$/i' => '\1',
'/(o)es$/i' => '\1',

View file

@ -109,6 +109,54 @@ class InflectorTest extends UnitTestCase {
$result = $this->Inflector->singularize('Media');
$expected = 'Media';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('alumni');
$expected = 'alumnus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('bacilli');
$expected = 'bacillus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('cacti');
$expected = 'cactus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('foci');
$expected = 'focus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('fungi');
$expected = 'fungus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('nuclei');
$expected = 'nucleus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('octopuses');
$expected = 'octopus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('radii');
$expected = 'radius';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('stimuli');
$expected = 'stimulus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('syllabi');
$expected = 'syllabus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('termini');
$expected = 'terminus';
$this->assertEqual($result, $expected);
$result = $this->Inflector->singularize('viri');
$expected = 'virus';
$this->assertEqual($result, $expected);
}
function testInflectingPlurals() {
@ -179,6 +227,54 @@ class InflectorTest extends UnitTestCase {
$result = $this->Inflector->pluralize('Media');
$expected = 'Media';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('alumnus');
$expected = 'alumni';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('bacillus');
$expected = 'bacilli';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('cactus');
$expected = 'cacti';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('focus');
$expected = 'foci';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('fungus');
$expected = 'fungi';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('nucleus');
$expected = 'nuclei';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('octopus');
$expected = 'octopuses';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('radius');
$expected = 'radii';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('stimulus');
$expected = 'stimuli';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('syllabus');
$expected = 'syllabi';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('terminus');
$expected = 'termini';
$this->assertEqual($result, $expected);
$result = $this->Inflector->pluralize('virus');
$expected = 'viri';
$this->assertEqual($result, $expected);
}
function testInflectorSlug() {