Failed Conditions
Pull Request — master (#4571)
by Owen
15:04
created

Hex2BinTest   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 13
eloc 57
dl 0
loc 112
rs 10
c 0
b 0
f 0

11 Methods

Rating   Name   Duplication   Size   Complexity  
A testHEX2BINOds() 0 7 2
A testHEX2BINAsFormula() 0 10 1
A testHex2BinArray() 0 8 1
A testHEX2BINInWorksheet() 0 13 1
A providerUnhappyHEX2BIN() 0 4 1
A testHEX2BINUnhappyPath() 0 14 1
A providerHEX2BIN() 0 3 1
A testHEX2BINFrac() 0 16 1
A providerHEX2BINOds() 0 3 1
A providerHex2BinArray() 0 6 1
A testDirectCallToHEX2BIN() 0 5 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\ConvertHex;
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 Hex2BinTest extends AllSetupTeardown
15
{
16
    #[DataProvider('providerHEX2BIN')]
17
    public function testDirectCallToHEX2BIN(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
18
    {
19
        $result = ($digits === null) ? ConvertHex::toBinary($value) : ConvertHex::toBinary($value, $digits);
20
        self::assertSame($expectedResult, $result);
21
    }
22
23
    #[DataProvider('providerHEX2BIN')]
24
    public function testHEX2BINAsFormula(mixed $expectedResult, mixed ...$args): void
25
    {
26
        $arguments = new FormulaArguments(...$args);
27
28
        $calculation = Calculation::getInstance();
29
        $formula = "=HEX2BIN({$arguments})";
30
31
        $result = $calculation->calculateFormula($formula);
32
        self::assertSame($expectedResult, $result);
33
    }
34
35
    #[DataProvider('providerHEX2BIN')]
36
    public function testHEX2BINInWorksheet(mixed $expectedResult, mixed ...$args): void
37
    {
38
        $arguments = new FormulaArguments(...$args);
39
40
        $worksheet = $this->getSheet();
41
        $argumentCells = $arguments->populateWorksheet($worksheet);
42
        $formula = "=HEX2BIN({$argumentCells})";
43
44
        $result = $worksheet->setCellValue('A1', $formula)
45
            ->getCell('A1')
46
            ->getCalculatedValue();
47
        self::assertSame($expectedResult, $result);
48
    }
49
50
    public static function providerHEX2BIN(): array
51
    {
52
        return require 'tests/data/Calculation/Engineering/HEX2BIN.php';
53
    }
54
55
    #[DataProvider('providerUnhappyHEX2BIN')]
56
    public function testHEX2BINUnhappyPath(string $expectedException, mixed ...$args): void
57
    {
58
        $arguments = new FormulaArguments(...$args);
59
60
        $worksheet = $this->getSheet();
61
        $argumentCells = $arguments->populateWorksheet($worksheet);
62
        $formula = "=HEX2BIN({$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 providerUnhappyHEX2BIN(): array
72
    {
73
        return [
74
            ['Formula Error: Wrong number of arguments for HEX2BIN() function'],
75
        ];
76
    }
77
78
    #[DataProvider('providerHEX2BINOds')]
79
    public function testHEX2BINOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void
80
    {
81
        $this->setOpenOffice();
82
83
        $result = ($digits === null) ? ConvertHex::toBinary($value) : ConvertHex::toBinary($value, $digits);
84
        self::assertSame($expectedResult, $result);
85
    }
86
87
    public static function providerHEX2BINOds(): array
88
    {
89
        return require 'tests/data/Calculation/Engineering/HEX2BINOpenOffice.php';
90
    }
91
92
    public function testHEX2BINFrac(): void
93
    {
94
        $calculation = Calculation::getInstance();
95
        $formula = '=HEX2BIN(10.1)';
96
97
        $this->setGnumeric();
98
        $result = $calculation->calculateFormula($formula);
99
        self::assertSame('10000', $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
    #[DataProvider('providerHex2BinArray')]
111
    public function testHex2BinArray(array $expectedResult, string $value): void
112
    {
113
        $calculation = Calculation::getInstance();
114
115
        $formula = "=HEX2BIN({$value})";
116
        $result = $calculation->calculateFormula($formula);
117
        self::assertEquals($expectedResult, $result);
118
    }
119
120
    public static function providerHex2BinArray(): array
121
    {
122
        return [
123
            'row/column vector' => [
124
                [['100', '111', '111111', '10011001', '11001100', '101010101']],
125
                '{"4", "7", "3F", "99", "CC", "155"}',
126
            ],
127
        ];
128
    }
129
}
130