parent
47cafb0216
commit
38a39edc9e
@ -5,6 +5,9 @@ namespace Box\Spout\Writer\ODS;
|
|||||||
use Box\Spout\Common\Type;
|
use Box\Spout\Common\Type;
|
||||||
use Box\Spout\Reader\Wrapper\XMLReader;
|
use Box\Spout\Reader\Wrapper\XMLReader;
|
||||||
use Box\Spout\TestUsingResource;
|
use Box\Spout\TestUsingResource;
|
||||||
|
use Box\Spout\Writer\ODS\Helper\BorderHelper;
|
||||||
|
use Box\Spout\Writer\Style\Border;
|
||||||
|
use Box\Spout\Writer\Style\BorderBuilder;
|
||||||
use Box\Spout\Writer\Style\Color;
|
use Box\Spout\Writer\Style\Color;
|
||||||
use Box\Spout\Writer\Style\Style;
|
use Box\Spout\Writer\Style\Style;
|
||||||
use Box\Spout\Writer\Style\StyleBuilder;
|
use Box\Spout\Writer\Style\StyleBuilder;
|
||||||
@ -208,7 +211,7 @@ class WriterWithStyleTest extends \PHPUnit_Framework_TestCase
|
|||||||
];
|
];
|
||||||
$style = (new StyleBuilder())->setShouldWrapText()->build();
|
$style = (new StyleBuilder())->setShouldWrapText()->build();
|
||||||
|
|
||||||
$this->writeToODSFile($dataRows, $fileName,$style);
|
$this->writeToODSFile($dataRows, $fileName, $style);
|
||||||
|
|
||||||
$styleElements = $this->getCellStyleElementsFromContentXmlFile($fileName);
|
$styleElements = $this->getCellStyleElementsFromContentXmlFile($fileName);
|
||||||
$this->assertEquals(2, count($styleElements), 'There should be 2 styles (default and custom)');
|
$this->assertEquals(2, count($styleElements), 'There should be 2 styles (default and custom)');
|
||||||
@ -236,6 +239,62 @@ class WriterWithStyleTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertFirstChildHasAttributeEquals('wrap', $customStyleElement, 'table-cell-properties', 'fo:wrap-option');
|
$this->assertFirstChildHasAttributeEquals('wrap', $customStyleElement, 'table-cell-properties', 'fo:wrap-option');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testBorders()
|
||||||
|
{
|
||||||
|
$fileName = 'test_borders.ods';
|
||||||
|
|
||||||
|
$dataRows = [
|
||||||
|
['row-with-border-bottom-green-thick-solid'],
|
||||||
|
['row-without-border'],
|
||||||
|
['row-with-border-top-red-thin-dashed'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$borderBottomGreenThickSolid = (new BorderBuilder())
|
||||||
|
->setBorderBottom(Border::STYLE_SOLID, Color::GREEN, Border::WIDTH_THICK)->build();
|
||||||
|
|
||||||
|
|
||||||
|
$borderTopRedThinDashed = (new BorderBuilder())
|
||||||
|
->setBorderTop(Border::STYLE_DASHED, Color::RED, Border::WIDTH_THIN)->build();
|
||||||
|
|
||||||
|
$styles = [
|
||||||
|
(new StyleBuilder())->setBorder($borderBottomGreenThickSolid)->build(),
|
||||||
|
(new StyleBuilder())->build(),
|
||||||
|
(new StyleBuilder())->setBorder($borderTopRedThinDashed)->build(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->writeToODSFileWithMultipleStyles($dataRows, $fileName, $styles);
|
||||||
|
|
||||||
|
$styleElements = $this->getCellStyleElementsFromContentXmlFile($fileName);
|
||||||
|
$this->assertEquals(3, count($styleElements), 'There should be 3 styles)');
|
||||||
|
|
||||||
|
$expectedFirst = sprintf(
|
||||||
|
'%s %s #%s',
|
||||||
|
BorderHelper::$widthMap[Border::WIDTH_THICK],
|
||||||
|
BorderHelper::$styleMap[Border::STYLE_SOLID],
|
||||||
|
Color::GREEN
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals($expectedFirst, $styleElements[1]
|
||||||
|
->getElementsByTagName('table-cell-properties')
|
||||||
|
->item(0)
|
||||||
|
->getAttribute('fo:border-bottom'));
|
||||||
|
|
||||||
|
$expectedThird = sprintf(
|
||||||
|
'%s %s #%s',
|
||||||
|
BorderHelper::$widthMap[Border::WIDTH_THIN],
|
||||||
|
BorderHelper::$styleMap[Border::STYLE_DASHED],
|
||||||
|
Color::RED
|
||||||
|
);
|
||||||
|
$this->assertEquals($expectedThird, $styleElements[2]
|
||||||
|
->getElementsByTagName('table-cell-properties')
|
||||||
|
->item(0)
|
||||||
|
->getAttribute('fo:border-top'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $allRows
|
* @param array $allRows
|
||||||
* @param string $fileName
|
* @param string $fileName
|
||||||
|
112
tests/Spout/Writer/Style/BorderTest.php
Normal file
112
tests/Spout/Writer/Style/BorderTest.php
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Box\Spout\Writer\Style;
|
||||||
|
|
||||||
|
class BorderTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testValidInstance()
|
||||||
|
{
|
||||||
|
$noConstructorParams = new Border();
|
||||||
|
$withConstructorParams = new Border([
|
||||||
|
new BorderPart(Border::LEFT)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Box\Spout\Writer\Exception\Border\InvalidNameException
|
||||||
|
*/
|
||||||
|
public function testInvalidBorderPart()
|
||||||
|
{
|
||||||
|
$invalidBorderPart = new BorderPart('invalid');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Box\Spout\Writer\Exception\Border\InvalidStyleException
|
||||||
|
*/
|
||||||
|
public function testInvalidBorderPartStyle()
|
||||||
|
{
|
||||||
|
$invalidBorderPartStyle = new BorderPart(Border::LEFT, 'invalid');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Box\Spout\Writer\Exception\Border\InvalidWidthException
|
||||||
|
*/
|
||||||
|
public function testInvalidBorderPartWidth()
|
||||||
|
{
|
||||||
|
$invalidBorderPartStyle = new BorderPart(Border::LEFT, Border::STYLE_DASHED, Color::BLACK, 'invalid');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testNotMoreThanFourPartsPossible()
|
||||||
|
{
|
||||||
|
$border = new Border();
|
||||||
|
$border
|
||||||
|
->addPart(new BorderPart(Border::LEFT))
|
||||||
|
->addPart(new BorderPart(Border::RIGHT))
|
||||||
|
->addPart(new BorderPart(Border::TOP))
|
||||||
|
->addPart(new BorderPart(Border::BOTTOM))
|
||||||
|
->addPart(new BorderPart(Border::LEFT));
|
||||||
|
|
||||||
|
$this->assertEquals(4, count($border->getParts()), 'There should never be more than 4 border parts');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testSetParts()
|
||||||
|
{
|
||||||
|
$border = new Border();
|
||||||
|
$border->setParts([
|
||||||
|
new BorderPart(Border::LEFT)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(1, count($border->getParts()), 'It should be possible to set the border parts');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testBorderBuilderFluent()
|
||||||
|
{
|
||||||
|
$border = (new BorderBuilder())
|
||||||
|
->setBorderBottom()
|
||||||
|
->setBorderTop()
|
||||||
|
->setBorderLeft()
|
||||||
|
->setBorderRight()
|
||||||
|
->build();
|
||||||
|
$this->assertEquals(4, count($border->getParts()), 'The border builder exposes a fluent interface');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* :D :S
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testAnyCombinationOfAllowedBorderPartsParams()
|
||||||
|
{
|
||||||
|
$color = Color::BLACK;
|
||||||
|
foreach(BorderPart::getAllowedNames() as $allowedName)
|
||||||
|
{
|
||||||
|
foreach(BorderPart::getAllowedStyles() as $allowedStyle)
|
||||||
|
{
|
||||||
|
foreach(BorderPart::getAllowedWidths() as $allowedWidth)
|
||||||
|
{
|
||||||
|
$borderPart = new BorderPart($allowedName, $allowedStyle, $color, $allowedWidth);
|
||||||
|
$border = new Border();
|
||||||
|
$border->addPart($borderPart);
|
||||||
|
$this->assertEquals(1, count($border->getParts()));
|
||||||
|
|
||||||
|
$part = $border->getParts()[$allowedName];
|
||||||
|
/** @var $part BorderPart */
|
||||||
|
$this->assertEquals($allowedStyle, $part->getStyle());
|
||||||
|
$this->assertEquals($allowedWidth, $part->getWidth());
|
||||||
|
$this->assertEquals($color, $part->getColor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -129,4 +129,32 @@ class StyleTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$this->assertTrue($currentStyle->serialize() === $mergedStyle->serialize());
|
$this->assertTrue($currentStyle->serialize() === $mergedStyle->serialize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testStyleBuilderShouldApplyBorders()
|
||||||
|
{
|
||||||
|
$border = (new BorderBuilder())
|
||||||
|
->setBorderBottom()
|
||||||
|
->build();
|
||||||
|
$style = (new StyleBuilder())->setBorder($border)->build();
|
||||||
|
$this->assertTrue($style->shouldApplyBorder());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testStyleBuilderShouldMergeBorders()
|
||||||
|
{
|
||||||
|
$border = (new BorderBuilder())->setBorderBottom(Border::STYLE_DASHED, Color::RED, Border::WIDTH_THIN)->build();
|
||||||
|
|
||||||
|
$baseStyle = (new StyleBuilder())->setBorder($border)->build();
|
||||||
|
$currentStyle = (new StyleBuilder())->build();
|
||||||
|
$mergedStyle = $currentStyle->mergeWith($baseStyle);
|
||||||
|
|
||||||
|
$this->assertEquals(null, $currentStyle->getBorder(), 'Current style has no border');
|
||||||
|
$this->assertInstanceOf('Box\Spout\Writer\Style\Border', $baseStyle->getBorder(), 'Base style has a border');
|
||||||
|
$this->assertInstanceOf('Box\Spout\Writer\Style\Border', $mergedStyle->getBorder(), 'Merged style has a border');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ namespace Box\Spout\Writer\XLSX;
|
|||||||
use Box\Spout\Common\Type;
|
use Box\Spout\Common\Type;
|
||||||
use Box\Spout\Reader\Wrapper\XMLReader;
|
use Box\Spout\Reader\Wrapper\XMLReader;
|
||||||
use Box\Spout\TestUsingResource;
|
use Box\Spout\TestUsingResource;
|
||||||
|
use Box\Spout\Writer\Style\Border;
|
||||||
|
use Box\Spout\Writer\Style\BorderBuilder;
|
||||||
use Box\Spout\Writer\Style\Color;
|
use Box\Spout\Writer\Style\Color;
|
||||||
use Box\Spout\Writer\Style\Style;
|
use Box\Spout\Writer\Style\Style;
|
||||||
use Box\Spout\Writer\Style\StyleBuilder;
|
use Box\Spout\Writer\Style\StyleBuilder;
|
||||||
@ -205,7 +207,7 @@ class WriterWithStyleTest extends \PHPUnit_Framework_TestCase
|
|||||||
];
|
];
|
||||||
$style = (new StyleBuilder())->setShouldWrapText()->build();
|
$style = (new StyleBuilder())->setShouldWrapText()->build();
|
||||||
|
|
||||||
$this->writeToXLSXFile($dataRows, $fileName,$style);
|
$this->writeToXLSXFile($dataRows, $fileName, $style);
|
||||||
|
|
||||||
$cellXfsDomElement = $this->getXmlSectionFromStylesXmlFile($fileName, 'cellXfs');
|
$cellXfsDomElement = $this->getXmlSectionFromStylesXmlFile($fileName, 'cellXfs');
|
||||||
$xfElement = $cellXfsDomElement->getElementsByTagName('xf')->item(1);
|
$xfElement = $cellXfsDomElement->getElementsByTagName('xf')->item(1);
|
||||||
@ -232,6 +234,40 @@ class WriterWithStyleTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertFirstChildHasAttributeEquals('1', $xfElement, 'alignment', 'wrapText');
|
$this->assertFirstChildHasAttributeEquals('1', $xfElement, 'alignment', 'wrapText');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testBorders()
|
||||||
|
{
|
||||||
|
$fileName = 'test_borders.xlsx';
|
||||||
|
|
||||||
|
$dataRows = [
|
||||||
|
['row-with-border-bottom-green-thick-solid'],
|
||||||
|
['row-without-border'],
|
||||||
|
['row-with-border-top-red-thin-dashed'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$borderBottomGreenThickSolid = (new BorderBuilder())
|
||||||
|
->setBorderBottom(Border::STYLE_SOLID, Color::GREEN, Border::WIDTH_THICK)->build();
|
||||||
|
|
||||||
|
|
||||||
|
$borderTopRedThinDashed = (new BorderBuilder())
|
||||||
|
->setBorderTop(Border::STYLE_DASHED, Color::RED, Border::WIDTH_THIN)->build();
|
||||||
|
|
||||||
|
$styles = [
|
||||||
|
(new StyleBuilder())->setBorder($borderBottomGreenThickSolid)->build(),
|
||||||
|
(new StyleBuilder())->build(),
|
||||||
|
(new StyleBuilder())->setBorder($borderTopRedThinDashed)->build(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->writeToXLSXFileWithMultipleStyles($dataRows, $fileName, $styles);
|
||||||
|
$borderElements = $this->getXmlSectionFromStylesXmlFile($fileName, 'borders');
|
||||||
|
$this->assertEquals(3, $borderElements->getAttribute('count'), '3 borders present');
|
||||||
|
|
||||||
|
$styleXfsElements = $this->getXmlSectionFromStylesXmlFile($fileName, 'cellXfs');
|
||||||
|
$this->assertEquals(3, $styleXfsElements->getAttribute('count'), '3 cell xfs present');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $allRows
|
* @param array $allRows
|
||||||
* @param string $fileName
|
* @param string $fileName
|
||||||
|
Loading…
x
Reference in New Issue
Block a user