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

Oct2BinTest::testOCT2BINFrac()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 16
rs 9.9
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\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 Oct2BinTest extends AllSetupTeardown
15
{
16
    #[DataProvider('providerOCT2BIN')]
17
    public function testDirectCallToOCT2BIN(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
18
    {
19
        $result = ($digits === null) ? ConvertOctal::toBinary($value) : ConvertOctal::toBinary($value, $digits);
20
        self::assertSame($expectedResult, $result);
21
    }
22
23
    #[DataProvider('providerOCT2BIN')]
24
    public function testOCT2BINAsFormula(mixed $expectedResult, mixed ...$args): void
25
    {
26
        $arguments = new FormulaArguments(...$args);
27
28
        $calculation = Calculation::getInstance();
29
        $formula = "=OCT2BIN({$arguments})";
30
31
        $result = $calculation->calculateFormula($formula);
32
        self::assertSame($expectedResult, $result);
33
    }
34
35
    #[DataProvider('providerOCT2BIN')]
36
    public function testOCT2BINInWorksheet(mixed $expectedResult, mixed ...$args): void
37
    {
38
        $arguments = new FormulaArguments(...$args);
39
40
        $worksheet = $this->getSheet();
41
        $argumentCells = $arguments->populateWorksheet($worksheet);
42
        $formula = "=OCT2BIN({$argumentCells})";
43
44
        $result = $worksheet->setCellValue('A1', $formula)
45
            ->getCell('A1')
46
            ->getCalculatedValue();
47
        self::assertSame($expectedResult, $result);
48
    }
49
50
    public static function providerOCT2BIN(): array
51
    {
52
        return require 'tests/data/Calculation/Engineering/OCT2BIN.php';
53
    }
54
55
    #[DataProvider('providerUnhappyOCT2BIN')]
56
    public function testOCT2BINUnhappyPath(string $expectedException, mixed ...$args): void
57
    {
58
        $arguments = new FormulaArguments(...$args);
59
60
        $worksheet = $this->getSheet();
61
        $argumentCells = $arguments->populateWorksheet($worksheet);
62
        $formula = "=OCT2BIN({$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 providerUnhappyOCT2BIN(): array
72
    {
73
        return [
74
            ['Formula Error: Wrong number of arguments for OCT2BIN() function'],
75
        ];
76
    }
77
78
    #[DataProvider('providerOCT2BINOds')]
79
    public function testOCT2BINOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
80
    {
81
        $this->setOpenOffice();
82
83
        $result = ($digits === null) ? ConvertOctal::toBinary($value) : ConvertOctal::toBinary($value, $digits);
84
        self::assertSame($expectedResult, $result);
85
    }
86
87
    public static function providerOCT2BINOds(): array
88
    {
89
        return require 'tests/data/Calculation/Engineering/OCT2BINOpenOffice.php';
90
    }
91
92
    public function testOCT2BINFrac(): void
93
    {
94
        $calculation = Calculation::getInstance();
95
        $formula = '=OCT2BIN(10.1)';
96
97
        $this->setGnumeric();
98
        $result = $calculation->calculateFormula($formula);
99
        self::assertSame('1000', $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('providerOct2BinArray')]
112
    public function testOct2BinArray(array $expectedResult, string $value): void
113
    {
114
        $calculation = Calculation::getInstance();
115
116
        $formula = "=OCT2BIN({$value})";
117
        $result = $calculation->calculateFormula($formula);
118
        self::assertEquals($expectedResult, $result);
119
    }
120
121
    public static function providerOct2BinArray(): array
122
    {
123
        return [
124
            'row/column vector' => [
125
                [['100', '111', '111111', '10011001', '11001100', '101010101']],
126
                '{"4", "7", "77", "231", "314", "525"}',
127
            ],
128
        ];
129
    }
130
}
131