HtmlBorderTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Html;
  3. use PhpOffice\PhpSpreadsheet\Reader\Html;
  4. use PhpOffice\PhpSpreadsheet\Style\Border;
  5. use PHPUnit\Framework\TestCase;
  6. class HtmlBorderTest extends TestCase
  7. {
  8. public function testCanApplyInlineBordersStyles(): void
  9. {
  10. $html = '<table>
  11. <tr>
  12. <td style="border: 1px solid #333333;">Thin border</td>
  13. <td style="border-bottom: 1px dashed #333333;">Border bottom</td>
  14. <td style="border-top: 1px solid #333333;">Border top</td>
  15. <td style="border-left: 1px solid green;">Border left</td>
  16. <td style="border-right: 1px solid #333333;">Border right</td>
  17. <td style="border: none"></td>
  18. <td style="border: dashed;"></td>
  19. <td style="border: dotted #333333;"></td>
  20. </tr>
  21. </table>';
  22. $filename = HtmlHelper::createHtml($html);
  23. $spreadsheet = HtmlHelper::loadHtmlIntoSpreadsheet($filename, true);
  24. $firstSheet = $spreadsheet->getSheet(0);
  25. $style = $firstSheet->getCell('A1')->getStyle();
  26. $borders = $style->getBorders();
  27. /** @var Border $border */
  28. foreach ([$borders->getTop(), $borders->getBottom(), $borders->getLeft(), $borders->getRight()] as $border) {
  29. self::assertEquals('333333', $border->getColor()->getRGB());
  30. self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
  31. }
  32. $style = $firstSheet->getCell('B1')->getStyle();
  33. $border = $style->getBorders()->getBottom();
  34. self::assertEquals('333333', $border->getColor()->getRGB());
  35. self::assertEquals(Border::BORDER_DASHED, $border->getBorderStyle());
  36. self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getTop()->getBorderStyle());
  37. $style = $firstSheet->getCell('C1')->getStyle();
  38. $border = $style->getBorders()->getTop();
  39. self::assertEquals('333333', $border->getColor()->getRGB());
  40. self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
  41. self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
  42. $style = $firstSheet->getCell('D1')->getStyle();
  43. $border = $style->getBorders()->getLeft();
  44. self::assertEquals('00ff00', $border->getColor()->getRGB());
  45. self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
  46. self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
  47. $style = $firstSheet->getCell('E1')->getStyle();
  48. $border = $style->getBorders()->getRight();
  49. self::assertEquals('333333', $border->getColor()->getRGB());
  50. self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
  51. self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
  52. $style = $firstSheet->getCell('F1')->getStyle();
  53. $borders = $style->getBorders();
  54. foreach ([$borders->getTop(), $borders->getBottom(), $borders->getLeft(), $borders->getRight()] as $border) {
  55. self::assertEquals(Border::BORDER_NONE, $border->getBorderStyle());
  56. }
  57. $style = $firstSheet->getCell('G1')->getStyle();
  58. $borders = $style->getBorders();
  59. $border = $borders->getRight();
  60. self::assertEquals(Border::BORDER_DASHED, $border->getBorderStyle());
  61. $style = $firstSheet->getCell('H1')->getStyle();
  62. $borders = $style->getBorders();
  63. $border = $borders->getRight();
  64. self::assertEquals(Border::BORDER_DOTTED, $border->getBorderStyle());
  65. self::assertEquals('333333', $border->getColor()->getRGB());
  66. }
  67. /**
  68. * @dataProvider providerBorderStyle
  69. */
  70. public function testBorderStyle(string $style, string $expectedResult): void
  71. {
  72. $borders = Html::getBorderMappings();
  73. self::assertEquals($expectedResult, $borders[$style]);
  74. }
  75. public function testBorderStyleCoverage(): void
  76. {
  77. $expected = Html::getBorderMappings();
  78. $covered = [];
  79. foreach ($expected as $key => $val) {
  80. $covered[$key] = 0;
  81. }
  82. $tests = $this->providerBorderStyle();
  83. foreach ($tests as $test) {
  84. $covered[$test[0]] = 1;
  85. }
  86. foreach ($covered as $key => $val) {
  87. self::assertEquals(1, $val, "Borderstyle $key not tested");
  88. }
  89. }
  90. public function providerBorderStyle(): array
  91. {
  92. return [
  93. ['dash-dot', Border::BORDER_DASHDOT],
  94. ['dash-dot-dot', Border::BORDER_DASHDOTDOT],
  95. ['dashed', Border::BORDER_DASHED],
  96. ['dotted', Border::BORDER_DOTTED],
  97. ['double', Border::BORDER_DOUBLE],
  98. ['hair', Border::BORDER_HAIR],
  99. ['medium', Border::BORDER_MEDIUM],
  100. ['medium-dashed', Border::BORDER_MEDIUMDASHED],
  101. ['medium-dash-dot', Border::BORDER_MEDIUMDASHDOT],
  102. ['medium-dash-dot-dot', Border::BORDER_MEDIUMDASHDOTDOT],
  103. ['none', Border::BORDER_NONE],
  104. ['slant-dash-dot', Border::BORDER_SLANTDASHDOT],
  105. ['solid', Border::BORDER_THIN],
  106. ['thick', Border::BORDER_THICK],
  107. ];
  108. }
  109. }