ValueTest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\TextData;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
  5. class ValueTest extends AllSetupTeardown
  6. {
  7. /**
  8. * @var string
  9. */
  10. private $currencyCode;
  11. /**
  12. * @var string
  13. */
  14. private $decimalSeparator;
  15. /**
  16. * @var string
  17. */
  18. private $thousandsSeparator;
  19. protected function setUp(): void
  20. {
  21. parent::setUp();
  22. $this->currencyCode = StringHelper::getCurrencyCode();
  23. $this->decimalSeparator = StringHelper::getDecimalSeparator();
  24. $this->thousandsSeparator = StringHelper::getThousandsSeparator();
  25. }
  26. protected function tearDown(): void
  27. {
  28. parent::tearDown();
  29. StringHelper::setCurrencyCode($this->currencyCode);
  30. StringHelper::setDecimalSeparator($this->decimalSeparator);
  31. StringHelper::setThousandsSeparator($this->thousandsSeparator);
  32. }
  33. /**
  34. * @dataProvider providerVALUE
  35. *
  36. * @param mixed $expectedResult
  37. * @param mixed $value
  38. */
  39. public function testVALUE($expectedResult, $value = 'omitted'): void
  40. {
  41. StringHelper::setDecimalSeparator('.');
  42. StringHelper::setThousandsSeparator(' ');
  43. StringHelper::setCurrencyCode('$');
  44. $this->mightHaveException($expectedResult);
  45. $sheet = $this->getSheet();
  46. if ($value === 'omitted') {
  47. $sheet->getCell('B1')->setValue('=VALUE()');
  48. } else {
  49. $this->setCell('A1', $value);
  50. $sheet->getCell('B1')->setValue('=VALUE(A1)');
  51. }
  52. $result = $sheet->getCell('B1')->getCalculatedValue();
  53. self::assertEqualsWithDelta($expectedResult, $result, 1E-8);
  54. }
  55. public function providerVALUE(): array
  56. {
  57. return require 'tests/data/Calculation/TextData/VALUE.php';
  58. }
  59. /**
  60. * @dataProvider providerValueArray
  61. */
  62. public function testValueArray(array $expectedResult, string $argument): void
  63. {
  64. $calculation = Calculation::getInstance();
  65. $formula = "=VALUE({$argument})";
  66. $result = $calculation->_calculateFormulaValue($formula);
  67. self::assertEqualsWithDelta($expectedResult, $result, 1.0e-14);
  68. }
  69. public function providerValueArray(): array
  70. {
  71. return [
  72. 'row vector' => [[[44604, -1234.567]], '{"12-Feb-2022", "$ -1,234.567"}'],
  73. ];
  74. }
  75. }