BorderRangeTest.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Style;
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. use PhpOffice\PhpSpreadsheet\Style\Border;
  5. use PhpOffice\PhpSpreadsheet\Style\Color;
  6. use PHPUnit\Framework\TestCase;
  7. class BorderRangeTest extends TestCase
  8. {
  9. public function testBorderRangeInAction(): void
  10. {
  11. // testcase for the initial bug problem: setting border+color fails
  12. // set red borders aroundlA1:B3 square. Verify that the borders set are actually correct
  13. $spreadsheet = new Spreadsheet();
  14. $sheet = $spreadsheet->getActiveSheet();
  15. $argb = 'FFFF0000';
  16. $color = new Color($argb);
  17. $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
  18. $sheet->getStyle('A1:A3')->getBorders()->getLeft()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
  19. $sheet->getStyle('C1:C3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
  20. $sheet->getStyle('A3:C3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
  21. // upper row
  22. $expectations = [
  23. // cell => Left/Right/Top/Bottom
  24. 'A1' => 'LT',
  25. 'B1' => 'T',
  26. 'C1' => 'RT',
  27. 'A2' => 'L',
  28. 'B2' => '',
  29. 'C2' => 'R',
  30. 'A3' => 'LB',
  31. 'B3' => 'B',
  32. 'C3' => 'RB',
  33. ];
  34. $sides = [
  35. 'L' => 'Left',
  36. 'R' => 'Right',
  37. 'T' => 'Top',
  38. 'B' => 'Bottom',
  39. ];
  40. foreach ($expectations as $cell => $borders) {
  41. $bs = $sheet->getStyle($cell)->getBorders();
  42. foreach ($sides as $sidekey => $side) {
  43. $assertion = "setBorderStyle on a range of cells, $cell $side";
  44. $func = "get$side";
  45. $b = $bs->$func(); // boo
  46. if (strpos($borders, $sidekey) === false) {
  47. self::assertSame(Border::BORDER_NONE, $b->getBorderStyle(), $assertion);
  48. } else {
  49. self::assertSame(Border::BORDER_THIN, $b->getBorderStyle(), $assertion);
  50. self::assertSame($argb, $b->getColor()->getARGB(), $assertion);
  51. }
  52. }
  53. }
  54. }
  55. public function testBorderRangeDirectly(): void
  56. {
  57. // testcase for the underlying problem directly
  58. $spreadsheet = new Spreadsheet();
  59. $sheet = $spreadsheet->getActiveSheet();
  60. $style = $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN);
  61. self::assertSame('A1:C1', $style->getSelectedCells(), 'getSelectedCells should not change after a style operation on a border range');
  62. }
  63. }