MiddleNamesInflectionTest.php 2.7 KB

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