AdjectiveDeclensionTest.php 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace morphos\test\Russian;
  3. use morphos\Gender;
  4. use morphos\Russian\AdjectiveDeclension;
  5. use PHPUnit\Framework\TestCase;
  6. class AdjectiveDeclensionTest extends TestCase
  7. {
  8. /**
  9. * @dataProvider wordsProvider
  10. *
  11. * @param string $word
  12. * @param $animateness
  13. * @param $inflected
  14. */
  15. public function testInflection($word, $animateness, $inflected)
  16. {
  17. array_unshift($inflected, $word);
  18. $this->assertEquals($inflected, array_values(AdjectiveDeclension::getCases($word, $animateness)));
  19. }
  20. /**
  21. * @return array
  22. */
  23. public function wordsProvider()
  24. {
  25. return [
  26. ['адресный', false, ['адресного', 'адресному', 'адресный', 'адресным', 'адресном']],
  27. ['выездной', false, ['выездного', 'выездному', 'выездной', 'выездным', 'выездном']],
  28. ['адресное', false, ['адресного', 'адресному', 'адресное', 'адресным', 'адресном']],
  29. ['выездное', false, ['выездного', 'выездному', 'выездное', 'выездным', 'выездном']],
  30. ['адресная', false, ['адресной', 'адресной', 'адресную', 'адресной', 'адресной']],
  31. ['выездная', false, ['выездной', 'выездной', 'выездную', 'выездной', 'выездной']],
  32. ['домашний', false, ['домашнего', 'домашнему', 'домашний', 'домашним', 'домашнем']],
  33. ['домашнее', false, ['домашнего', 'домашнему', 'домашнее', 'домашним', 'домашнем']],
  34. ['домашняя', false, ['домашней', 'домашней', 'домашнюю', 'домашней', 'домашней']],
  35. ['дилерский', false, ['дилерского', 'дилерскому', 'дилерский', 'дилерским', 'дилерском']],
  36. ['сухой', false, ['сухого', 'сухому', 'сухой', 'сухим', 'сухом']],
  37. ['большой', false, ['большого', 'большому', 'большой', 'большим', 'большом']],
  38. ['дилерское', false, ['дилерского', 'дилерскому', 'дилерское', 'дилерским', 'дилерском']],
  39. ['сухое', false, ['сухого', 'сухому', 'сухое', 'сухим', 'сухом']],
  40. ['большое', false, ['большого', 'большому', 'большое', 'большим', 'большом']],
  41. ['дилерская', false, ['дилерской', 'дилерской', 'дилерскую', 'дилерской', 'дилерской']],
  42. ['сухая', false, ['сухой', 'сухой', 'сухую', 'сухой', 'сухой']],
  43. ['большая', false, ['большой', 'большой', 'большую', 'большой', 'большой']],
  44. ];
  45. }
  46. /**
  47. * @dataProvider gendersProvider()
  48. */
  49. public function testGenderDetection($word, $gender)
  50. {
  51. $this->assertEquals($gender, AdjectiveDeclension::detectGender($word));
  52. }
  53. public function gendersProvider()
  54. {
  55. return [
  56. ['синяя', Gender::FEMALE],
  57. ['весёлая', Gender::FEMALE],
  58. ['дилерский', Gender::MALE],
  59. ['большой', Gender::MALE],
  60. ['хмурое', Gender::NEUTER],
  61. ['весеннее', Gender::NEUTER],
  62. ];
  63. }
  64. }