MiddleNamesInflectionTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace morphos\test\Russian;
  3. use morphos\NamesInflection;
  4. use morphos\Russian\Cases;
  5. use morphos\Russian\LastNamesInflection;
  6. use morphos\Russian\MiddleNamesInflection;
  7. use PHPUnit\Framework\TestCase;
  8. class MiddleNamesInflectionTest extends TestCase
  9. {
  10. /**
  11. * @dataProvider middleNamesProvider
  12. */
  13. public function testGetCases($name, $gender, $name2, $name3, $name4, $name5, $name6)
  14. {
  15. $forms = MiddleNamesInflection::getCases($name, $gender);
  16. $this->assertEquals([
  17. Cases::IMENIT => $name,
  18. Cases::RODIT => $name2,
  19. Cases::DAT => $name3,
  20. Cases::VINIT => $name4,
  21. Cases::TVORIT => $name5,
  22. Cases::PREDLOJ => $name6,
  23. ], $forms);
  24. }
  25. /**
  26. * @dataProvider middleNamesProvider()
  27. */
  28. public function testDetectGender($name, $gender)
  29. {
  30. $this->assertEquals($gender, MiddleNamesInflection::detectGender($name));
  31. }
  32. public function middleNamesProvider()
  33. {
  34. return [
  35. [
  36. 'Владимирович',
  37. NamesInflection::MALE,
  38. 'Владимировича',
  39. 'Владимировичу',
  40. 'Владимировича',
  41. 'Владимировичем',
  42. 'Владимировиче',
  43. ],
  44. [
  45. 'Валерьянович',
  46. NamesInflection::MALE,
  47. 'Валерьяновича',
  48. 'Валерьяновичу',
  49. 'Валерьяновича',
  50. 'Валерьяновичем',
  51. 'Валерьяновиче',
  52. ],
  53. [
  54. 'Богдановна',
  55. NamesInflection::FEMALE,
  56. 'Богдановны',
  57. 'Богдановне',
  58. 'Богдановну',
  59. 'Богдановной',
  60. 'Богдановне',
  61. ],
  62. ['Сергеевна', NamesInflection::FEMALE, 'Сергеевны', 'Сергеевне', 'Сергеевну', 'Сергеевной', 'Сергеевне'],
  63. ];
  64. }
  65. /**
  66. * @dataProvider mutableNamesProvider()
  67. */
  68. public function testMutableNames($name, $gender)
  69. {
  70. $this->assertTrue(MiddleNamesInflection::isMutable($name, $gender));
  71. }
  72. public function mutableNamesProvider()
  73. {
  74. return [
  75. ['Иванович', NamesInflection::MALE],
  76. ['Петровна', NamesInflection::FEMALE],
  77. ];
  78. }
  79. /**
  80. * @dataProvider middleNamesProvider()
  81. */
  82. public function testGetCase($name, $gender, $case2)
  83. {
  84. $this->assertEquals($case2, MiddleNamesInflection::getCase($name, Cases::RODIT, $gender));
  85. }
  86. /**
  87. * @dataProvider immutableNamesProvider()
  88. */
  89. public function testImmutable($name, $gender)
  90. {
  91. $this->assertFalse(MiddleNamesInflection::isMutable($name, $gender));
  92. }
  93. public function immutableNamesProvider()
  94. {
  95. return [
  96. ['А', NamesInflection::FEMALE],
  97. ];
  98. }
  99. }