From 2b1160bb336a88e7d94f405aed127d542940c0b4 Mon Sep 17 00:00:00 2001 From: madflow Date: Wed, 16 Mar 2016 12:52:35 +0100 Subject: [PATCH] Tests for #184 --- tests/Spout/Reader/CSV/ReaderTest.php | 32 +++++++++++++++++ tests/Spout/Reader/ODS/ReaderTest.php | 32 +++++++++++++++++ tests/Spout/Reader/XLSX/ReaderTest.php | 33 ++++++++++++++++++ .../resources/csv/sheet_with_empty_cells.csv | 3 ++ .../resources/csv/sheet_with_zeros_in_row.csv | 3 ++ .../resources/ods/sheet_with_empty_cells.ods | Bin 0 -> 7473 bytes .../resources/ods/sheet_with_zeros_in_row.ods | Bin 0 -> 8593 bytes .../xlsx/sheet_with_empty_cells.xlsx | Bin 0 -> 4724 bytes .../xlsx/sheet_with_zeros_in_row.xlsx | Bin 0 -> 4732 bytes 9 files changed, 103 insertions(+) create mode 100644 tests/resources/csv/sheet_with_empty_cells.csv create mode 100644 tests/resources/csv/sheet_with_zeros_in_row.csv create mode 100644 tests/resources/ods/sheet_with_empty_cells.ods create mode 100644 tests/resources/ods/sheet_with_zeros_in_row.ods create mode 100644 tests/resources/xlsx/sheet_with_empty_cells.xlsx create mode 100644 tests/resources/xlsx/sheet_with_zeros_in_row.xlsx diff --git a/tests/Spout/Reader/CSV/ReaderTest.php b/tests/Spout/Reader/CSV/ReaderTest.php index cdbca56..78d6721 100644 --- a/tests/Spout/Reader/CSV/ReaderTest.php +++ b/tests/Spout/Reader/CSV/ReaderTest.php @@ -343,6 +343,38 @@ class ReaderTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expectedRows, $allRows); } + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldInludeRowsWithZerosOnly() + { + $allRows = $this->getAllRowsForFile('sheet_with_zeros_in_row.csv'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['1', '2', '3'], + ['0', '0', '0'] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be only 3 rows, because zeros (0) are valid values'); + } + + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldCreateOutputEmptyCellPreserved() + { + $allRows = $this->getAllRowsForFile('sheet_with_empty_cells.csv'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['0', '', ''], + ['1', '1', ''] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be 3 rows, with equal length'); + } + /** * @param string $fileName * @param string|void $fieldDelimiter diff --git a/tests/Spout/Reader/ODS/ReaderTest.php b/tests/Spout/Reader/ODS/ReaderTest.php index 8d9977b..e852630 100644 --- a/tests/Spout/Reader/ODS/ReaderTest.php +++ b/tests/Spout/Reader/ODS/ReaderTest.php @@ -387,6 +387,38 @@ class ReaderTest extends \PHPUnit_Framework_TestCase $reader->open('php://memory'); } + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldInludeRowsWithZerosOnly() + { + $allRows = $this->getAllRowsForFile('sheet_with_zeros_in_row.ods'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['1', '2', '3'], + ['0', '0', '0'] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be only 3 rows, because zeros (0) are valid values'); + } + + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldCreateOutputEmptyCellPreserved() + { + $allRows = $this->getAllRowsForFile('sheet_with_empty_cells.ods'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['0', '', ''], + ['1', '1', ''] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be 3 rows, with equal length'); + } + /** * @param string $fileName * @return array All the read rows the given file diff --git a/tests/Spout/Reader/XLSX/ReaderTest.php b/tests/Spout/Reader/XLSX/ReaderTest.php index a3bdf7b..65a0069 100644 --- a/tests/Spout/Reader/XLSX/ReaderTest.php +++ b/tests/Spout/Reader/XLSX/ReaderTest.php @@ -428,6 +428,39 @@ class ReaderTest extends \PHPUnit_Framework_TestCase $reader->open('php://memory'); } + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldInludeRowsWithZerosOnly() + { + $allRows = $this->getAllRowsForFile('sheet_with_zeros_in_row.xlsx'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['1', '2', '3'], + ['0', '0', '0'] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be only 3 rows, because zeros (0) are valid values'); + } + + /** + * https://github.com/box/spout/issues/184 + * @return void + */ + public function testReadShouldCreateOutputEmptyCellPreserved() + { + $allRows = $this->getAllRowsForFile('sheet_with_empty_cells.xlsx'); + + $expectedRows = [ + ['A', 'B', 'C'], + ['0', '', ''], + ['1', '1', ''] + ]; + $this->assertEquals($expectedRows, $allRows, 'There should be 3 rows, with equal length'); + } + + /** * @param string $fileName * @return array All the read rows the given file diff --git a/tests/resources/csv/sheet_with_empty_cells.csv b/tests/resources/csv/sheet_with_empty_cells.csv new file mode 100644 index 0000000..157a854 --- /dev/null +++ b/tests/resources/csv/sheet_with_empty_cells.csv @@ -0,0 +1,3 @@ +"A","B","C" +0,, +1,1, diff --git a/tests/resources/csv/sheet_with_zeros_in_row.csv b/tests/resources/csv/sheet_with_zeros_in_row.csv new file mode 100644 index 0000000..6078d9e --- /dev/null +++ b/tests/resources/csv/sheet_with_zeros_in_row.csv @@ -0,0 +1,3 @@ +"A","B","C" +1,2,3 +0,0,0 diff --git a/tests/resources/ods/sheet_with_empty_cells.ods b/tests/resources/ods/sheet_with_empty_cells.ods new file mode 100644 index 0000000000000000000000000000000000000000..b7c3a91e89a2e8a477307a144f5855c9cd25ef06 GIT binary patch literal 7473 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 literal 0 HcmV?d00001 diff --git a/tests/resources/ods/sheet_with_zeros_in_row.ods b/tests/resources/ods/sheet_with_zeros_in_row.ods new file mode 100644 index 0000000000000000000000000000000000000000..0b71aae47878fe5f9132c28bad28d078bc9227d6 GIT binary patch literal 8593 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 SV|X_|>zh%Hd6V)00R9i6Adm9^ literal 0 HcmV?d00001 diff --git a/tests/resources/xlsx/sheet_with_empty_cells.xlsx b/tests/resources/xlsx/sheet_with_empty_cells.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d815a1c2b852441c702a1f9065e63134007659ea GIT binary patch literal 4724 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 literal 0 HcmV?d00001 diff --git a/tests/resources/xlsx/sheet_with_zeros_in_row.xlsx b/tests/resources/xlsx/sheet_with_zeros_in_row.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3812e7d761765bb16743014dab77a01cdcac3812 GIT binary patch literal 4732 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 literal 0 HcmV?d00001