Files
PhpSpreadsheet/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalFormattingDataBarXlsxTest.php
oleibman 68158c8120 Phpstan Differences from Php7 to Php8, Again (#2665)
These changes have already been implemented twice, and been regressed twice. I'll try once more (with a different approach), then give up ...

As configured, Phpstan running under Php7 reports no errors. However, running under Php8, it reports 100 (!) errors. The vast majority of these are due to two reasons:
- renaming parameters in Php builtin functions in preparation for named parameters.
- using the new class GdImage rather than type resource as the argument type for many image-based functions.

Regardless of the cause, this will be a problem sooner or later. This PR is an attempt to get ahead of that problem. For source members, it mostly adds annotations or updates doc-blocks. Only 2 members have changes to executable code, and these are very minor - BitWise and Writer/Xlsx. For test members, all baseline errors are deleted and the code is fixed. Php7 and Php8 both report no errors with this configuration.
2022-03-11 23:28:30 -08:00

333 lines
16 KiB
PHP

<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalDataBar;
use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalFormatValueObject;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PHPUnit\Framework\TestCase;
class ConditionalFormattingDataBarXlsxTest extends TestCase
{
public function testLoadXlsxConditionalFormattingDataBar(): void
{
// Make sure Conditionals are read correctly from existing file
$filename = 'tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx';
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($filename);
$worksheet = $spreadsheet->getActiveSheet();
$this->pattern1Assertion($worksheet);
$this->pattern2Assertion($worksheet);
$this->pattern3Assertion($worksheet);
$this->pattern4Assertion($worksheet);
}
public function testReloadXlsxConditionalFormattingDataBar(): void
{
// Make sure conditionals from existing file are maintained across save
$filename = 'tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx';
$outfile = File::temporaryFilename();
$reader = IOFactory::createReader('Xlsx');
$spreadshee1 = $reader->load($filename);
$writer = IOFactory::createWriter($spreadshee1, 'Xlsx');
$writer->save($outfile);
$spreadsheet = $reader->load($outfile);
unlink($outfile);
$worksheet = $spreadsheet->getActiveSheet();
$this->pattern1Assertion($worksheet);
$this->pattern2Assertion($worksheet);
$this->pattern3Assertion($worksheet);
$this->pattern4Assertion($worksheet);
}
public function testNewXlsxConditionalFormattingDataBar(): void
{
// Make sure blanks/non-blanks added by PhpSpreadsheet are handled correctly
$outfile = File::temporaryFilename();
$spreadshee1 = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadshee1->getActiveSheet();
$sheet->setCellValue('A1', 1);
$sheet->setCellValue('A2', 2);
$sheet->setCellValue('A3', 3);
$sheet->setCellValue('A4', 4);
$sheet->setCellValue('A5', 5);
$cond1 = new Conditional();
$cond1->setConditionType(Conditional::CONDITION_DATABAR);
$cond1->setDataBar(new ConditionalDataBar());
$dataBar = $cond1->getDataBar();
self::assertNotNull($dataBar);
$dataBar
->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject('min'))
->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject('max'))
->setColor(Color::COLOR_GREEN);
$cond = [$cond1];
$sheet->getStyle('A1:A5')->setConditionalStyles($cond);
$writer = IOFactory::createWriter($spreadshee1, 'Xlsx');
$writer->save($outfile);
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($outfile);
unlink($outfile);
$worksheet = $spreadsheet->getActiveSheet();
$conditionalStyle = $worksheet->getConditionalStyles('A1:A5');
self::assertNotEmpty($conditionalStyle);
/** @var Conditional $conditionalRule */
$conditionalRule = $conditionalStyle[0];
$conditions = $conditionalRule->getConditions();
self::assertNotEmpty($conditions);
self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType());
self::assertNotEmpty($conditionalRule->getDataBar());
$dataBar = $conditionalRule->getDataBar();
self::assertNotNull($dataBar);
self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals(Color::COLOR_GREEN, $dataBar->getColor());
}
private function pattern1Assertion(Worksheet $worksheet): void
{
self::assertEquals(
"Type: Automatic, Automatic\nDirection: Automatic\nFills: Gradient\nAxis Position: Automatic",
$worksheet->getCell('A2')->getValue()
);
$conditionalStyle = $worksheet->getConditionalStyles('A3:A23');
self::assertNotEmpty($conditionalStyle);
/** @var Conditional $conditionalRule */
$conditionalRule = $conditionalStyle[0];
$dataBar = $conditionalRule->getDataBar();
self::assertNotEmpty($dataBar);
self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType());
self::assertNotNull($dataBar);
self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals('FF638EC6', $dataBar->getColor());
self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt());
//ext
$rule1ext = $dataBar->getConditionalFormattingRuleExt();
self::assertEquals('{72C64AE0-5CD9-164F-83D1-AB720F263E79}', $rule1ext->getId());
self::assertEquals('dataBar', $rule1ext->getCfRule());
self::assertEquals('A3:A23', $rule1ext->getSqref());
$extDataBar = $rule1ext->getDataBarExt();
self::assertNotEmpty($extDataBar);
$pattern1 = [
'minLength' => 0,
'maxLength' => 100,
'border' => true,
'gradient' => null,
'direction' => null,
'axisPosition' => null,
'negativeBarBorderColorSameAsPositive' => false,
'borderColor' => 'FF638EC6',
'negativeFillColor' => 'FFFF0000',
'negativeBorderColor' => 'FFFF0000',
];
foreach ($pattern1 as $key => $value) {
$funcName = 'get' . ucwords($key);
self::assertEquals($value, $extDataBar->$funcName(), __METHOD__ . '::' . $funcName . ' function patten');
}
self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('autoMin', $extDataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('autoMax', $extDataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertArrayHasKey('rgb', $extDataBar->getAxisColor());
self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']);
}
private function pattern2Assertion(Worksheet $worksheet): void
{
self::assertEquals(
"Type: Number, Number\nValue: -5, 5\nDirection: Automatic\nFills: Solid\nAxis Position: Automatic",
$worksheet->getCell('B2')->getValue()
);
$conditionalStyle = $worksheet->getConditionalStyles('B3:B23');
self::assertNotEmpty($conditionalStyle);
/** @var Conditional $conditionalRule */
$conditionalRule = $conditionalStyle[0];
$dataBar = $conditionalRule->getDataBar();
self::assertNotEmpty($dataBar);
self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType());
self::assertNotNull($dataBar);
self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('num', $dataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('num', $dataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals('-5', $dataBar->getMinimumConditionalFormatValueObject()->getValue());
self::assertEquals('5', $dataBar->getMaximumConditionalFormatValueObject()->getValue());
self::assertEquals('FF63C384', $dataBar->getColor());
self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt());
//ext
$rule1ext = $dataBar->getConditionalFormattingRuleExt();
self::assertEquals('{98904F60-57F0-DF47-B480-691B20D325E3}', $rule1ext->getId());
self::assertEquals('dataBar', $rule1ext->getCfRule());
self::assertEquals('B3:B23', $rule1ext->getSqref());
$extDataBar = $rule1ext->getDataBarExt();
self::assertNotEmpty($extDataBar);
$pattern1 = [
'minLength' => 0,
'maxLength' => 100,
'border' => null,
'gradient' => false,
'direction' => null,
'axisPosition' => null,
'negativeBarBorderColorSameAsPositive' => null,
'borderColor' => null,
'negativeFillColor' => 'FFFF0000',
'negativeBorderColor' => null,
];
foreach ($pattern1 as $key => $value) {
$funcName = 'get' . ucwords($key);
self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten');
}
self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('num', $extDataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('num', $extDataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals('-5', $extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula());
self::assertEquals('5', $extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula());
self::assertArrayHasKey('rgb', $extDataBar->getAxisColor());
self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']);
}
private function pattern3Assertion(Worksheet $worksheet): void
{
self::assertEquals(
"Type: Automatic, Automatic\nDirection: rightToLeft\nFills: Solid\nAxis Position: None",
$worksheet->getCell('C2')->getValue()
);
$conditionalStyle = $worksheet->getConditionalStyles('C3:C23');
self::assertNotEmpty($conditionalStyle);
/** @var Conditional $conditionalRule */
$conditionalRule = $conditionalStyle[0];
$dataBar = $conditionalRule->getDataBar();
self::assertNotEmpty($dataBar);
self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType());
self::assertNotNull($dataBar);
self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEmpty($dataBar->getMinimumConditionalFormatValueObject()->getValue());
self::assertEmpty($dataBar->getMaximumConditionalFormatValueObject()->getValue());
self::assertEquals('FFFF555A', $dataBar->getColor());
self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt());
//ext
$rule1ext = $dataBar->getConditionalFormattingRuleExt();
self::assertEquals('{453C04BA-7ABD-8548-8A17-D9CFD2BDABE9}', $rule1ext->getId());
self::assertEquals('dataBar', $rule1ext->getCfRule());
self::assertEquals('C3:C23', $rule1ext->getSqref());
$extDataBar = $rule1ext->getDataBarExt();
self::assertNotEmpty($extDataBar);
$pattern1 = [
'minLength' => 0,
'maxLength' => 100,
'border' => null,
'gradient' => false,
'direction' => 'rightToLeft',
'axisPosition' => 'none',
'negativeBarBorderColorSameAsPositive' => null,
'borderColor' => null,
'negativeFillColor' => 'FFFF0000',
'negativeBorderColor' => null,
];
foreach ($pattern1 as $key => $value) {
$funcName = 'get' . ucwords($key);
self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten');
}
self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('autoMin', $extDataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('autoMax', $extDataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEmpty($extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula());
self::assertEmpty($extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula());
self::assertArrayHasKey('rgb', $extDataBar->getAxisColor());
self::assertEmpty($extDataBar->getAxisColor()['rgb']);
}
private function pattern4Assertion(Worksheet $worksheet): void
{
self::assertEquals(
"type: formula, formula\nValue: =2+3, =10+10\nDirection: leftToRight\nShowDataBarOnly\nFills: Solid\nBorder: Solid\nAxis Position: Midpoint",
$worksheet->getCell('D2')->getValue()
);
$conditionalStyle = $worksheet->getConditionalStyles('D3:D23');
self::assertNotEmpty($conditionalStyle);
/** @var Conditional $conditionalRule */
$conditionalRule = $conditionalStyle[0];
$dataBar = $conditionalRule->getDataBar();
self::assertNotEmpty($dataBar);
self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType());
self::assertNotNull($dataBar);
self::assertTrue($dataBar->getShowValue());
self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject());
self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject());
self::assertEquals('formula', $dataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('formula', $dataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals('3+2', $dataBar->getMinimumConditionalFormatValueObject()->getValue());
self::assertEquals('10+10', $dataBar->getMaximumConditionalFormatValueObject()->getValue());
self::assertEquals('FFFF555A', $dataBar->getColor());
self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt());
//ext
$rule1ext = $dataBar->getConditionalFormattingRuleExt();
self::assertEquals('{6C1E066A-E240-3D4A-98F8-8CC218B0DFD2}', $rule1ext->getId());
self::assertEquals('dataBar', $rule1ext->getCfRule());
self::assertEquals('D3:D23', $rule1ext->getSqref());
$extDataBar = $rule1ext->getDataBarExt();
self::assertNotEmpty($extDataBar);
$pattern1 = [
'minLength' => 0,
'maxLength' => 100,
'border' => true,
'gradient' => false,
'direction' => 'leftToRight',
'axisPosition' => 'middle',
'negativeBarBorderColorSameAsPositive' => null,
'borderColor' => 'FF000000',
'negativeFillColor' => 'FFFF0000',
'negativeBorderColor' => null,
];
foreach ($pattern1 as $key => $value) {
$funcName = 'get' . ucwords($key);
self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten');
}
self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject());
self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject());
self::assertEquals('formula', $extDataBar->getMinimumConditionalFormatValueObject()->getType());
self::assertEquals('formula', $extDataBar->getMaximumConditionalFormatValueObject()->getType());
self::assertEquals('3+2', $extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula());
self::assertEquals('10+10', $extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula());
self::assertArrayHasKey('rgb', $extDataBar->getAxisColor());
self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']);
}
}