BorderTest.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Style;
  3. use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. use PhpOffice\PhpSpreadsheet\Style\Borders;
  7. use PhpOffice\PhpSpreadsheet\Style\Color;
  8. use PHPUnit\Framework\TestCase;
  9. class BorderTest extends TestCase
  10. {
  11. public function testAllBorders(): void
  12. {
  13. $spreadsheet = new Spreadsheet();
  14. $borders = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders();
  15. $allBorders = $borders->getAllBorders();
  16. $bottom = $borders->getBottom();
  17. $actual = $bottom->getBorderStyle();
  18. self::assertSame(Border::BORDER_NONE, $actual, 'should default to none');
  19. $allBorders->setBorderStyle(Border::BORDER_THIN);
  20. $actual = $bottom->getBorderStyle();
  21. self::assertSame(Border::BORDER_THIN, $actual, 'should have been set via allBorders');
  22. self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
  23. self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
  24. self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
  25. self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
  26. }
  27. public function testAllBordersArray(): void
  28. {
  29. $spreadsheet = new Spreadsheet();
  30. $sheet = $spreadsheet->getActiveSheet();
  31. $sheet->getStyle('A1')->getBorders()->applyFromArray(['allBorders' => ['borderStyle' => Border::BORDER_THIN]]);
  32. $borders = $sheet->getCell('A1')->getStyle()->getBorders();
  33. self::assertSame(Border::BORDER_THIN, $borders->getBottom()->getBorderStyle());
  34. self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
  35. self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
  36. self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
  37. self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
  38. }
  39. public function testAllBordersArrayNotSupervisor(): void
  40. {
  41. $borders = new Borders();
  42. $borders->applyFromArray(['allBorders' => ['borderStyle' => Border::BORDER_THIN]]);
  43. self::assertSame(Border::BORDER_THIN, $borders->getBottom()->getBorderStyle());
  44. self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
  45. self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
  46. self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
  47. self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
  48. }
  49. public function testOutline(): void
  50. {
  51. $spreadsheet = new Spreadsheet();
  52. $sheet = $spreadsheet->getActiveSheet();
  53. $borders = $sheet->getStyle('A1:B2')->getBorders();
  54. $outline = $borders->getOutline();
  55. $outline->setBorderStyle(Border::BORDER_THIN);
  56. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  57. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  58. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  59. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  60. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  61. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  62. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  63. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  64. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  65. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  66. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  67. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  68. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  69. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  70. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  71. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  72. }
  73. public function testInside(): void
  74. {
  75. $spreadsheet = new Spreadsheet();
  76. $sheet = $spreadsheet->getActiveSheet();
  77. $borders = $sheet->getStyle('A1:B2')->getBorders();
  78. $inside = $borders->getInside();
  79. $inside->setBorderStyle(Border::BORDER_THIN);
  80. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  81. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  82. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  83. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  84. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  85. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  86. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  87. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  88. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  89. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  90. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  91. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  92. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  93. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  94. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  95. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  96. }
  97. public function testHorizontal(): void
  98. {
  99. $spreadsheet = new Spreadsheet();
  100. $sheet = $spreadsheet->getActiveSheet();
  101. $borders = $sheet->getStyle('A1:B2')->getBorders();
  102. $horizontal = $borders->getHorizontal();
  103. $horizontal->setBorderStyle(Border::BORDER_THIN);
  104. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  105. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  106. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  107. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  108. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  109. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  110. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  111. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  112. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  113. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  114. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  115. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  116. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  117. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  118. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  119. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  120. }
  121. public function testVertical(): void
  122. {
  123. $spreadsheet = new Spreadsheet();
  124. $sheet = $spreadsheet->getActiveSheet();
  125. $borders = $sheet->getStyle('A1:B2')->getBorders();
  126. $vertical = $borders->getVertical();
  127. $vertical->setBorderStyle(Border::BORDER_THIN);
  128. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  129. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  130. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  131. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  132. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  133. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  134. self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  135. self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  136. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
  137. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
  138. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  139. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  140. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
  141. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  142. self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  143. self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
  144. }
  145. public function testNoSupervisorAllBorders(): void
  146. {
  147. $this->expectException(PhpSpreadsheetException::class);
  148. $borders = new Borders();
  149. $borders->getAllBorders();
  150. }
  151. public function testNoSupervisorOutline(): void
  152. {
  153. $this->expectException(PhpSpreadsheetException::class);
  154. $borders = new Borders();
  155. $borders->getOutline();
  156. }
  157. public function testNoSupervisorInside(): void
  158. {
  159. $this->expectException(PhpSpreadsheetException::class);
  160. $borders = new Borders();
  161. $borders->getInside();
  162. }
  163. public function testNoSupervisorVertical(): void
  164. {
  165. $this->expectException(PhpSpreadsheetException::class);
  166. $borders = new Borders();
  167. $borders->getVertical();
  168. }
  169. public function testNoSupervisorHorizontal(): void
  170. {
  171. $this->expectException(PhpSpreadsheetException::class);
  172. $borders = new Borders();
  173. $borders->getHorizontal();
  174. }
  175. public function testGetSharedComponentPseudo(): void
  176. {
  177. $this->expectException(PhpSpreadsheetException::class);
  178. $spreadsheet = new Spreadsheet();
  179. $sheet = $spreadsheet->getActiveSheet();
  180. $sheet->getStyle('A1')->getBorders()->getHorizontal()->setBorderStyle(Border::BORDER_MEDIUM);
  181. $sheet->getStyle('A1')->getBorders()->getHorizontal()->getSharedComponent();
  182. }
  183. public function testBorderStyle(): void
  184. {
  185. $spreadsheet = new Spreadsheet();
  186. $sheet = $spreadsheet->getActiveSheet();
  187. $sheet->getStyle('A1')->getBorders()->getTop()->setBorderStyle(false);
  188. $sheet->getStyle('A2')->getBorders()->getTop()->setBorderStyle(true);
  189. self::assertEquals(Border::BORDER_NONE, $sheet->getStyle('A1')->getBorders()->getTop()->getBorderStyle());
  190. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getStyle('A2')->getBorders()->getTop()->getBorderStyle());
  191. $sheet->getStyle('A3')->getBorders()->getTop()->applyFromArray(['borderStyle' => Border::BORDER_MEDIUM]);
  192. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getStyle('A3')->getBorders()->getTop()->getBorderStyle());
  193. $border = new Border();
  194. $border->setBorderStyle(Border::BORDER_THIN)->setColor(new Color('FFFF0000'));
  195. self::assertEquals('FFFF0000', $border->getColor()->getARGB());
  196. self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
  197. }
  198. public function testDiagonalDirection(): void
  199. {
  200. $spreadsheet = new Spreadsheet();
  201. $sheet = $spreadsheet->getActiveSheet();
  202. $sheet->getStyle('A1')->getBorders()->getDiagonal()->setBorderStyle(Border::BORDER_MEDIUM);
  203. $sheet->getStyle('A1')->getBorders()->setDiagonalDirection(Borders::DIAGONAL_BOTH);
  204. $borders = $sheet->getStyle('A1')->getBorders();
  205. self::assertSame(Border::BORDER_MEDIUM, $borders->getDiagonal()->getBorderStyle());
  206. self::assertSame(Borders::DIAGONAL_BOTH, $borders->getDiagonalDirection());
  207. }
  208. }