mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-10-07 20:37:51 +00:00
a01a401228
* MathTrig - Fix Phpstan Accomodations This should be the last of my mass changes to MathTrig. All he Phpstan violations found in baseline which are part of MathTrig are now fixed and removed from baseline. There were about 20 of these.
139 lines
4.5 KiB
PHP
139 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig;
|
|
|
|
class SubTotalTest extends AllSetupTeardown
|
|
{
|
|
/**
|
|
* @dataProvider providerSUBTOTAL
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $type expect an integer
|
|
*/
|
|
public function testSubtotal($expectedResult, $type): void
|
|
{
|
|
$this->mightHaveException($expectedResult);
|
|
$sheet = $this->sheet;
|
|
$sheet->fromArray([[0], [1], [1], [2], [3], [5], [8], [13], [21], [34], [55], [89]], null, 'A1', true);
|
|
$maxCol = $sheet->getHighestColumn();
|
|
$maxRow = $sheet->getHighestRow();
|
|
$sheet->getCell('D2')->setValue("=SUBTOTAL($type, A1:$maxCol$maxRow)");
|
|
$result = $sheet->getCell('D2')->getCalculatedValue();
|
|
self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
|
|
}
|
|
|
|
public function providerSUBTOTAL(): array
|
|
{
|
|
return require 'tests/data/Calculation/MathTrig/SUBTOTAL.php';
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerSUBTOTAL
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $type expect an integer
|
|
*/
|
|
public function testSubtotalColumnHidden($expectedResult, $type): void
|
|
{
|
|
// Hidden columns don't affect calculation, only hidden rows
|
|
$this->mightHaveException($expectedResult);
|
|
$sheet = $this->sheet;
|
|
$sheet->fromArray([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], null, 'A1', true);
|
|
$maxCol = $sheet->getHighestColumn();
|
|
$maxRow = $sheet->getHighestRow();
|
|
$hiddenColumns = [
|
|
'A' => false,
|
|
'B' => true,
|
|
'C' => false,
|
|
'D' => true,
|
|
'E' => false,
|
|
'F' => false,
|
|
'G' => false,
|
|
'H' => true,
|
|
'I' => false,
|
|
'J' => true,
|
|
'K' => true,
|
|
'L' => false,
|
|
];
|
|
foreach ($hiddenColumns as $col => $hidden) {
|
|
$colDim = $sheet->getColumnDimension($col);
|
|
if ($colDim === null) {
|
|
self::fail('Unexpected null column dimension');
|
|
} else {
|
|
$colDim->setVisible($hidden);
|
|
}
|
|
}
|
|
$sheet->getCell('D2')->setValue("=SUBTOTAL($type, A1:$maxCol$maxRow)");
|
|
$result = $sheet->getCell('D2')->getCalculatedValue();
|
|
self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerSUBTOTALHIDDEN
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $type expect an integer
|
|
*/
|
|
public function testSubtotalRowHidden($expectedResult, $type): void
|
|
{
|
|
$this->mightHaveException($expectedResult);
|
|
$sheet = $this->sheet;
|
|
$sheet->fromArray([[0], [1], [1], [2], [3], [5], [8], [13], [21], [34], [55], [89]], null, 'A1', true);
|
|
$maxCol = $sheet->getHighestColumn();
|
|
$maxRow = $sheet->getHighestRow();
|
|
$visibleRows = [
|
|
'1' => false,
|
|
'2' => true,
|
|
'3' => false,
|
|
'4' => true,
|
|
'5' => false,
|
|
'6' => false,
|
|
'7' => false,
|
|
'8' => true,
|
|
'9' => false,
|
|
'10' => true,
|
|
'11' => true,
|
|
'12' => false,
|
|
];
|
|
foreach ($visibleRows as $row => $visible) {
|
|
$rowDim = $sheet->getRowDimension($row);
|
|
if ($rowDim === null) {
|
|
self::fail('Unexpected null row dimension');
|
|
} else {
|
|
$rowDim->setVisible($visible);
|
|
}
|
|
}
|
|
$sheet->getCell('D2')->setValue("=SUBTOTAL($type, A1:$maxCol$maxRow)");
|
|
$result = $sheet->getCell('D2')->getCalculatedValue();
|
|
self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
|
|
}
|
|
|
|
public function providerSUBTOTALHIDDEN(): array
|
|
{
|
|
return require 'tests/data/Calculation/MathTrig/SUBTOTALHIDDEN.php';
|
|
}
|
|
|
|
public function testSubtotalNested(): void
|
|
{
|
|
$sheet = $this->sheet;
|
|
$sheet->fromArray(
|
|
[
|
|
[123],
|
|
[234],
|
|
['=SUBTOTAL(1,A1:A2)'],
|
|
['=ROMAN(SUBTOTAL(1, A1:A2))'],
|
|
['This is text containing "=" and "SUBTOTAL("'],
|
|
['=AGGREGATE(1, 0, A1:A2)'],
|
|
['=SUM(2, 3)'],
|
|
],
|
|
null,
|
|
'A1',
|
|
true
|
|
);
|
|
$maxCol = $sheet->getHighestColumn();
|
|
$maxRow = $sheet->getHighestRow();
|
|
$sheet->getCell('H1')->setValue("=SUBTOTAL(9, A1:$maxCol$maxRow)");
|
|
self::assertEquals(362, $sheet->getCell('H1')->getCalculatedValue());
|
|
}
|
|
}
|