Basic unit testing for 100 series actions for SUBTOTAL() with hidden rows/columns

This commit is contained in:
MarkBaker 2018-04-20 07:24:11 +01:00
parent 1ece540254
commit 04b4e74ec7
4 changed files with 194 additions and 14 deletions

View File

@ -1073,7 +1073,6 @@ class MathTrig
$args,
function ($index) use ($cellReference) {
list(, $row, $column) = explode('.', $index);
return $cellReference->getWorksheet()->getRowDimension($row)->getVisible() &&
$cellReference->getWorksheet()->getColumnDimension($column)->getVisible();
},

View File

@ -5,6 +5,10 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation;
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
use PhpOffice\PhpSpreadsheet\Calculation\MathTrig;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Worksheet\RowDimension;
use PhpOffice\PhpSpreadsheet\Worksheet\ColumnDimension;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PHPUnit\Framework\TestCase;
class MathTrigTest extends TestCase
@ -507,8 +511,26 @@ class MathTrigTest extends TestCase
*/
public function testSUBTOTAL($expectedResult, ...$args)
{
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$cellReference = $spreadsheet->getActiveSheet()->getCell('A1');
$cell = $this->getMockBuilder(Cell::class)
->setMethods(['getValue'])
->disableOriginalConstructor()
->getMock();
$cell->method('getValue')
->willReturn(null);
$worksheet = $this->getMockBuilder(Worksheet::class)
->setMethods(['cellExists', 'getCell'])
->disableOriginalConstructor()
->getMock();
$worksheet->method('cellExists')
->willReturn(true);
$worksheet->method('getCell')
->willReturn($cell);
$cellReference = $this->getMockBuilder(Cell::class)
->setMethods(['getWorksheet'])
->disableOriginalConstructor()
->getMock();
$cellReference->method('getWorksheet')
->willReturn($worksheet);
array_push($args, $cellReference);
$result = MathTrig::SUBTOTAL(...$args);
@ -519,4 +541,63 @@ class MathTrigTest extends TestCase
{
return require 'data/Calculation/MathTrig/SUBTOTAL.php';
}
protected static function rowVisibility() {
yield from [1 => false, 2 => true, 3 => false, 4 => true, 5 => false, 6 => false, 7 => false, 8 => true, 9 => false, 10 => true, 11 =>true];
}
/**
* @dataProvider providerSUBTOTALHIDDEN
*
* @param mixed $expectedResult
*/
public function testSUBTOTALHIDDEN($expectedResult, ...$args)
{
$generator = \PhpOffice\PhpSpreadsheetTests\Calculation\MathTrigTest::rowVisibility();
$rowDimension = $this->getMockBuilder(RowDimension::class)
->setMethods(['getVisible'])
->disableOriginalConstructor()
->getMock();
$rowDimension->method('getVisible')
->will($this->returnCallback(function() use ($generator) { $result = $generator->current(); $generator->next(); return $result; }));
$columnDimension = $this->getMockBuilder(ColumnDimension::class)
->setMethods(['getVisible'])
->disableOriginalConstructor()
->getMock();
$columnDimension->method('getVisible')
->willReturn(true);
$cell = $this->getMockBuilder(Cell::class)
->setMethods(['getValue'])
->disableOriginalConstructor()
->getMock();
$cell->method('getValue')
->willReturn('');
$worksheet = $this->getMockBuilder(Worksheet::class)
->setMethods(['cellExists', 'getCell', 'getRowDimension', 'getColumnDimension'])
->disableOriginalConstructor()
->getMock();
$worksheet->method('cellExists')
->willReturn(true);
$worksheet->method('getCell')
->willReturn($cell);
$worksheet->method('getRowDimension')
->willReturn($rowDimension);
$worksheet->method('getColumnDimension')
->willReturn($columnDimension);
$cellReference = $this->getMockBuilder(Cell::class)
->setMethods(['getWorksheet'])
->disableOriginalConstructor()
->getMock();
$cellReference->method('getWorksheet')
->willReturn($worksheet);
array_push($args, $cellReference);
$result = MathTrig::SUBTOTAL(...$args);
self::assertEquals($expectedResult, $result, null, 1E-12);
}
public function providerSUBTOTALHIDDEN()
{
return require 'data/Calculation/MathTrig/SUBTOTALHIDDEN.php';
}
}

View File

@ -1,48 +1,74 @@
<?php
$baseTestData = [
1 => ['A' => 0],
2 => ['A' => 1],
3 => ['A' => 1],
4 => ['A' => 2],
5 => ['A' => 3],
6 => ['A' => 5],
7 => ['A' => 8],
8 => ['A' => 13],
9 => ['A' => 21],
10 => ['A' => 34],
11 => ['A' => 55],
12 => ['A' => 89]
];
return [
[
19.3333333333333,
1, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
1,
$baseTestData,
],
[
12,
2, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
2,
$baseTestData,
],
[
12,
3, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
3,
$baseTestData,
],
[
89,
4, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
4,
$baseTestData,
],
[
0,
5, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
5,
$baseTestData,
],
[
0,
6, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
6,
$baseTestData,
],
[
27.5196899207337,
7, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
7,
$baseTestData,
],
[
26.3480971271593,
8, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
8,
$baseTestData,
],
[
232,
9, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
9,
$baseTestData,
],
[
757.3333333333330,
10, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
10,
$baseTestData,
],
[
694.2222222222220,
11, [1 => ['A' => 0], 2 => ['A' => 1], 3 => ['A' => 1], 4 => ['A' => 2], 5 => ['A' => 3], 6 => ['A' => 5], 7 => ['A' => 8], 8 => ['A' => 13], 9 => ['A' => 21], 10 => ['A' => 34], 11 => ['A' => 55], 12 => ['A' => 89] ]
11,
$baseTestData,
],
];

View File

@ -0,0 +1,74 @@
<?php
$baseTestData = [
1 => ['A' => 0],
2 => ['A' => 1],
3 => ['A' => 1],
4 => ['A' => 2],
5 => ['A' => 3],
6 => ['A' => 5],
7 => ['A' => 8],
8 => ['A' => 13],
9 => ['A' => 21],
10 => ['A' => 34],
11 => ['A' => 55],
12 => ['A' => 89]
];
return [
[
21,
101,
$baseTestData,
],
[
5,
102,
$baseTestData,
],
[
5,
103,
$baseTestData,
],
[
55,
104,
$baseTestData,
],
[
1,
105,
$baseTestData,
],
[
48620,
106,
$baseTestData,
],
[
23.1840462387393,
107,
$baseTestData,
],
[
20.7364413533277,
108,
$baseTestData,
],
[
105,
109,
$baseTestData,
],
[
537.5,
110,
$baseTestData,
],
[
430,
111,
$baseTestData,
],
];