Passed
Push — master ( 653645...08f2f1 )
by
unknown
16:09 queued 04:49
created

testNamedRangeCalculationsIfError()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 15
rs 9.8666
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Calculation;
6
7
use PhpOffice\PhpSpreadsheet\IOFactory;
8
use PHPUnit\Framework\Attributes\DataProvider;
9
use PHPUnit\Framework\TestCase;
10
11
class DefinedNamesCalculationTest extends TestCase
12
{
13
    #[DataProvider('namedRangeCalculationProvider1')]
14
    public function testNamedRangeCalculations1(string $cellAddress, float $expectedValue): void
15
    {
16
        $inputFileType = 'Xlsx';
17
        $inputFileName = __DIR__ . '/../../data/Calculation/DefinedNames/NamedRanges.xlsx';
18
19
        $reader = IOFactory::createReader($inputFileType);
20
        $spreadsheet = $reader->load($inputFileName);
21
22
        $calculatedCellValue = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
23
        self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}");
24
        $spreadsheet->disconnectWorksheets();
25
    }
26
27
    public function testNamedRangeCalculationsIfError(): void
28
    {
29
        $inputFileType = 'Xlsx';
30
        $inputFileName = __DIR__ . '/../../data/Calculation/DefinedNames/NamedRanges.xlsx';
31
32
        $reader = IOFactory::createReader($inputFileType);
33
        $spreadsheet = $reader->load($inputFileName);
34
        $sheet = $spreadsheet->getActiveSheet();
35
        $sheet->getCell('E1')
36
            ->setValue('=IFERROR(CHARGE_RATE, 999)');
37
        $sheet->getCell('F1')
38
            ->setValue('=IFERROR(CHARGE_RATX, 999)');
39
        self::assertSame(7.5, $sheet->getCell('E1')->getCalculatedValue());
40
        self::assertSame(999, $sheet->getCell('F1')->getCalculatedValue());
41
        $spreadsheet->disconnectWorksheets();
42
    }
43
44
    #[DataProvider('namedRangeCalculationProvider2')]
45
    public function testNamedRangeCalculationsWithAdjustedRateValue(string $cellAddress, float $expectedValue): void
46
    {
47
        $inputFileType = 'Xlsx';
48
        $inputFileName = __DIR__ . '/../../data/Calculation/DefinedNames/NamedRanges.xlsx';
49
50
        $reader = IOFactory::createReader($inputFileType);
51
        $spreadsheet = $reader->load($inputFileName);
52
53
        $spreadsheet->getActiveSheet()->getCell('B1')->setValue(12.5);
54
55
        $calculatedCellValue = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
56
        self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}");
57
        $spreadsheet->disconnectWorksheets();
58
    }
59
60
    #[DataProvider('namedRangeCalculationProvider1')]
61
    public function testNamedFormulaCalculations1(string $cellAddress, float $expectedValue): void
62
    {
63
        $inputFileType = 'Xlsx';
64
        $inputFileName = __DIR__ . '/../../data/Calculation/DefinedNames/NamedFormulae.xlsx';
65
66
        $reader = IOFactory::createReader($inputFileType);
67
        $spreadsheet = $reader->load($inputFileName);
68
69
        $calculatedCellValue = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
70
        self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}");
71
        $spreadsheet->disconnectWorksheets();
72
    }
73
74
    #[DataProvider('namedRangeCalculationProvider2')]
75
    public function testNamedFormulaeCalculationsWithAdjustedRateValue(string $cellAddress, float $expectedValue): void
76
    {
77
        $inputFileType = 'Xlsx';
78
        $inputFileName = __DIR__ . '/../../data/Calculation/DefinedNames/NamedFormulae.xlsx';
79
80
        $reader = IOFactory::createReader($inputFileType);
81
        $spreadsheet = $reader->load($inputFileName);
82
83
        $spreadsheet->getActiveSheet()->getCell('B1')->setValue(12.5);
84
85
        $calculatedCellValue = $spreadsheet->getActiveSheet()->getCell($cellAddress)->getCalculatedValue();
86
        self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}");
87
        $spreadsheet->disconnectWorksheets();
88
    }
89
90
    public static function namedRangeCalculationProvider1(): array
91
    {
92
        return [
93
            ['C4', 56.25],
94
            ['C5', 54.375],
95
            ['C6', 48.75],
96
            ['C7', 52.5],
97
            ['C8', 41.25],
98
            ['B10', 33.75],
99
            ['C10', 253.125],
100
        ];
101
    }
102
103
    public static function namedRangeCalculationProvider2(): array
104
    {
105
        return [
106
            ['C4', 93.75],
107
            ['C5', 90.625],
108
            ['C6', 81.25],
109
            ['C7', 87.5],
110
            ['C8', 68.75],
111
            ['C10', 421.875],
112
        ];
113
    }
114
}
115