2
2
3
3
import java .io .Reader ;
4
4
import java .io .StringReader ;
5
+ import java .io .StringWriter ;
5
6
import java .util .List ;
6
7
import java .util .Map ;
8
+ import java .util .Random ;
9
+
10
+ import com .fasterxml .jackson .annotation .JsonPropertyOrder ;
11
+
12
+ import com .fasterxml .jackson .databind .MappingIterator ;
13
+ import com .fasterxml .jackson .databind .ObjectReader ;
7
14
8
15
import com .fasterxml .jackson .dataformat .csv .CsvMapper ;
16
+ import com .fasterxml .jackson .dataformat .csv .CsvParser ;
9
17
import com .fasterxml .jackson .dataformat .csv .CsvSchema ;
10
18
import com .fasterxml .jackson .dataformat .csv .ModuleTestBase ;
11
19
12
20
// [dataformats-text#191]
21
+ // [dataformats-text#174]
13
22
public class SkipEmptyLines191Test extends ModuleTestBase {
14
23
15
- private static String COL_1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
16
- private static String COL_2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ;
24
+ // [dataformats-text#174]
25
+ @ JsonPropertyOrder ({ "timestamp" , "random" })
26
+ static class Row174 {
27
+ private int timestamp ;
28
+ private String random ;
29
+
30
+ public int getTimestamp () {
31
+ return timestamp ;
32
+ }
33
+
34
+ public void setTimestamp (int timestamp ) {
35
+ this .timestamp = timestamp ;
36
+ }
37
+
38
+ public String getRandom () {
39
+ return random ;
40
+ }
41
+
42
+ public void setRandom (String random ) {
43
+ this .random = random ;
44
+ }
45
+
46
+ @ Override
47
+ public String toString () {
48
+ return "Row{timestamp=" + timestamp + ", random='" + random + "'}" ;
49
+ }
50
+ }
51
+
52
+ /*
53
+ /**********************************************************************
54
+ /* Test methods
55
+ /**********************************************************************
56
+ */
57
+
58
+ private final static CsvMapper MAPPER = new CsvMapper ();
59
+
60
+ // [dataformats-text#174]
61
+ public void testEmptyLines174 () throws Exception
62
+ {
63
+ final StringWriter sw = new StringWriter (50000 );
64
+ int lineCount = 0 ;
65
+ final Random rnd = new Random ();
66
+
67
+ while (lineCount < 4000 ) {
68
+ sw .append ("\" " + System .currentTimeMillis ()/1000 + "\" ,\" " + randomString (rnd ) + "\" \n " );
69
+ ++lineCount ;
70
+ }
71
+ final String doc = sw .toString ();
72
+
73
+ ObjectReader objectReader = MAPPER
74
+ .enable (CsvParser .Feature .SKIP_EMPTY_LINES )
75
+ .readerFor (Row174 .class )
76
+ .with (MAPPER .schemaFor (Row174 .class ));
77
+
78
+ MappingIterator <Row174 > iterator = objectReader .readValues (doc );
79
+ Row174 data = null ;
80
+ lineCount = 0 ;
81
+ while (iterator .hasNext ()) {
82
+ ++lineCount ;
83
+ try {
84
+ data = iterator .next ();
85
+ } catch (Exception e ) {
86
+ fail ("Failed on row #" +lineCount +", previous row: " +data );
87
+ }
88
+ }
89
+ iterator .close ();
90
+ }
91
+
92
+ private String randomString (Random rnd ) {
93
+ StringBuilder sb = new StringBuilder ();
94
+ for (int i = 0 ; i < 10 ; ++i ) {
95
+ sb .append ((char ) ('A' + (rnd .nextInt () & 0xF )));
96
+ }
97
+ return sb .toString ();
98
+ }
17
99
18
100
// [dataformats-text#191]: IndexArrayOutOfBounds at 4000
19
101
public void testBigCsvFile () throws Exception
20
102
{
103
+ final String COL_1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
104
+ final String COL_2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ;
21
105
CsvSchema schema = CsvSchema
22
106
.emptySchema ()
23
107
.withHeader ()
@@ -26,7 +110,7 @@ public void testBigCsvFile() throws Exception
26
110
.withComments ();
27
111
28
112
try (Reader r = new StringReader (_generate4kDoc ())) {
29
- List <Map <String , String >> result = new CsvMapper ()
113
+ List <Map <String , String >> result = MAPPER
30
114
.readerFor (Map .class )
31
115
.with (schema )
32
116
.<Map <String , String >>readValues (r )
0 commit comments