From c8fc2863e39f89bafde461867a09ce96fd1fe621 Mon Sep 17 00:00:00 2001 From: zhukoff74 Date: Tue, 2 Dec 2025 21:09:08 +0300 Subject: [PATCH] Improve ArrayTest structure and readability --- .../Calculation/ArrayTest.php | 93 ++++++++++++++++--- 1 file changed, 80 insertions(+), 13 deletions(-) diff --git a/tests/PhpSpreadsheetTests/Calculation/ArrayTest.php b/tests/PhpSpreadsheetTests/Calculation/ArrayTest.php index 2656de2ea..86bff23d4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/ArrayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/ArrayTest.php @@ -7,10 +7,33 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation; use PhpOffice\PhpSpreadsheet\Calculation\Calculation; use PhpOffice\PhpSpreadsheet\Calculation\Functions; use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PHPUnit\Framework\TestCase; class ArrayTest extends TestCase { + private string $originalArrayReturnType; + + protected function setUp(): void + { + parent::setUp(); + $this->originalArrayReturnType = Calculation::getArrayReturnType(); + } + + protected function tearDown(): void + { + Calculation::setArrayReturnType($this->originalArrayReturnType); + parent::tearDown(); + } + + private function setupMatrix(Worksheet $sheet): void + { + $sheet->setCellValue('A1', 2.0); + $sheet->setCellValue('A2', 0.0); + $sheet->setCellValue('B1', 0.0); + $sheet->setCellValue('B2', 1.0); + } + public function testMultiDimensionalArrayIsFlattened(): void { $array = [ @@ -32,43 +55,87 @@ class ArrayTest extends TestCase $values = Functions::flattenArray($array); + self::assertCount(2, $values); self::assertIsNotArray($values[0]); self::assertIsNotArray($values[1]); + self::assertSame('PHP', $values[0]); + self::assertSame('Spreadsheet', $values[1]); } - public function testPropagateStatic(): void + public function testSetArrayReturnTypeWithValidValue(): void { - $oldValue = Calculation::getArrayReturnType(); - $calculation = new Calculation(); self::assertTrue(Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY)); - self::assertFalse(Calculation::setArrayReturnType('xxx')); self::assertSame(Calculation::RETURN_ARRAY_AS_ARRAY, Calculation::getArrayReturnType()); - self::assertFalse($calculation->setArrayReturnType('xxx')); + } + + public function testSetArrayReturnTypeWithInvalidValue(): void + { + $originalType = Calculation::getArrayReturnType(); + self::assertFalse(Calculation::setArrayReturnType('xxx')); + self::assertSame($originalType, Calculation::getArrayReturnType()); + } + + public function testInstanceArrayReturnTypeInheritsFromStatic(): void + { + Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY); + $calculation = new Calculation(); self::assertSame(Calculation::RETURN_ARRAY_AS_ARRAY, $calculation->getInstanceArrayReturnType()); + } + + public function testInstanceArrayReturnTypeCanBeOverridden(): void + { + Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY); + $calculation = new Calculation(); self::assertTrue($calculation->setInstanceArrayReturnType(Calculation::RETURN_ARRAY_AS_ERROR)); self::assertSame(Calculation::RETURN_ARRAY_AS_ARRAY, Calculation::getArrayReturnType()); self::assertSame(Calculation::RETURN_ARRAY_AS_ERROR, $calculation->getInstanceArrayReturnType()); - Calculation::setArrayReturnType($oldValue); } - public function testReturnTypes(): void + public function testSetInstanceArrayReturnTypeWithInvalidValue(): void + { + $calculation = new Calculation(); + self::assertFalse($calculation->setInstanceArrayReturnType('xxx')); + } + + public function testReturnTypeAsError(): void { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $calculation = Calculation::getInstance($spreadsheet); - $sheet->setCellValue('A1', 2.0); - $sheet->setCellValue('A2', 0.0); - $sheet->setCellValue('B1', 0.0); - $sheet->setCellValue('B2', 1.0); + $this->setupMatrix($sheet); $sheet->setCellValue('D1', '=MINVERSE(A1:B2)'); + $calculation->setInstanceArrayReturnType(Calculation::RETURN_ARRAY_AS_ERROR); self::assertSame('#VALUE!', $sheet->getCell('D1')->getCalculatedValue()); - $calculation->flushInstance(); + + $spreadsheet->disconnectWorksheets(); + } + + public function testReturnTypeAsValue(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $calculation = Calculation::getInstance($spreadsheet); + $this->setupMatrix($sheet); + $sheet->setCellValue('D1', '=MINVERSE(A1:B2)'); + $calculation->setInstanceArrayReturnType(Calculation::RETURN_ARRAY_AS_VALUE); self::assertSame(0.5, $sheet->getCell('D1')->getCalculatedValue()); - $calculation->flushInstance(); + + $spreadsheet->disconnectWorksheets(); + } + + public function testReturnTypeAsArray(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $calculation = Calculation::getInstance($spreadsheet); + $this->setupMatrix($sheet); + $sheet->setCellValue('D1', '=MINVERSE(A1:B2)'); + $calculation->setInstanceArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY); self::assertSame([[0.5, 0.0], [0.0, 1.0]], $sheet->getCell('D1')->getCalculatedValue()); + $spreadsheet->disconnectWorksheets(); } }