From bcd1bc364c298ae66106ad7be055434339517af2 Mon Sep 17 00:00:00 2001 From: Paolo Agostinetto Date: Sat, 18 Feb 2017 13:55:22 +0100 Subject: [PATCH] Ods reader: test loading of Worksheets --- tests/PhpSpreadsheetTests/Reader/OdsTest.php | 35 ++++++++++++++----- tests/data/Reader/Ods/data.ods | Bin 0 -> 9259 bytes tests/data/Reader/Ods/numbers.ods | Bin 9003 -> 0 bytes 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 tests/data/Reader/Ods/data.ods delete mode 100644 tests/data/Reader/Ods/numbers.ods diff --git a/tests/PhpSpreadsheetTests/Reader/OdsTest.php b/tests/PhpSpreadsheetTests/Reader/OdsTest.php index b530acee..56a37338 100644 --- a/tests/PhpSpreadsheetTests/Reader/OdsTest.php +++ b/tests/PhpSpreadsheetTests/Reader/OdsTest.php @@ -28,7 +28,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase /** * @return \PhpOffice\PhpSpreadsheet\Spreadsheet */ - protected function load(){ + protected function loadOOCalcTest(){ if(!$this->spreadsheet){ $filename = __DIR__ . '/../../../samples/templates/OOCalcTest.ods'; @@ -44,9 +44,28 @@ class OdsTest extends \PHPUnit_Framework_TestCase return $this->spreadsheet; } + public function testLoadWorksheets() + { + $filename = __DIR__ . '/../../data/Reader/Ods/data.ods'; + + // Load into this instance + $reader = new Ods(); + $spreadsheet = $reader->loadIntoExisting($filename, new \PhpOffice\PhpSpreadsheet\Spreadsheet()); + + $this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Spreadsheet', $spreadsheet); + +// $this->assertCount(1, $spreadsheet->getAllSheets()); + + $firstSheet = $spreadsheet->getSheet(0); + $this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $firstSheet); + + $secondSheet = $spreadsheet->getSheet(1); + $this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $secondSheet); + } + public function testReadValueAndComments(){ - $spreadsheet = $this->load(); + $spreadsheet = $this->loadOOCalcTest(); $this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Spreadsheet', $spreadsheet); @@ -96,7 +115,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase * Percentage, Currency */ - $filename = __DIR__ . '/../../data/Reader/Ods/numbers.ods'; + $filename = __DIR__ . '/../../data/Reader/Ods/data.ods'; // Create new Spreadsheet $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); @@ -104,7 +123,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase // Load into this instance $reader = new Ods(); $spreadsheet = $reader->loadIntoExisting($filename, $spreadsheet); - $firstSheet = $spreadsheet->getActiveSheet(); + $firstSheet = $spreadsheet->getSheet(0); $this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A1")->getDataType()); // Percentage (10%) $this->assertEquals(0.1, $firstSheet->getCell("A1")->getValue()); @@ -121,7 +140,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase public function testReadColors() { - $spreadsheet = $this->load(); + $spreadsheet = $this->loadOOCalcTest(); $firstSheet = $spreadsheet->getSheet(0); // Background color @@ -141,7 +160,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase { $this->markTestSkipped("Features not implemented yet"); - $spreadsheet = $this->load(); + $spreadsheet = $this->loadOOCalcTest(); $firstSheet = $spreadsheet->getSheet(0); // Font styles @@ -163,7 +182,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase $this->markTestSkipped("Features not implemented yet"); - $spreadsheet = $this->load(); + $spreadsheet = $this->loadOOCalcTest(); $firstSheet = $spreadsheet->getSheet(0); $this->assertEquals( @@ -177,7 +196,7 @@ class OdsTest extends \PHPUnit_Framework_TestCase $this->markTestSkipped("Features not implemented fully"); - $spreadsheet = $this->load(); + $spreadsheet = $this->loadOOCalcTest(); $firstSheet = $spreadsheet->getSheet(0); $hyperlink = $firstSheet->getCell("A29"); diff --git a/tests/data/Reader/Ods/data.ods b/tests/data/Reader/Ods/data.ods new file mode 100644 index 0000000000000000000000000000000000000000..7abc5c45e6e6864ecb7b5b1585d183174a240df6 GIT binary patch literal 9259 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