Use number-columns-repeated in ODS writer

The number-columns-repeated usage may reduce the size of the outputted XML file by merging repeated values together.
This commit is contained in:
Adrien Loison committed 2015-08-31 12:03:28 -07:00
1 parent 0f8e7a8f58
commit bc009a3241
4 files changed
+123 -27

No files matched your search

+65 -1
View File
@@ -195,6 +195,48 @@ class WriterTest extends \PHPUnit_Framework_TestCase
$this->assertValueWasWrittenToSheet($fileName, 1, 10.2);
}
/**
* @return array
*/
public function dataProviderForTestAddRowShouldUseNumberColumnsRepeatedForRepeatedValues()
{
return [
[['ods--11', 'ods--11', 'ods--11'], 1, 3],
[['', ''], 1, 2],
[[true, true, true, true], 1, 4],
[[1.1, 1.1], 1, 2],
[['foo', 'bar'], 2, 0],
];
}
/**
* @dataProvider dataProviderForTestAddRowShouldUseNumberColumnsRepeatedForRepeatedValues
*
* @param array $dataRow
* @param int $expectedNumTableCells
* @param int $expectedNumColumnsRepeated
* @return void
*/
public function testAddRowShouldUseNumberColumnsRepeatedForRepeatedValues($dataRow, $expectedNumTableCells, $expectedNumColumnsRepeated)
{
$fileName = 'test_add_row_should_use_number_columns_repeated.ods';
$this->writeToODSFile([$dataRow], $fileName);
$sheetXmlNode = $this->getSheetXmlNode($fileName, 1);
$tableCellNodes = $sheetXmlNode->getElementsByTagName('table-cell');
$this->assertEquals($expectedNumTableCells, $tableCellNodes->length);
if ($expectedNumTableCells === 1) {
$tableCellNode = $tableCellNodes->item(0);
$numColumnsRepeated = intval($tableCellNode->getAttribute('table:number-columns-repeated'));
$this->assertEquals($expectedNumColumnsRepeated, $numColumnsRepeated);
} else {
foreach ($tableCellNodes as $tableCellNode) {
$this->assertFalse($tableCellNode->hasAttribute('table:number-columns-repeated'));
}
}
}
/**
* @return void
*/
@@ -423,12 +465,34 @@ class WriterTest extends \PHPUnit_Framework_TestCase
$this->assertNotContains($valueAsXmlString, $sheetXmlAsString, $message);
}
/**
* @param string $fileName
* @param int $sheetIndex
* @return \DOMNode
*/
private function getSheetXmlNode($fileName, $sheetIndex)
{
$xmlReader = $this->moveReaderToCorrectTableNode($fileName, $sheetIndex);
return $xmlReader->expand();
}
/**
* @param string $fileName
* @param int $sheetIndex
* @return string
*/
private function getSheetXmlNodeAsString($fileName, $sheetIndex)
{
$xmlReader = $this->moveReaderToCorrectTableNode($fileName, $sheetIndex);
return $xmlReader->readOuterXml();
}
/**
* @param string $fileName
* @param int $sheetIndex
* @return XMLReader
*/
private function moveReaderToCorrectTableNode($fileName, $sheetIndex)
{
$resourcePath = $this->getGeneratedResourcePath($fileName);
$pathToSheetFile = $resourcePath . '#content.xml';
@@ -441,6 +505,6 @@ class WriterTest extends \PHPUnit_Framework_TestCase
$xmlReader->readUntilNodeFound('table:table');
}
return $xmlReader->readOuterXml();
return $xmlReader;
}
}