Skip to content

Commit 9a193f2

Browse files
authored
Merge pull request #4571 from oleibman/calcformulatests
Clean Up Some Engineering Tests
2 parents f65b0a2 + 79fca76 commit 9a193f2

33 files changed

+377
-689
lines changed

tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
88
use PhpOffice\PhpSpreadsheet\Spreadsheet;
9+
use PHPUnit\Framework\Attributes\DataProvider;
910
use PHPUnit\Framework\TestCase;
1011

1112
class ArrayFormulaTest extends TestCase
1213
{
13-
#[\PHPUnit\Framework\Attributes\DataProvider('providerArrayFormulae')]
14+
#[DataProvider('providerArrayFormulae')]
1415
public function testArrayFormula(string $formula, mixed $expectedResult): void
1516
{
16-
$result = Calculation::getInstance()->_calculateFormulaValue($formula);
17+
$result = Calculation::getInstance()->calculateFormula($formula);
1718
self::assertEquals($expectedResult, $result);
1819
}
1920

tests/PhpSpreadsheetTests/Calculation/CalculationErrorTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public function testCalculationExceptionSuppressed(): void
1515
$calculation = Calculation::getInstance();
1616
self::assertFalse($calculation->getSuppressFormulaErrors());
1717
$calculation->setSuppressFormulaErrors(true);
18-
$result = $calculation->_calculateFormulaValue('=SUM(');
18+
$result = $calculation->calculateFormula('=SUM(');
1919
$calculation->setSuppressFormulaErrors(false);
2020
self::assertFalse($result);
2121
}
@@ -26,7 +26,7 @@ public function testCalculationException(): void
2626
self::assertFalse($calculation->getSuppressFormulaErrors());
2727
$this->expectException(CalcException::class);
2828
$this->expectExceptionMessage("Formula Error: Expecting ')'");
29-
$result = $calculation->_calculateFormulaValue('=SUM(');
29+
$result = $calculation->calculateFormula('=SUM(');
3030
self::assertFalse($result);
3131
}
3232
}

tests/PhpSpreadsheetTests/Calculation/CalculationTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ protected function tearDown(): void
3232
public function testBinaryComparisonOperation(string $formula, mixed $expectedResultExcel, mixed $expectedResultOpenOffice): void
3333
{
3434
Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL);
35-
$resultExcel = Calculation::getInstance()->_calculateFormulaValue($formula);
35+
$resultExcel = Calculation::getInstance()->calculateFormula($formula);
3636
self::assertEquals($expectedResultExcel, $resultExcel, 'should be Excel compatible');
3737

3838
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
39-
$resultOpenOffice = Calculation::getInstance()->_calculateFormulaValue($formula);
39+
$resultOpenOffice = Calculation::getInstance()->calculateFormula($formula);
4040
self::assertEquals($expectedResultOpenOffice, $resultOpenOffice, 'should be OpenOffice compatible');
4141
}
4242

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Engineering;
6+
7+
use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcException;
8+
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
9+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
10+
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
11+
use PHPUnit\Framework\TestCase;
12+
13+
class AllSetupTeardown extends TestCase
14+
{
15+
private string $compatibilityMode;
16+
17+
private ?Spreadsheet $spreadsheet = null;
18+
19+
private ?Worksheet $sheet = null;
20+
21+
protected function setUp(): void
22+
{
23+
$this->compatibilityMode = Functions::getCompatibilityMode();
24+
}
25+
26+
protected function tearDown(): void
27+
{
28+
Functions::setCompatibilityMode($this->compatibilityMode);
29+
$this->sheet = null;
30+
if ($this->spreadsheet !== null) {
31+
$this->spreadsheet->disconnectWorksheets();
32+
$this->spreadsheet = null;
33+
}
34+
}
35+
36+
protected static function setExcel(): void
37+
{
38+
Functions::setCompatibilityMode(
39+
Functions::COMPATIBILITY_EXCEL
40+
);
41+
}
42+
43+
protected static function setOpenOffice(): void
44+
{
45+
Functions::setCompatibilityMode(
46+
Functions::COMPATIBILITY_OPENOFFICE
47+
);
48+
}
49+
50+
protected static function setGnumeric(): void
51+
{
52+
Functions::setCompatibilityMode(
53+
Functions::COMPATIBILITY_GNUMERIC
54+
);
55+
}
56+
57+
protected function mightHaveException(mixed $expectedResult): void
58+
{
59+
if ($expectedResult === 'exception') {
60+
$this->expectException(CalcException::class);
61+
}
62+
}
63+
64+
protected function getSpreadsheet(): Spreadsheet
65+
{
66+
if ($this->spreadsheet !== null) {
67+
return $this->spreadsheet;
68+
}
69+
$this->spreadsheet = new Spreadsheet();
70+
71+
return $this->spreadsheet;
72+
}
73+
74+
protected function getSheet(): Worksheet
75+
{
76+
if ($this->sheet !== null) {
77+
return $this->sheet;
78+
}
79+
$this->sheet = $this->getSpreadsheet()->getActiveSheet();
80+
81+
return $this->sheet;
82+
}
83+
}

tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselITest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function testBESSELIAsFormula(mixed $expectedResult, mixed ...$args): voi
3131
$calculation = Calculation::getInstance();
3232
$formula = "=BESSELI({$arguments})";
3333

34-
$result = $calculation->_calculateFormulaValue($formula);
34+
$result = $calculation->calculateFormula($formula);
3535
self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION);
3636
}
3737

@@ -92,7 +92,7 @@ public function testBesselIArray(array $expectedResult, string $value, string $o
9292
$calculation = Calculation::getInstance();
9393

9494
$formula = "=BESSELI({$value}, {$ord})";
95-
$result = $calculation->_calculateFormulaValue($formula);
95+
$result = $calculation->calculateFormula($formula);
9696
self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION);
9797
}
9898

tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselJTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function testBESSELJAsFormula(mixed $expectedResult, mixed ...$args): voi
3131
$calculation = Calculation::getInstance();
3232
$formula = "=BESSELJ({$arguments})";
3333

34-
$result = $calculation->_calculateFormulaValue($formula);
34+
$result = $calculation->calculateFormula($formula);
3535
self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION);
3636
}
3737

@@ -92,7 +92,7 @@ public function testBesselJArray(array $expectedResult, string $value, string $o
9292
$calculation = Calculation::getInstance();
9393

9494
$formula = "=BESSELJ({$value}, {$ord})";
95-
$result = $calculation->_calculateFormulaValue($formula);
95+
$result = $calculation->calculateFormula($formula);
9696
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-14);
9797
}
9898

tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselKTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function testBESSELKAsFormula(mixed $expectedResult, mixed ...$args): voi
3131
$calculation = Calculation::getInstance();
3232
$formula = "=BESSELK({$arguments})";
3333

34-
$result = $calculation->_calculateFormulaValue($formula);
34+
$result = $calculation->calculateFormula($formula);
3535
self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION);
3636
}
3737

@@ -92,7 +92,7 @@ public function testBesselKArray(array $expectedResult, string $value, string $o
9292
$calculation = Calculation::getInstance();
9393

9494
$formula = "=BESSELK({$value}, {$ord})";
95-
$result = $calculation->_calculateFormulaValue($formula);
95+
$result = $calculation->calculateFormula($formula);
9696
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-14);
9797
}
9898

tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselYTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function testBESSELYAsFormula(mixed $expectedResult, mixed ...$args): voi
3131
$calculation = Calculation::getInstance();
3232
$formula = "=BESSELY({$arguments})";
3333

34-
$result = $calculation->_calculateFormulaValue($formula);
34+
$result = $calculation->calculateFormula($formula);
3535
self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION);
3636
}
3737

@@ -92,7 +92,7 @@ public function testBesselYArray(array $expectedResult, string $value, string $o
9292
$calculation = Calculation::getInstance();
9393

9494
$formula = "=BESSELY({$value}, {$ord})";
95-
$result = $calculation->_calculateFormulaValue($formula);
95+
$result = $calculation->calculateFormula($formula);
9696
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-14);
9797
}
9898

tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,19 @@
77
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
88
use PhpOffice\PhpSpreadsheet\Calculation\Engineering\ConvertBinary;
99
use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalculationException;
10-
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
1110
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
12-
use PhpOffice\PhpSpreadsheet\Spreadsheet;
1311
use PhpOffice\PhpSpreadsheetTests\Calculation\Functions\FormulaArguments;
1412
use PHPUnit\Framework\Attributes\DataProvider;
15-
use PHPUnit\Framework\TestCase;
1613

17-
class Bin2HexTest extends TestCase
14+
class Bin2HexTest extends AllSetupTeardown
1815
{
19-
private string $compatibilityMode;
20-
21-
protected function setUp(): void
22-
{
23-
$this->compatibilityMode = Functions::getCompatibilityMode();
24-
}
25-
26-
protected function tearDown(): void
27-
{
28-
Functions::setCompatibilityMode($this->compatibilityMode);
29-
}
30-
3116
#[DataProvider('providerBIN2HEX')]
3217
public function testDirectCallToBIN2HEX(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void
3318
{
3419
$result = ($digits === null) ? ConvertBinary::toHex($value) : ConvertBinary::toHex($value, $digits);
3520
self::assertSame($expectedResult, $result);
3621
}
3722

38-
private function trimIfQuoted(string $value): string
39-
{
40-
return trim($value, '"');
41-
}
42-
4323
#[DataProvider('providerBIN2HEX')]
4424
public function testBIN2HEXAsFormula(mixed $expectedResult, mixed ...$args): void
4525
{
@@ -48,27 +28,23 @@ public function testBIN2HEXAsFormula(mixed $expectedResult, mixed ...$args): voi
4828
$calculation = Calculation::getInstance();
4929
$formula = "=BIN2HEX({$arguments})";
5030

51-
/** @var float|int|string */
52-
$result = $calculation->_calculateFormulaValue($formula);
53-
self::assertSame($expectedResult, $this->trimIfQuoted((string) $result));
31+
$result = $calculation->calculateFormula($formula);
32+
self::assertSame($expectedResult, $result);
5433
}
5534

5635
#[DataProvider('providerBIN2HEX')]
5736
public function testBIN2HEXInWorksheet(mixed $expectedResult, mixed ...$args): void
5837
{
5938
$arguments = new FormulaArguments(...$args);
6039

61-
$spreadsheet = new Spreadsheet();
62-
$worksheet = $spreadsheet->getActiveSheet();
40+
$worksheet = $this->getSheet();
6341
$argumentCells = $arguments->populateWorksheet($worksheet);
6442
$formula = "=BIN2HEX({$argumentCells})";
6543

6644
$result = $worksheet->setCellValue('A1', $formula)
6745
->getCell('A1')
6846
->getCalculatedValue();
6947
self::assertSame($expectedResult, $result);
70-
71-
$spreadsheet->disconnectWorksheets();
7248
}
7349

7450
public static function providerBIN2HEX(): array
@@ -81,8 +57,7 @@ public function testBIN2HEXUnhappyPath(string $expectedException, mixed ...$args
8157
{
8258
$arguments = new FormulaArguments(...$args);
8359

84-
$spreadsheet = new Spreadsheet();
85-
$worksheet = $spreadsheet->getActiveSheet();
60+
$worksheet = $this->getSheet();
8661
$argumentCells = $arguments->populateWorksheet($worksheet);
8762
$formula = "=BIN2HEX({$argumentCells})";
8863

@@ -91,8 +66,6 @@ public function testBIN2HEXUnhappyPath(string $expectedException, mixed ...$args
9166
$worksheet->setCellValue('A1', $formula)
9267
->getCell('A1')
9368
->getCalculatedValue();
94-
95-
$spreadsheet->disconnectWorksheets();
9669
}
9770

9871
public static function providerUnhappyBIN2HEX(): array
@@ -105,8 +78,7 @@ public static function providerUnhappyBIN2HEX(): array
10578
#[DataProvider('providerBIN2HEXOds')]
10679
public function testBIN2HEXOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
10780
{
108-
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
109-
81+
$this->setOpenOffice();
11082
$result = ($digits === null) ? ConvertBinary::toHex($value) : ConvertBinary::toHex($value, $digits);
11183
self::assertSame($expectedResult, $result);
11284
}
@@ -121,20 +93,17 @@ public function testBIN2HEXFractional(): void
12193
$calculation = Calculation::getInstance();
12294
$formula = '=BIN2HEX(101.1)';
12395

124-
Functions::setCompatibilityMode(Functions::COMPATIBILITY_GNUMERIC);
125-
/** @var float|int|string */
126-
$result = $calculation->_calculateFormulaValue($formula);
127-
self::assertSame('5', $this->trimIfQuoted((string) $result), 'Gnumeric');
96+
$this->setGnumeric();
97+
$result = $calculation->calculateFormula($formula);
98+
self::assertSame('5', $result, 'Gnumeric');
12899

129-
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
130-
/** @var float|int|string */
131-
$result = $calculation->_calculateFormulaValue($formula);
132-
self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'OpenOffice');
100+
$this->setOpenOffice();
101+
$result = $calculation->calculateFormula($formula);
102+
self::assertSame(ExcelError::NAN(), $result, 'OpenOffice');
133103

134-
Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL);
135-
/** @var float|int|string */
136-
$result = $calculation->_calculateFormulaValue($formula);
137-
self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel');
104+
$this->setExcel();
105+
$result = $calculation->calculateFormula($formula);
106+
self::assertSame(ExcelError::NAN(), $result, 'Excel');
138107
}
139108

140109
/** @param mixed[] $expectedResult */
@@ -144,8 +113,8 @@ public function testBin2HexArray(array $expectedResult, string $value): void
144113
$calculation = Calculation::getInstance();
145114

146115
$formula = "=BIN2HEX({$value})";
147-
$result = $calculation->_calculateFormulaValue($formula);
148-
self::assertEquals($expectedResult, $result);
116+
$result = $calculation->calculateFormula($formula);
117+
self::assertSame($expectedResult, $result);
149118
}
150119

151120
public static function providerBin2HexArray(): array

0 commit comments

Comments
 (0)