Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Jan 8, 2019
1 parent 093ce21 commit 15bafb8
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 31 deletions.
34 changes: 21 additions & 13 deletions src/Russian/NounPluralization.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,35 +65,43 @@ protected static function getRunAwayVowelsList()
* @return string
* @throws \Exception
*/
public static function pluralize($word, $count = 2, $animateness = false, $case = self::IMENIT)
public static function pluralize($word, $count = 2, $animateness = false, $case = null)
{
// меняем местами аргументы, если они переданы в старом формате
if (is_string($count) && is_numeric($word)) {
list($count, $word) = [$word, $count];
}

$case = self::canonizeCase($case);
// Именительный падеж превращается в родительный по правилам русского языка
if ($case === self::IMENIT)
$case = self::RODIT;
if ($case !== null)
$case = self::canonizeCase($case);

// для адъективных существительных правила склонения проще:
// только две формы
if (self::isAdjectiveNoun($word)) {
if (self::getNumeralForm($count) == self::ONE)
return $word;
else
return NounPluralization::getCase($word, $case, $animateness);
return NounPluralization::getCase($word,
$case !== null
? $case
: self::RODIT, $animateness);
}

switch (self::getNumeralForm($count)) {
case self::ONE:
return $word;
case self::TWO_FOUR:
return NounDeclension::getCase($word, $case, $animateness);
case self::FIVE_OTHER:
return NounPluralization::getCase($word, $case, $animateness);
if ($case === null) {
switch (self::getNumeralForm($count)) {
case self::ONE:
return $word;
case self::TWO_FOUR:
return NounDeclension::getCase($word, self::RODIT, $animateness);
case self::FIVE_OTHER:
return NounPluralization::getCase($word, self::RODIT, $animateness);
}
}

if (self::getNumeralForm($count) == self::ONE)
return NounDeclension::getCase($word, $case, $animateness);
else
return NounPluralization::getCase($word, $case, $animateness);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Russian/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ function normalizeFullName($name)
* @return string Строка в формате "ЧИСЛО [СУЩ в правильной форме]"
* @throws \Exception
*/
function pluralize($count, $word, $animateness = false, $case = Cases::IMENIT)
function pluralize($count, $word, $animateness = false, $case = null)
{
// меняем местами аргументы, если они переданы в старом формате
if (is_string($count) && is_numeric($word)) {
Expand Down
63 changes: 46 additions & 17 deletions tests/Russian/NounPluralizationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ class NounPluralizationTest extends \PHPUnit_Framework_TestCase
*
* @throws \Exception
*/
public function testPluralization($word, $pluralized2, $pluralized5, $case = Cases::IMENIT)
public function testPluralization($word, $pluralized2, $pluralized5)
{
// One
$this->assertEquals($word, NounPluralization::pluralize($word, 1, false, $case));
$this->assertEquals($word, NounPluralization::pluralize($word, 101, false, $case));
$this->assertEquals($word, NounPluralization::pluralize($word, 201, false, $case));
$this->assertEquals($word, NounPluralization::pluralize($word, 1501, false, $case));
$this->assertEquals($word, NounPluralization::pluralize($word, 1));
$this->assertEquals($word, NounPluralization::pluralize($word, 101));
$this->assertEquals($word, NounPluralization::pluralize($word, 201));
$this->assertEquals($word, NounPluralization::pluralize($word, 1501));

// Two-Four
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 2, false, $case));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 23, false, $case));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 104, false, $case));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 1503, false, $case));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 2));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 23));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 104));
$this->assertEquals($pluralized2, NounPluralization::pluralize($word, 1503));

// Five
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 5, false, $case));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 211, false, $case));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 520, false, $case));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 1513, false, $case));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 5));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 211));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 520));
$this->assertEquals($pluralized5, NounPluralization::pluralize($word, 1513));
}

public function pluralizationWordsProvider()
Expand Down Expand Up @@ -63,16 +63,45 @@ public function pluralizationWordsProvider()
['юань', 'юаня', 'юаней'],
['гривна', 'гривны', 'гривен'],

// в ином падеже
['год', 'годе', 'годах', 'предложный'],
['товар', 'товару', 'товарам', 'дательный'],

// адъективное склонение
['ванная', 'ванных', 'ванных'],
['прохожий', 'прохожих', 'прохожих'],
];
}

/**
* @dataProvider pluralizationWordsWithCaseProvider
*
* @param $word
* @param $pluralizedOne
* @param $pluralizedMany
*
* @param $case
*
* @throws \Exception
*/
public function testPluralizationWithCase($word, $pluralizedOne, $pluralizedMany, $case)
{
// One
$this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 1, false, $case));
$this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 21, false, $case));
$this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 101, false, $case));

// Many
$this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 3, false, $case));
$this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 22, false, $case));
$this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 60, false, $case));
}

public function pluralizationWordsWithCaseProvider()
{
return [
// в ином падеже
['год', 'годе', 'годах', 'предложный'],
['товар', 'товару', 'товарам', 'дательный'],
];
}

/**
* @dataProvider pluralWordsProvider
*/
Expand Down

0 comments on commit 15bafb8

Please sign in to comment.