Files
Adrien Crivelli ec4098c8fd Strict mode for all tests
While we might never be able to have 100% of our code strict, we can at
the very least do it for all of our tests. This ensures that our tests
are using our API with the types as intended by the test author, and not
silently be cast to what our API requires.
2023-09-07 17:44:56 +08:00

110 lines
4.4 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Functional;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
use PhpOffice\PhpSpreadsheet\Style\Fill;
class ConditionalTextTest extends AbstractFunctional
{
const COLOR_GREEN = 'FF99FF66';
const COLOR_RED = 'FFFF5050';
const COLOR_BLUE = 'FF5050FF';
const COLOR_YELLOW = 'FFFFFF50';
public function testConditionalText(): void
{
$format = 'Xlsx';
$spreadsheet = new Spreadsheet();
$conditionalStyles = [];
// if text contains 'anywhere' - red background
$condition0 = new Conditional();
$condition0->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
$condition0->setOperatorType(Conditional::CONDITION_CONTAINSTEXT);
$condition0->setText('anywhere');
$condition0->getStyle()->getFill()
->setFillType(Fill::FILL_SOLID)
->getEndColor()->setARGB(self::COLOR_RED);
array_push($conditionalStyles, $condition0);
// if text contains 'Left' on left - green background
$condition1 = new Conditional();
$condition1->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
$condition1->setOperatorType(Conditional::OPERATOR_BEGINSWITH);
$condition1->setText('Left');
$condition1->getStyle()->getFill()
->setFillType(Fill::FILL_SOLID)
->getEndColor()->setARGB(self::COLOR_GREEN);
array_push($conditionalStyles, $condition1);
// if text contains 'right' on right - blue background
$condition2 = new Conditional();
$condition2->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
$condition2->setOperatorType(Conditional::OPERATOR_ENDSWITH);
$condition2->setText('right');
$condition2->getStyle()->getFill()
->setFillType(Fill::FILL_SOLID)
->getEndColor()->setARGB(self::COLOR_BLUE);
array_push($conditionalStyles, $condition2);
// if text contains no spaces - yellow background
$condition3 = new Conditional();
$condition3->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
$condition3->setOperatorType(Conditional::OPERATOR_NOTCONTAINS);
$condition3->setText(' ');
$condition3->getStyle()->getFill()
->setFillType(Fill::FILL_SOLID)
->getEndColor()->setARGB(self::COLOR_YELLOW);
array_push($conditionalStyles, $condition3);
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('B1', 'This should match anywhere, right?');
$sheet->setCellValue('B2', 'This should match nowhere, right?');
$sheet->setCellValue('B3', 'Left match');
$sheet->setCellValue('B4', 'Match on right');
$sheet->setCellValue('B5', 'nospaces');
$xpCoordinate = 'B1:B5';
$spreadsheet->getActiveSheet()->setConditionalStyles($xpCoordinate, $conditionalStyles);
$sheet->getColumnDimension('B')->setAutoSize(true);
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
// see if we successfully written conditional text elements
$newConditionalStyles = $reloadedSpreadsheet->getActiveSheet()->getConditionalStyles($xpCoordinate);
$cnt = count($conditionalStyles);
for ($i = 0; $i < $cnt; ++$i) {
self::assertEquals(
$conditionalStyles[$i]->getConditionType(),
$newConditionalStyles[$i]->getConditionType(),
"Failure on condition type $i"
);
self::assertEquals(
$conditionalStyles[$i]->getOperatorType(),
$newConditionalStyles[$i]->getOperatorType(),
"Failure on operator type $i"
);
self::assertEquals(
$conditionalStyles[$i]->getText(),
$newConditionalStyles[$i]->getText(),
"Failure on text $i"
);
$filCond = $conditionalStyles[$i]->getStyle()->getFill();
$newCond = $newConditionalStyles[$i]->getStyle()->getFill();
self::assertEquals(
$filCond->getFillType(),
$newCond->getFillType(),
"Failure on fill type $i"
);
self::assertEquals(
$filCond->getEndColor()->getARGB(),
$newCond->getEndColor()->getARGB(),
"Failure on end color $i"
);
}
}
}