MoneySpellerTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace morphos\test\Russian;
  3. use morphos\Currency;
  4. use morphos\Russian\Cases;
  5. use morphos\Russian\MoneySpeller;
  6. use PHPUnit\Framework\TestCase;
  7. class MoneySpellerTest extends TestCase
  8. {
  9. /**
  10. * @dataProvider moneyAmountsProvider()
  11. *
  12. * @param $value
  13. * @param $currency
  14. * @param $format
  15. * @param $result
  16. *
  17. * @param null $case
  18. *
  19. * @throws \Exception
  20. */
  21. public function testSpell(
  22. $value,
  23. $currency,
  24. $format,
  25. $result,
  26. $case = null
  27. ) {
  28. $this->assertEquals($result, MoneySpeller::spell($value, $currency, $format, $case));
  29. }
  30. public function moneyAmountsProvider()
  31. {
  32. return
  33. [
  34. [123.45, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '123 рубля 45 копеек'],
  35. [
  36. 321.54,
  37. Currency::DOLLAR,
  38. MoneySpeller::NORMAL_FORMAT,
  39. 'триста двадцать один доллар пятьдесят четыре цента',
  40. ],
  41. [
  42. 321.54,
  43. Currency::DOLLAR,
  44. MoneySpeller::NORMAL_FORMAT,
  45. 'трехсот двадцати одного доллара пятидесяти четырех центов',
  46. Cases::RODIT,
  47. ],
  48. [
  49. 369.12,
  50. Currency::EURO,
  51. MoneySpeller::DUPLICATION_FORMAT,
  52. 'триста шестьдесят девять (369) евро двенадцать (12) центов',
  53. ],
  54. [
  55. 246.35,
  56. Currency::YEN,
  57. MoneySpeller::CLARIFICATION_FORMAT,
  58. '246 (двести сорок шесть) иен 35 (тридцать пять) сенов',
  59. ],
  60. [123, Currency::POUND, MoneySpeller::SHORT_FORMAT, '123 фунта'],
  61. [123, Currency::FRANC, MoneySpeller::SHORT_FORMAT, '123 франка'],
  62. [123, Currency::YUAN, MoneySpeller::SHORT_FORMAT, '123 юаня'],
  63. [123, Currency::HRYVNIA, MoneySpeller::SHORT_FORMAT, '123 гривны'],
  64. [123, Currency::KRONA, MoneySpeller::SHORT_FORMAT, '123 кроны'],
  65. [123, Currency::PESO, MoneySpeller::SHORT_FORMAT, '123 песо'],
  66. [123, Currency::FRANC, MoneySpeller::SHORT_FORMAT, '123 франка'],
  67. [123, Currency::LIRA, MoneySpeller::SHORT_FORMAT, '123 лиры'],
  68. [256.4, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '256 рублей 40 копеек'],
  69. [65536.4, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '65536 рублей 40 копеек'],
  70. [16777216.4, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '16777216 рублей 40 копеек'],
  71. [4294967296.4, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '4294967296 рублей 40 копеек'],
  72. [4294967297.4, Currency::RUBLE, MoneySpeller::SHORT_FORMAT, '4294967297 рублей 40 копеек'],
  73. [
  74. 4294967296.4,
  75. Currency::RUBLE,
  76. MoneySpeller::DUPLICATION_FORMAT,
  77. 'четыре миллиарда двести девяносто четыре миллиона девятьсот шестьдесят семь тысяч двести девяносто шесть (4294967296) рублей сорок (40) копеек',
  78. ],
  79. ];
  80. }
  81. /**
  82. *
  83. * @throws \Exception
  84. */
  85. public function testSpellInvalid()
  86. {
  87. $this->expectException(\InvalidArgumentException::class);
  88. MoneySpeller::spell(1, 'Invalid-Currency');
  89. }
  90. }