Fix CsvParser skipping all rows when OPTION_CONTAINS_HEADER is true

This commit is contained in:
Marc Verney
2018-12-04 09:47:31 +01:00
parent 617754573c
commit 643b0539d1
2 changed files with 34 additions and 0 deletions

View File

@@ -24,6 +24,7 @@ class CsvParser implements Parser
foreach (explode(PHP_EOL, $input) as $line) { foreach (explode(PHP_EOL, $input) as $line) {
if (!$headerWasParsed && $this->skipHeaderLine === self::OPTION_CONTAINS_HEADER) { if (!$headerWasParsed && $this->skipHeaderLine === self::OPTION_CONTAINS_HEADER) {
$headerWasParsed = true;
continue; continue;
} }

View File

@@ -17,6 +17,39 @@ class AbstractFactoryTest extends TestCase
$this->assertInstanceOf(CsvParser::class, $parser); $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() public function testCanCreateJsonParser()
{ {
$factory = new ParserFactory(); $factory = new ParserFactory();