CalculationErrorTest.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcException;
  5. use PHPUnit\Framework\TestCase;
  6. use Throwable;
  7. class CalculationErrorTest extends TestCase
  8. {
  9. public function testCalculationException(): void
  10. {
  11. $this->expectException(CalcException::class);
  12. $this->expectExceptionMessage('Formula Error:');
  13. $calculation = Calculation::getInstance();
  14. $result = $calculation->_calculateFormulaValue('=SUM(');
  15. self::assertFalse($result);
  16. }
  17. public function testCalculationError(): void
  18. {
  19. $calculation = Calculation::getInstance();
  20. $calculation->suppressFormulaErrors = true;
  21. $error = false;
  22. try {
  23. $calculation->_calculateFormulaValue('=SUM(');
  24. } catch (Throwable $e) {
  25. self::assertSame("Formula Error: Expecting ')'", $e->getMessage());
  26. self::assertSame('PHPUnit\\Framework\\Error\\Error', get_class($e));
  27. $error = true;
  28. }
  29. self::assertTrue($error);
  30. }
  31. /**
  32. * @param mixed $args
  33. */
  34. public static function errhandler2(...$args): bool
  35. {
  36. return $args[0] === E_USER_ERROR;
  37. }
  38. public function testCalculationErrorTrulySuppressed(): void
  39. {
  40. $calculation = Calculation::getInstance();
  41. $calculation->suppressFormulaErrors = true;
  42. set_error_handler([self::class, 'errhandler2']);
  43. $result = $calculation->_calculateFormulaValue('=SUM(');
  44. restore_error_handler();
  45. self::assertFalse($result);
  46. }
  47. }