Passed
Pull Request — master (#4390)
by Owen
13:00
created

CustomFunctionTest::testCustomFunction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 18
c 2
b 0
f 0
dl 0
loc 23
rs 9.6666
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\Calculation\Calculation;
8
use PHPUnit\Framework\TestCase;
9
10
class CustomFunctionTest extends TestCase
11
{
12
    public static function testCustomFunction(): void
13
    {
14
        $calculation = Calculation::getInstance();
15
        $key = 'FOURTHPOWER';
16
        // I have no idea why Phpstan needs this
17
        /** @var array<string, array> */
18
        $value = [
19
            'category' => 'custom',
20
            'functionCall' => [CustomFunction::class, 'fourthPower'],
21
            'argumentCount' => '1',
22
        ];
23
        self::assertTrue(Calculation::addFunction($key, $value));
24
        self::assertFalse(Calculation::addFunction('sqrt', $value));
25
        self::assertSame(16, $calculation->calculateFormula('=FOURTHPOWER(2)'));
26
        self::assertSame('#VALUE!', $calculation->calculateFormula('=FOURTHPOWER("X")'));
27
        self::assertSame('#NAME?', $calculation->calculateFormula('=FOURTHPOWE("X")'));
28
        self::assertFalse(Calculation::removeFunction('SQRT'));
29
        self::assertSame(2.0, $calculation->calculateFormula('=SQRT(4)'));
30
        self::assertFalse(Calculation::removeFunction('sqrt'));
31
        self::assertSame(4.0, $calculation->calculateFormula('=sqrt(16)'));
32
        self::assertTrue(Calculation::removeFunction($key));
33
        self::assertSame('#NAME?', $calculation->calculateFormula('=FOURTHPOWER(3)'));
34
        self::assertFalse(Calculation::removeFunction('WHATEVER'));
35
    }
36
}
37