mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-22 16:19:19 +00:00
2a0a53cd6a
Because they tend to clutter our code a lot and unfortunately, there are lots of false positives. Instead, it would probably be better to deal with false positives out of band, via the Scrutinizer web UI.
167 lines
5.2 KiB
PHP
167 lines
5.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Engineering;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Engineering\ConvertOctal;
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalculationException;
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheetTests\Calculation\Functions\FormulaArguments;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class Oct2BinTest extends TestCase
|
|
{
|
|
private string $compatibilityMode;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->compatibilityMode = Functions::getCompatibilityMode();
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
Functions::setCompatibilityMode($this->compatibilityMode);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerOCT2BIN
|
|
*/
|
|
public function testDirectCallToOCT2BIN(mixed $expectedResult, mixed ...$args): void
|
|
{
|
|
$result = ConvertOctal::toBinary(...$args);
|
|
self::assertSame($expectedResult, $result);
|
|
}
|
|
|
|
private function trimIfQuoted(string $value): string
|
|
{
|
|
return trim($value, '"');
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerOCT2BIN
|
|
*/
|
|
public function testOCT2BINAsFormula(mixed $expectedResult, mixed ...$args): void
|
|
{
|
|
$arguments = new FormulaArguments(...$args);
|
|
|
|
$calculation = Calculation::getInstance();
|
|
$formula = "=OCT2BIN({$arguments})";
|
|
|
|
$result = $calculation->_calculateFormulaValue($formula);
|
|
self::assertSame($expectedResult, $this->trimIfQuoted((string) $result));
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerOCT2BIN
|
|
*/
|
|
public function testOCT2BINInWorksheet(mixed $expectedResult, mixed ...$args): void
|
|
{
|
|
$arguments = new FormulaArguments(...$args);
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
$argumentCells = $arguments->populateWorksheet($worksheet);
|
|
$formula = "=OCT2BIN({$argumentCells})";
|
|
|
|
$result = $worksheet->setCellValue('A1', $formula)
|
|
->getCell('A1')
|
|
->getCalculatedValue();
|
|
self::assertSame($expectedResult, $result);
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public static function providerOCT2BIN(): array
|
|
{
|
|
return require 'tests/data/Calculation/Engineering/OCT2BIN.php';
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerUnhappyOCT2BIN
|
|
*/
|
|
public function testOCT2BINUnhappyPath(string $expectedException, mixed ...$args): void
|
|
{
|
|
$arguments = new FormulaArguments(...$args);
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
$argumentCells = $arguments->populateWorksheet($worksheet);
|
|
$formula = "=OCT2BIN({$argumentCells})";
|
|
|
|
$this->expectException(CalculationException::class);
|
|
$this->expectExceptionMessage($expectedException);
|
|
$worksheet->setCellValue('A1', $formula)
|
|
->getCell('A1')
|
|
->getCalculatedValue();
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public static function providerUnhappyOCT2BIN(): array
|
|
{
|
|
return [
|
|
['Formula Error: Wrong number of arguments for OCT2BIN() function'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerOCT2BINOds
|
|
*/
|
|
public function testOCT2BINOds(mixed $expectedResult, mixed ...$args): void
|
|
{
|
|
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
|
|
|
|
$result = ConvertOctal::toBinary(...$args);
|
|
self::assertSame($expectedResult, $result);
|
|
}
|
|
|
|
public static function providerOCT2BINOds(): array
|
|
{
|
|
return require 'tests/data/Calculation/Engineering/OCT2BINOpenOffice.php';
|
|
}
|
|
|
|
public function testOCT2BINFrac(): void
|
|
{
|
|
$calculation = Calculation::getInstance();
|
|
$formula = '=OCT2BIN(10.1)';
|
|
|
|
Functions::setCompatibilityMode(Functions::COMPATIBILITY_GNUMERIC);
|
|
$result = $calculation->_calculateFormulaValue($formula);
|
|
self::assertSame('1000', $this->trimIfQuoted((string) $result), 'Gnumeric');
|
|
|
|
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
|
|
$result = $calculation->_calculateFormulaValue($formula);
|
|
self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'OpenOffice');
|
|
|
|
Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL);
|
|
$result = $calculation->_calculateFormulaValue($formula);
|
|
self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel');
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerOct2BinArray
|
|
*/
|
|
public function testOct2BinArray(array $expectedResult, string $value): void
|
|
{
|
|
$calculation = Calculation::getInstance();
|
|
|
|
$formula = "=OCT2BIN({$value})";
|
|
$result = $calculation->_calculateFormulaValue($formula);
|
|
self::assertEquals($expectedResult, $result);
|
|
}
|
|
|
|
public static function providerOct2BinArray(): array
|
|
{
|
|
return [
|
|
'row/column vector' => [
|
|
[['100', '111', '111111', '10011001', '11001100', '101010101']],
|
|
'{"4", "7", "77", "231", "314", "525"}',
|
|
],
|
|
];
|
|
}
|
|
}
|