From 643b0539d1690eb0320b3496b1135ab0be100829 Mon Sep 17 00:00:00 2001 From: Marc Verney Date: Tue, 4 Dec 2018 09:47:31 +0100 Subject: [PATCH] Fix CsvParser skipping all rows when OPTION_CONTAINS_HEADER is true --- Creational/AbstractFactory/CsvParser.php | 1 + .../Tests/AbstractFactoryTest.php | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/Creational/AbstractFactory/CsvParser.php b/Creational/AbstractFactory/CsvParser.php index fc259f6..5b02697 100644 --- a/Creational/AbstractFactory/CsvParser.php +++ b/Creational/AbstractFactory/CsvParser.php @@ -24,6 +24,7 @@ class CsvParser implements Parser foreach (explode(PHP_EOL, $input) as $line) { if (!$headerWasParsed && $this->skipHeaderLine === self::OPTION_CONTAINS_HEADER) { + $headerWasParsed = true; continue; } diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index 1500837..4ef2433 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -17,6 +17,39 @@ class AbstractFactoryTest extends TestCase $this->assertInstanceOf(CsvParser::class, $parser); } + public function testCsvParserCanParse() + { + $factory = new ParserFactory(); + $parser = $factory->createCsvParser(CsvParser::OPTION_CONTAINS_NO_HEADER); + + $result = $parser->parse("A0,A1,A2\nB0,B1,B2\nC0,C1,C2"); + + $this->assertEquals( + [ + ['A0', 'A1', 'A2'], + ['B0', 'B1', 'B2'], + ['C0', 'C1', 'C2'] + ], + $result + ); + } + + public function testCsvParserCanSkipHeader() + { + $factory = new ParserFactory(); + $parser = $factory->createCsvParser(CsvParser::OPTION_CONTAINS_HEADER); + + $result = $parser->parse("A0,A1,A2\nB0,B1,B2\nC0,C1,C2"); + + $this->assertEquals( + [ + ['B0', 'B1', 'B2'], + ['C0', 'C1', 'C2'] + ], + $result + ); + } + public function testCanCreateJsonParser() { $factory = new ParserFactory();