CalculationLoggingTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PHPUnit\Framework\TestCase;
  6. class CalculationLoggingTest extends TestCase
  7. {
  8. public function testFormulaWithLogging(): void
  9. {
  10. $spreadsheet = new Spreadsheet();
  11. $sheet = $spreadsheet->getActiveSheet();
  12. $sheet->fromArray(
  13. [
  14. [1, 2, 3],
  15. [4, 5, 6],
  16. [7, 8, 9],
  17. ]
  18. );
  19. $debugLog = Calculation::getInstance($spreadsheet)->getDebugLog();
  20. $debugLog->setWriteDebugLog(true);
  21. $cell = $sheet->getCell('E5');
  22. $cell->setValue('=ROUND(SQRT(SUM(A1:C3)), 1)');
  23. self::assertEquals(6.7, $cell->getCalculatedValue());
  24. $log = $debugLog->getLog();
  25. self::assertIsArray($log);
  26. $entries = count($log);
  27. self::assertGreaterThan(0, $entries);
  28. $finalEntry = array_pop($log);
  29. self::assertStringContainsString('Evaluation Result', $finalEntry);
  30. }
  31. public function testFormulaWithMultipleCellLogging(): void
  32. {
  33. $spreadsheet = new Spreadsheet();
  34. $sheet = $spreadsheet->getActiveSheet();
  35. $sheet->fromArray(
  36. [
  37. [1, 2, 3],
  38. [4, 5, 6],
  39. [7, 8, 9],
  40. ]
  41. );
  42. $debugLog = Calculation::getInstance($spreadsheet)->getDebugLog();
  43. $debugLog->setWriteDebugLog(true);
  44. $cell = $sheet->getCell('E1');
  45. $cell->setValue('=SUM(A1:C3)');
  46. $cell = $sheet->getCell('E3');
  47. $cell->setValue('=SQRT(E1)');
  48. $cell = $sheet->getCell('E5');
  49. $cell->setValue('=ROUND(E3, 1)');
  50. self::assertEquals(6.7, $cell->getCalculatedValue());
  51. $log = $debugLog->getLog();
  52. self::assertIsArray($log);
  53. $entries = count($log);
  54. self::assertGreaterThan(0, $entries);
  55. $finalEntry = array_pop($log);
  56. self::assertStringContainsString('Evaluation Result', $finalEntry);
  57. $e1Log = array_filter($log, function ($entry) {
  58. return strpos($entry, 'E1') !== false;
  59. });
  60. $e1Entries = count($e1Log);
  61. self::assertGreaterThan(0, $e1Entries);
  62. $e1FinalEntry = array_pop($e1Log);
  63. self::assertStringContainsString('Evaluation Result', $e1FinalEntry);
  64. $e3Log = array_filter($log, function ($entry) {
  65. return strpos($entry, 'E1') !== false;
  66. });
  67. $e3Entries = count($e3Log);
  68. self::assertGreaterThan(0, $e3Entries);
  69. $e3FinalEntry = array_pop($e3Log);
  70. self::assertStringContainsString('Evaluation Result', $e3FinalEntry);
  71. }
  72. public function testFlushLog(): void
  73. {
  74. $spreadsheet = new Spreadsheet();
  75. $sheet = $spreadsheet->getActiveSheet();
  76. $sheet->fromArray(
  77. [
  78. [1, 2, 3],
  79. [4, 5, 6],
  80. [7, 8, 9],
  81. ]
  82. );
  83. $debugLog = Calculation::getInstance($spreadsheet)->getDebugLog();
  84. $debugLog->setWriteDebugLog(true);
  85. $cell = $sheet->getCell('E5');
  86. $cell->setValue('=(1+-2)*3/4');
  87. self::assertEquals(-0.75, $cell->getCalculatedValue());
  88. $log = $debugLog->getLog();
  89. self::assertIsArray($log);
  90. $entries = count($log);
  91. self::assertGreaterThan(0, $entries);
  92. $debugLog->clearLog();
  93. $log = $debugLog->getLog();
  94. self::assertIsArray($log);
  95. self::assertEmpty($log);
  96. }
  97. }