Failed Conditions
Push — master ( f65b0a...9a193f )
by
unknown
30s queued 21s
created

Oct2HexTest::testOCT2HEXAsFormula()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 10
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Engineering;
6
7
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
8
use PhpOffice\PhpSpreadsheet\Calculation\Engineering\ConvertOctal;
9
use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalculationException;
10
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
11
use PhpOffice\PhpSpreadsheetTests\Calculation\Functions\FormulaArguments;
12
use PHPUnit\Framework\Attributes\DataProvider;
13
14
class Oct2HexTest extends AllSetupTeardown
15
{
16
    #[DataProvider('providerOCT2HEX')]
17
    public function testDirectCallToOCT2HEX(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
18
    {
19
        $result = ($digits === null) ? ConvertOctal::toHex($value) : ConvertOctal::toHex($value, $digits);
20
        self::assertSame($expectedResult, $result);
21
    }
22
23
    #[DataProvider('providerOCT2HEX')]
24
    public function testOCT2HEXAsFormula(mixed $expectedResult, mixed ...$args): void
25
    {
26
        $arguments = new FormulaArguments(...$args);
27
28
        $calculation = Calculation::getInstance();
29
        $formula = "=OCT2HEX({$arguments})";
30
31
        $result = $calculation->calculateFormula($formula);
32
        self::assertSame($expectedResult, $result);
33
    }
34
35
    #[DataProvider('providerOCT2HEX')]
36
    public function testOCT2HEXInWorksheet(mixed $expectedResult, mixed ...$args): void
37
    {
38
        $arguments = new FormulaArguments(...$args);
39
40
        $worksheet = $this->getSheet();
41
        $argumentCells = $arguments->populateWorksheet($worksheet);
42
        $formula = "=OCT2HEX({$argumentCells})";
43
44
        $result = $worksheet->setCellValue('A1', $formula)
45
            ->getCell('A1')
46
            ->getCalculatedValue();
47
        self::assertSame($expectedResult, $result);
48
    }
49
50
    public static function providerOCT2HEX(): array
51
    {
52
        return require 'tests/data/Calculation/Engineering/OCT2HEX.php';
53
    }
54
55
    #[DataProvider('providerUnhappyOCT2HEX')]
56
    public function testOCT2HEXUnhappyPath(string $expectedException, mixed ...$args): void
57
    {
58
        $arguments = new FormulaArguments(...$args);
59
60
        $worksheet = $this->getSheet();
61
        $argumentCells = $arguments->populateWorksheet($worksheet);
62
        $formula = "=OCT2HEX({$argumentCells})";
63
64
        $this->expectException(CalculationException::class);
65
        $this->expectExceptionMessage($expectedException);
66
        $worksheet->setCellValue('A1', $formula)
67
            ->getCell('A1')
68
            ->getCalculatedValue();
69
    }
70
71
    public static function providerUnhappyOCT2HEX(): array
72
    {
73
        return [
74
            ['Formula Error: Wrong number of arguments for OCT2HEX() function'],
75
        ];
76
    }
77
78
    #[DataProvider('providerOCT2HEXOds')]
79
    public function testOCT2HEXOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
80
    {
81
        $this->setOpenOffice();
82
83
        $result = ($digits === null) ? ConvertOctal::toHex($value) : ConvertOctal::toHex($value, $digits);
84
        self::assertSame($expectedResult, $result);
85
    }
86
87
    public static function providerOCT2HEXOds(): array
88
    {
89
        return require 'tests/data/Calculation/Engineering/OCT2HEXOpenOffice.php';
90
    }
91
92
    public function testOCT2HEXFrac(): void
93
    {
94
        $calculation = Calculation::getInstance();
95
        $formula = '=OCT2HEX(20.1)';
96
97
        $this->setGnumeric();
98
        $result = $calculation->calculateFormula($formula);
99
        self::assertSame('10', $result, 'Gnumeric');
100
101
        $this->setOpenOffice();
102
        $result = $calculation->calculateFormula($formula);
103
        self::assertSame(ExcelError::NAN(), $result, 'OpenOffice');
104
105
        $this->setExcel();
106
        $result = $calculation->calculateFormula($formula);
107
        self::assertSame(ExcelError::NAN(), $result, 'Excel');
108
    }
109
110
    /** @param mixed[] $expectedResult */
111
    #[DataProvider('providerOct2HexArray')]
112
    public function testOct2HexArray(array $expectedResult, string $value): void
113
    {
114
        $calculation = Calculation::getInstance();
115
116
        $formula = "=OCT2HEX({$value})";
117
        $result = $calculation->calculateFormula($formula);
118
        self::assertEquals($expectedResult, $result);
119
    }
120
121
    public static function providerOct2HexArray(): array
122
    {
123
        return [
124
            'row/column vector' => [
125
                [['4', '7', '3F', '99', 'CC', '155']],
126
                '{"4", "7", "77", "231", "314", "525"}',
127
            ],
128
        ];
129
    }
130
}
131