ConditionalFormattingExpressionTest.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xls;
  3. use PhpOffice\PhpSpreadsheet\Reader\Xls;
  4. use PhpOffice\PhpSpreadsheet\Style\Conditional;
  5. use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
  6. use PHPUnit\Framework\TestCase;
  7. class ConditionalFormattingExpressionTest extends TestCase
  8. {
  9. /**
  10. * @var Worksheet
  11. */
  12. protected $sheet;
  13. protected function setUp(): void
  14. {
  15. $filename = 'tests/data/Reader/XLS/CF_Expression_Comparisons.xls';
  16. $reader = new Xls();
  17. $spreadsheet = $reader->load($filename);
  18. $this->sheet = $spreadsheet->getActiveSheet();
  19. }
  20. /**
  21. * @dataProvider conditionalFormattingProvider
  22. */
  23. public function testReadConditionalFormatting(string $expectedRange, array $expectedRule): void
  24. {
  25. $hasConditionalStyles = $this->sheet->conditionalStylesExists($expectedRange);
  26. self::assertTrue($hasConditionalStyles);
  27. $conditionalStyles = $this->sheet->getConditionalStyles($expectedRange);
  28. foreach ($conditionalStyles as $index => $conditionalStyle) {
  29. self::assertSame($expectedRule[$index]['type'], $conditionalStyle->getConditionType());
  30. self::assertSame($expectedRule[$index]['operator'], $conditionalStyle->getOperatorType());
  31. self::assertSame($expectedRule[$index]['conditions'], $conditionalStyle->getConditions());
  32. }
  33. }
  34. public function conditionalFormattingProvider(): array
  35. {
  36. return [
  37. [
  38. 'A3:D8',
  39. [
  40. [
  41. 'type' => Conditional::CONDITION_EXPRESSION,
  42. 'operator' => Conditional::OPERATOR_NONE,
  43. 'conditions' => [
  44. '$C1="USA"',
  45. ],
  46. ],
  47. ],
  48. ],
  49. [
  50. 'A13:D18',
  51. [
  52. [
  53. 'type' => Conditional::CONDITION_EXPRESSION,
  54. 'operator' => Conditional::OPERATOR_NONE,
  55. 'conditions' => [
  56. 'AND($C1="USA",$D1="Q4")',
  57. ],
  58. ],
  59. ],
  60. ],
  61. ];
  62. }
  63. }