6080c4561d
Reader/Html is now covered except for 1 statement. There is some coverage of RichText when you know in advance that the html will expand into a single cell. It is a tougher nut, one that I have not yet cracked, to try to handle rich text while converting unkown html to multiple cells. The original author left this as a TODO, and so for now must I. It made sense to restructure some of the code. There are some changes. - Issue #1532 is fixed (links are now saved when using rowspan). - Colors can now be specified as html color name. To accomplish this, Helper/Html function colourNameLookup was changed from protected to public, and changed to static. - Superfluous empty lines were eliminated in a number of places, e.g. <ul><li>A</li><li>B</li><li>C</li></ul> had formerly caused a wrapped cell to be created with 2 empty lines followed by A, B, and C on separate lines; it will now just have the 3 A/B/C lines, which seems like a more sensible interpretation. - Img alt tag, which had been cast to float, is now used as a string. Private member "encoding" is not used. Functions getEncoding and setEncoding have therefore been marked deprecated. In fact, I was unable to get SecurityScanner to pass *any* html which is not UTF-8. There are possibly ways of getting around this (in Reader/Html - I have no intention of messing with Security Scanner), as can be seen in my companion pull request for Excel2003 Xml Reader. Doing this would be easier for ASCII-compatible character sets (like ISO-8859-1), than for non-compatible charsets (like UTF-16). I am not convinced that the effort is worth it, but am willing to investigate further. I added a number of tests, creating an Html directory, and moving HtmlTest to that directory.
111 lines
4.6 KiB
PHP
111 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader\Html;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\Html;
|
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class HtmlBorderTest extends TestCase
|
|
{
|
|
public function testCanApplyInlineBordersStyles(): void
|
|
{
|
|
$html = '<table>
|
|
<tr>
|
|
<td style="border: 1px solid #333333;">Thin border</td>
|
|
<td style="border-bottom: 1px dashed #333333;">Border bottom</td>
|
|
<td style="border-top: 1px solid #333333;">Border top</td>
|
|
<td style="border-left: 1px solid green;">Border left</td>
|
|
<td style="border-right: 1px solid #333333;">Border right</td>
|
|
<td style="border: none"></td>
|
|
</tr>
|
|
</table>';
|
|
$filename = HtmlHelper::createHtml($html);
|
|
$spreadsheet = HtmlHelper::loadHtmlIntoSpreadsheet($filename, true);
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
$style = $firstSheet->getCell('A1')->getStyle();
|
|
$borders = $style->getBorders();
|
|
|
|
/** @var Border $border */
|
|
foreach ([$borders->getTop(), $borders->getBottom(), $borders->getLeft(), $borders->getRight()] as $border) {
|
|
self::assertEquals('333333', $border->getColor()->getRGB());
|
|
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
|
|
}
|
|
|
|
$style = $firstSheet->getCell('B1')->getStyle();
|
|
$border = $style->getBorders()->getBottom();
|
|
self::assertEquals('333333', $border->getColor()->getRGB());
|
|
self::assertEquals(Border::BORDER_DASHED, $border->getBorderStyle());
|
|
self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getTop()->getBorderStyle());
|
|
|
|
$style = $firstSheet->getCell('C1')->getStyle();
|
|
$border = $style->getBorders()->getTop();
|
|
self::assertEquals('333333', $border->getColor()->getRGB());
|
|
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
|
|
self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
|
|
|
|
$style = $firstSheet->getCell('D1')->getStyle();
|
|
$border = $style->getBorders()->getLeft();
|
|
self::assertEquals('00ff00', $border->getColor()->getRGB());
|
|
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
|
|
self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
|
|
|
|
$style = $firstSheet->getCell('E1')->getStyle();
|
|
$border = $style->getBorders()->getRight();
|
|
self::assertEquals('333333', $border->getColor()->getRGB());
|
|
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
|
|
self::assertEquals(Border::BORDER_NONE, $style->getBorders()->getBottom()->getBorderStyle());
|
|
|
|
$style = $firstSheet->getCell('F1')->getStyle();
|
|
$borders = $style->getBorders();
|
|
foreach ([$borders->getTop(), $borders->getBottom(), $borders->getLeft(), $borders->getRight()] as $border) {
|
|
self::assertEquals(Border::BORDER_NONE, $border->getBorderStyle());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerBorderStyle
|
|
*/
|
|
public function testBorderStyle(string $style, string $expectedResult): void
|
|
{
|
|
$borders = Html::getBorderMappings();
|
|
self::assertEquals($expectedResult, $borders[$style]);
|
|
}
|
|
|
|
public function testBorderStyleCoverage(): void
|
|
{
|
|
$expected = Html::getBorderMappings();
|
|
$covered = [];
|
|
foreach ($expected as $key => $val) {
|
|
$covered[$key] = 0;
|
|
}
|
|
$tests = $this->providerBorderStyle();
|
|
foreach ($tests as $test) {
|
|
$covered[$test[0]] = 1;
|
|
}
|
|
foreach ($covered as $key => $val) {
|
|
self::assertEquals(1, $val, "Borderstyle $key not tested");
|
|
}
|
|
}
|
|
|
|
public function providerBorderStyle(): array
|
|
{
|
|
return [
|
|
['dash-dot', Border::BORDER_DASHDOT],
|
|
['dash-dot-dot', Border::BORDER_DASHDOTDOT],
|
|
['dashed', Border::BORDER_DASHED],
|
|
['dotted', Border::BORDER_DOTTED],
|
|
['double', Border::BORDER_DOUBLE],
|
|
['hair', Border::BORDER_HAIR],
|
|
['medium', Border::BORDER_MEDIUM],
|
|
['medium-dashed', Border::BORDER_MEDIUMDASHED],
|
|
['medium-dash-dot', Border::BORDER_MEDIUMDASHDOT],
|
|
['medium-dash-dot-dot', Border::BORDER_MEDIUMDASHDOTDOT],
|
|
['none', Border::BORDER_NONE],
|
|
['slant-dash-dot', Border::BORDER_SLANTDASHDOT],
|
|
['solid', Border::BORDER_THIN],
|
|
['thick', Border::BORDER_THICK],
|
|
];
|
|
}
|
|
}
|