diff --git a/Spreadsheet/Excel/Writer/Workbook.php b/Spreadsheet/Excel/Writer/Workbook.php index 6d1cb9c..ed9998b 100644 --- a/Spreadsheet/Excel/Writer/Workbook.php +++ b/Spreadsheet/Excel/Writer/Workbook.php @@ -178,6 +178,9 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri /** @var array */ public $blockSize; + /** @var int */ + public $timestamp; + /** * Class constructor * @@ -213,6 +216,8 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri $this->totalStringLength = 0; $this->uniqueString = 0; $this->tableOfStrings = array(); + $this->timestamp = time(); + $this->setPaletteXl97(); } @@ -636,7 +641,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri } } - $root = new OLE_PPS_Root(time(), time(), array($OLE)); + $root = new OLE_PPS_Root($this->timestamp, $this->timestamp, array($OLE)); if ($this->temporaryDirectory != '') { $root->setTempDir($this->temporaryDirectory); diff --git a/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_WriterTestCase.php b/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_WriterTestCase.php index 69d6623..00faa30 100644 --- a/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_WriterTestCase.php +++ b/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_WriterTestCase.php @@ -6,12 +6,50 @@ */ class Test_Spreadsheet_Excel_WriterTestCase extends PHPUnit_Framework_TestCase { + const FIXTURES_PATH = 'test/fixture/'; + /** - * @param string $fileName - * @return Spreadsheet_Excel_Writer_Workbook + * @param string $filename + * @return Spreadsheet_Excel_Writer */ - protected function getNewWorkbook($fileName = 'my_workbook') + protected function getNewWorkbook($filename = '') { - return new Spreadsheet_Excel_Writer_Workbook($fileName); + // we're writing to the standard output by defaulr + return new Spreadsheet_Excel_Writer($filename); + } + + protected function assertSameAsInFixture($filename, Spreadsheet_Excel_Writer $workbook) + { + $this->assertEmpty($workbook->fileName, "Testing with fixtures works only for standard output"); + + // we have to fix timestamp for fixtures to work + $workbook->timestamp = 1000000000; // somewhere in 2001 + + ob_start(); + $workbook->close(); + $data = ob_get_clean(); + + $fullPath = self::FIXTURES_PATH.$filename; + + if ($this->shouldUpdateFixtures()) { + file_put_contents($fullPath, $data); + } + + if (!is_file($fullPath)) { + $this->fail("Fixture $filename not found"); + } + + // TODO: should we save data for future analysis? + //file_put_contents("{$fullPath}.work", $data); + + $this->assertEquals(file_get_contents($fullPath), $data, "Output differs for $filename"); + } + + /** + * We should update golden files + */ + private function shouldUpdateFixtures() + { + return isset($_SERVER['GOLDEN']); } } \ No newline at end of file diff --git a/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_Writer_WorkbookTest.php b/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_Writer_WorkbookTest.php index e96a5df..beb9a0e 100644 --- a/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_Writer_WorkbookTest.php +++ b/test/Test/Spreadsheet/Excel/Writer/Test_Spreadsheet_Excel_Writer_WorkbookTest.php @@ -10,6 +10,28 @@ class Test_Spreadsheet_Excel_Writer_WorkbookTest extends Test_Spreadsheet_Excel_ { $workbook = $this->getNewWorkbook(); + $before = get_object_vars($workbook); + + $workbook->setVersion(1); + + $this->assertEquals($before, get_object_vars($workbook), "Version 1 should not change internal state"); + $workbook->setVersion(8); + + $this->assertNotEquals($before, get_object_vars($workbook), "Version 8 should change internal state"); + + return $workbook; } -} \ No newline at end of file + + /** + * @depends testSetVersion + */ + public function testWriteSingleCell(Spreadsheet_Excel_Writer $workbook) + { + $sheet = $workbook->addWorksheet("Example"); + $sheet->write(0, 0, "Example"); + + $this->assertSameAsInFixture('example.xls', $workbook); + } + +} diff --git a/test/fixture/example.xls b/test/fixture/example.xls new file mode 100644 index 0000000..f7955b3 Binary files /dev/null and b/test/fixture/example.xls differ