NumberFormatTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Style;
  3. use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
  4. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  5. use PHPUnit\Framework\TestCase;
  6. class NumberFormatTest extends TestCase
  7. {
  8. /**
  9. * @var string
  10. */
  11. private $currencyCode;
  12. /**
  13. * @var string
  14. */
  15. private $decimalSeparator;
  16. /**
  17. * @var string
  18. */
  19. private $thousandsSeparator;
  20. protected function setUp(): void
  21. {
  22. $this->currencyCode = StringHelper::getCurrencyCode();
  23. $this->decimalSeparator = StringHelper::getDecimalSeparator();
  24. $this->thousandsSeparator = StringHelper::getThousandsSeparator();
  25. StringHelper::setDecimalSeparator('.');
  26. StringHelper::setThousandsSeparator(',');
  27. }
  28. protected function tearDown(): void
  29. {
  30. StringHelper::setCurrencyCode($this->currencyCode);
  31. StringHelper::setDecimalSeparator($this->decimalSeparator);
  32. StringHelper::setThousandsSeparator($this->thousandsSeparator);
  33. }
  34. /**
  35. * @dataProvider providerNumberFormat
  36. *
  37. * @param mixed $expectedResult
  38. */
  39. public function testFormatValueWithMask($expectedResult, ...$args): void
  40. {
  41. $result = NumberFormat::toFormattedString(...$args);
  42. self::assertSame($expectedResult, $result);
  43. }
  44. public function providerNumberFormat(): array
  45. {
  46. return require 'tests/data/Style/NumberFormat.php';
  47. }
  48. /**
  49. * @dataProvider providerNumberFormatDates
  50. *
  51. * @param mixed $expectedResult
  52. */
  53. public function testFormatValueWithMaskDate($expectedResult, ...$args): void
  54. {
  55. $result = NumberFormat::toFormattedString(...$args);
  56. self::assertEquals($expectedResult, $result);
  57. }
  58. public function providerNumberFormatDates(): array
  59. {
  60. return require 'tests/data/Style/NumberFormatDates.php';
  61. }
  62. public function testCurrencyCode(): void
  63. {
  64. // "Currency symbol" replaces $ in some cases, not in others
  65. $cur = StringHelper::getCurrencyCode();
  66. StringHelper::setCurrencyCode('€');
  67. $fmt1 = '#,##0.000\ [$]';
  68. $rslt = NumberFormat::toFormattedString(12345.679, $fmt1);
  69. self::assertEquals($rslt, '12,345.679 €');
  70. $fmt2 = '$ #,##0.000';
  71. $rslt = NumberFormat::toFormattedString(12345.679, $fmt2);
  72. self::assertEquals($rslt, '$ 12,345.679');
  73. StringHelper::setCurrencyCode($cur);
  74. }
  75. }