Completed
Push — master ( 84e489...5419ee )
by Mark
34s queued 29s
created

testStructuredReferenceHiddenHeaders()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 13
c 1
b 0
f 0
dl 0
loc 20
rs 9.8333
cc 1
nc 1
nop 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests\Calculation;
4
5
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
6
use PhpOffice\PhpSpreadsheet\IOFactory;
7
use PhpOffice\PhpSpreadsheet\Worksheet\Table;
8
use PHPUnit\Framework\TestCase;
9
10
class StructuredReferenceFormulaTest extends TestCase
11
{
12
    /**
13
     * @dataProvider structuredReferenceProvider
14
     */
15
    public function testStructuredReferences(float $expectedValue, string $cellAddress): void
16
    {
17
        $inputFileType = 'Xlsx';
18
        $inputFileName = __DIR__ . '/../../data/Calculation/TableFormulae.xlsx';
19
20
        $reader = IOFactory::createReader($inputFileType);
21
        $spreadsheet = $reader->load($inputFileName);
22
23
        $calculatedCellValue = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
24
        self::assertEqualsWithDelta($expectedValue, $calculatedCellValue, 1.0e-14, "Failed calculation for cell {$cellAddress}");
25
    }
26
27
    public function testStructuredReferenceHiddenHeaders(): void
28
    {
29
        $inputFileType = 'Xlsx';
30
        $inputFileName = __DIR__ . '/../../data/Calculation/TableFormulae.xlsx';
31
32
        $reader = IOFactory::createReader($inputFileType);
33
        $spreadsheet = $reader->load($inputFileName);
34
        /** @var Table $table */
35
        $table = $spreadsheet->getActiveSheet()->getTableByName('DeptSales');
36
37
        $cellAddress = 'G8';
38
        $spreadsheet->getActiveSheet()->getCell($cellAddress)->setValue('=DeptSales[[#Headers][Region]]');
39
        $result = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
40
        self::assertSame('Region', $result);
41
42
        $spreadsheet->getCalculationEngine()->flushInstance(); // @phpstan-ignore-line
43
        $table->setShowHeaderRow(false);
44
45
        $result = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
46
        self::assertSame(ExcelError::REF(), $result);
47
    }
48
49
    public function testStructuredReferenceInvalidColumn(): void
50
    {
51
        $inputFileType = 'Xlsx';
52
        $inputFileName = __DIR__ . '/../../data/Calculation/TableFormulae.xlsx';
53
54
        $reader = IOFactory::createReader($inputFileType);
55
        $spreadsheet = $reader->load($inputFileName);
56
57
        $cellAddress = 'E2';
58
        $spreadsheet->getActiveSheet()->getCell($cellAddress)->setValue('=[@Sales Amount]*[@[%age Commission]]');
59
60
        $result = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
61
        self::assertSame(ExcelError::REF(), $result);
62
    }
63
64
    public function structuredReferenceProvider(): array
65
    {
66
        return [
67
            [26.0, 'E2'],
68
            [99.0, 'E3'],
69
            [141.0, 'E4'],
70
            [49.2, 'E5'],
71
            [120.0, 'E6'],
72
            [135.0, 'E7'],
73
            [570.2, 'E8'],
74
            [3970.0, 'C8'],
75
        ];
76
    }
77
}
78