HtmlLoadStringTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Html;
  3. use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
  4. use PhpOffice\PhpSpreadsheet\Reader\Html;
  5. use PHPUnit\Framework\TestCase;
  6. class HtmlLoadStringTest extends TestCase
  7. {
  8. public function testCanLoadFromString(): void
  9. {
  10. $html = '<table>
  11. <tr>
  12. <td>Hello World</td>
  13. </tr>
  14. <tr>
  15. <td>Hello<br />World</td>
  16. </tr>
  17. <tr>
  18. <td>Hello<br>World</td>
  19. </tr>
  20. </table>';
  21. $spreadsheet = (new Html())->loadFromString($html);
  22. $firstSheet = $spreadsheet->getSheet(0);
  23. $cellStyle = $firstSheet->getStyle('A1');
  24. self::assertFalse($cellStyle->getAlignment()->getWrapText());
  25. $cellStyle = $firstSheet->getStyle('A2');
  26. self::assertTrue($cellStyle->getAlignment()->getWrapText());
  27. $cellValue = $firstSheet->getCell('A2')->getValue();
  28. self::assertStringContainsString("\n", $cellValue);
  29. $cellStyle = $firstSheet->getStyle('A3');
  30. self::assertTrue($cellStyle->getAlignment()->getWrapText());
  31. $cellValue = $firstSheet->getCell('A3')->getValue();
  32. self::assertStringContainsString("\n", $cellValue);
  33. }
  34. public function testLoadInvalidString(): void
  35. {
  36. $this->expectException(ReaderException::class);
  37. $html = '<table<>';
  38. $spreadsheet = (new Html())->loadFromString($html);
  39. $firstSheet = $spreadsheet->getSheet(0);
  40. $cellStyle = $firstSheet->getStyle('A1');
  41. self::assertFalse($cellStyle->getAlignment()->getWrapText());
  42. }
  43. public function testCanLoadFromStringIntoExistingSpreadsheet(): void
  44. {
  45. $html = '<table>
  46. <tr>
  47. <td>Hello World</td>
  48. </tr>
  49. <tr>
  50. <td>Hello<br />World</td>
  51. </tr>
  52. <tr>
  53. <td>Hello<br>World</td>
  54. </tr>
  55. </table>';
  56. $reader = new Html();
  57. $spreadsheet = $reader->loadFromString($html);
  58. $firstSheet = $spreadsheet->getSheet(0);
  59. $cellStyle = $firstSheet->getStyle('A1');
  60. self::assertFalse($cellStyle->getAlignment()->getWrapText());
  61. $cellStyle = $firstSheet->getStyle('A2');
  62. self::assertTrue($cellStyle->getAlignment()->getWrapText());
  63. $cellValue = $firstSheet->getCell('A2')->getValue();
  64. self::assertStringContainsString("\n", $cellValue);
  65. $cellStyle = $firstSheet->getStyle('A3');
  66. self::assertTrue($cellStyle->getAlignment()->getWrapText());
  67. $cellValue = $firstSheet->getCell('A3')->getValue();
  68. self::assertStringContainsString("\n", $cellValue);
  69. $reader->setSheetIndex(1);
  70. $html = '<table>
  71. <tr>
  72. <td>Goodbye World</td>
  73. </tr>
  74. </table>';
  75. self::assertEquals(1, $spreadsheet->getSheetCount());
  76. $spreadsheet = $reader->loadFromString($html, $spreadsheet);
  77. self::assertEquals(2, $spreadsheet->getSheetCount());
  78. }
  79. public function testCanLoadDuplicateTitle(): void
  80. {
  81. $html = <<<'EOF'
  82. <html>
  83. <head>
  84. <title>Sheet</title>
  85. </head>
  86. <body>
  87. <table><tr><td>1</td></tr></table>
  88. </body>
  89. </html>
  90. EOF;
  91. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
  92. $spreadsheet = $reader->loadFromString($html);
  93. $reader->setSheetIndex(1);
  94. $reader->loadFromString($html, $spreadsheet);
  95. $reader->setSheetIndex(2);
  96. $reader->loadFromString($html, $spreadsheet);
  97. $sheet = $spreadsheet->getSheet(0);
  98. self::assertEquals(1, $sheet->getCell('A1')->getValue());
  99. self::assertEquals('Sheet', $sheet->getTitle());
  100. $sheet = $spreadsheet->getSheet(1);
  101. self::assertEquals(1, $sheet->getCell('A1')->getValue());
  102. self::assertEquals('Sheet 1', $sheet->getTitle());
  103. $sheet = $spreadsheet->getSheet(2);
  104. self::assertEquals(1, $sheet->getCell('A1')->getValue());
  105. self::assertEquals('Sheet 2', $sheet->getTitle());
  106. }
  107. }