|
18 | 18 | package org.apache.commons.csv; |
19 | 19 |
|
20 | 20 | import static org.apache.commons.csv.Constants.CRLF; |
| 21 | +import static org.apache.commons.csv.Constants.CR; |
21 | 22 | import static org.apache.commons.csv.Constants.LF; |
22 | 23 | import static org.junit.Assert.assertArrayEquals; |
23 | 24 | import static org.junit.Assert.assertEquals; |
@@ -586,43 +587,88 @@ public void testGetHeaderMap() throws Exception { |
586 | 587 |
|
587 | 588 | @Test |
588 | 589 | public void testGetLineNumberWithLF() throws Exception { |
589 | | - final CSVParser parser = new CSVParser("a\nb\nc", CSVFormat.DEFAULT.withLineSeparator(LF)); |
590 | | - |
591 | | - assertEquals(0, parser.getLineNumber()); |
592 | | - assertNotNull(parser.getRecord()); |
593 | | - assertEquals(1, parser.getLineNumber()); |
594 | | - assertNotNull(parser.getRecord()); |
595 | | - assertEquals(2, parser.getLineNumber()); |
596 | | - assertNotNull(parser.getRecord()); |
597 | | - assertEquals(2, parser.getLineNumber()); |
598 | | - assertNull(parser.getRecord()); |
| 590 | + validateLineNumbers(String.valueOf(LF)); |
599 | 591 | } |
600 | 592 |
|
601 | 593 | @Test |
602 | 594 | public void testGetLineNumberWithCRLF() throws Exception { |
603 | | - final CSVParser parser = new CSVParser("a\r\nb\r\nc", CSVFormat.DEFAULT.withLineSeparator(CRLF)); |
| 595 | + validateLineNumbers(CRLF); |
| 596 | + } |
| 597 | + |
| 598 | + @Test |
| 599 | + public void testGetLineNumberWithCR() throws Exception { |
| 600 | + validateLineNumbers(String.valueOf(CR)); |
| 601 | + } |
| 602 | + |
| 603 | + @Test |
| 604 | + public void testGetRecordNumberWithLF() throws Exception { |
| 605 | + validateRecordNumbers(String.valueOf(LF)); |
| 606 | + } |
604 | 607 |
|
| 608 | + @Test |
| 609 | + public void testGetRecordWithMultiiLineValues() throws Exception { |
| 610 | + final CSVParser parser = new CSVParser("\"a\r\n1\",\"a\r\n2\"" + CRLF + "\"b\r\n1\",\"b\r\n2\"" + CRLF + "\"c\r\n1\",\"c\r\n2\"", |
| 611 | + CSVFormat.DEFAULT.withLineSeparator(CRLF)); |
| 612 | + CSVRecord record; |
| 613 | + assertEquals(0, parser.getRecordNumber()); |
605 | 614 | assertEquals(0, parser.getLineNumber()); |
606 | | - assertNotNull(parser.getRecord()); |
607 | | - assertEquals(1, parser.getLineNumber()); |
608 | | - assertNotNull(parser.getRecord()); |
609 | | - assertEquals(2, parser.getLineNumber()); |
610 | | - assertNotNull(parser.getRecord()); |
611 | | - assertEquals(2, parser.getLineNumber()); |
612 | | - assertNull(parser.getRecord()); |
| 615 | + assertNotNull(record = parser.getRecord()); |
| 616 | + assertEquals(3, parser.getLineNumber()); |
| 617 | + assertEquals(1, record.getRecordNumber()); |
| 618 | + assertEquals(1, parser.getRecordNumber()); |
| 619 | + assertNotNull(record = parser.getRecord()); |
| 620 | + assertEquals(6, parser.getLineNumber()); |
| 621 | + assertEquals(2, record.getRecordNumber()); |
| 622 | + assertEquals(2, parser.getRecordNumber()); |
| 623 | + assertNotNull(record = parser.getRecord()); |
| 624 | + assertEquals(8, parser.getLineNumber()); |
| 625 | + assertEquals(3, record.getRecordNumber()); |
| 626 | + assertEquals(3, parser.getRecordNumber()); |
| 627 | + assertNull(record = parser.getRecord()); |
| 628 | + assertEquals(8, parser.getLineNumber()); |
| 629 | + assertEquals(3, parser.getRecordNumber()); |
613 | 630 | } |
614 | 631 |
|
615 | 632 | @Test |
616 | | - public void testGetLineNumberWithCR() throws Exception { |
617 | | - final CSVParser parser = new CSVParser("a\rb\rc", CSVFormat.DEFAULT.withLineSeparator("\r")); |
| 633 | + public void testGetRecordNumberWithCRLF() throws Exception { |
| 634 | + validateRecordNumbers(CRLF); |
| 635 | + } |
| 636 | + |
| 637 | + @Test |
| 638 | + public void testGetRecordNumberWithCR() throws Exception { |
| 639 | + validateRecordNumbers(String.valueOf(CR)); |
| 640 | + } |
618 | 641 |
|
| 642 | + private void validateRecordNumbers(String lineSeparator) throws IOException { |
| 643 | + final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.DEFAULT.withLineSeparator(lineSeparator)); |
| 644 | + CSVRecord record; |
| 645 | + assertEquals(0, parser.getRecordNumber()); |
| 646 | + assertNotNull(record = parser.getRecord()); |
| 647 | + assertEquals(1, record.getRecordNumber()); |
| 648 | + assertEquals(1, parser.getRecordNumber()); |
| 649 | + assertNotNull(record = parser.getRecord()); |
| 650 | + assertEquals(2, record.getRecordNumber()); |
| 651 | + assertEquals(2, parser.getRecordNumber()); |
| 652 | + assertNotNull(record = parser.getRecord()); |
| 653 | + assertEquals(3, record.getRecordNumber()); |
| 654 | + assertEquals(3, parser.getRecordNumber()); |
| 655 | + assertNull(record = parser.getRecord()); |
| 656 | + assertEquals(3, parser.getRecordNumber()); |
| 657 | + } |
| 658 | + |
| 659 | + private void validateLineNumbers(String lineSeparator) throws IOException { |
| 660 | + final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.DEFAULT.withLineSeparator(lineSeparator)); |
619 | 661 | assertEquals(0, parser.getLineNumber()); |
620 | 662 | assertNotNull(parser.getRecord()); |
621 | 663 | assertEquals(1, parser.getLineNumber()); |
622 | 664 | assertNotNull(parser.getRecord()); |
623 | 665 | assertEquals(2, parser.getLineNumber()); |
624 | 666 | assertNotNull(parser.getRecord()); |
| 667 | + // Still 2 because the last line is does not have EOL chars |
625 | 668 | assertEquals(2, parser.getLineNumber()); |
626 | 669 | assertNull(parser.getRecord()); |
| 670 | + // Still 2 because the last line is does not have EOL chars |
| 671 | + assertEquals(2, parser.getLineNumber()); |
627 | 672 | } |
| 673 | + |
628 | 674 | } |
0 commit comments