@@ -7,6 +7,7 @@ interface CSVParserTest {
7
7
headers ?: Array < string > ;
8
8
chunks : Array < string > ;
9
9
expected : Array < Record < string , string > > ;
10
+ expectedHeaders ?: Array < string > ;
10
11
}
11
12
12
13
describe ( 'SimpleCSVParser' , ( ) => {
@@ -105,17 +106,50 @@ describe('SimpleCSVParser', () => {
105
106
{ a : '5' , b : '6' , c : '7' , d : '8' } ,
106
107
] ,
107
108
} ,
108
- ] ) ( '$name' , ( { chunks, expected, headers } ) => {
109
- const results : Array < Record < string , string > > = [ ] ;
109
+ {
110
+ name : 'headers no data' ,
111
+ chunks : [ 'a,b,c,d\n' ] ,
112
+ expected : [ ] ,
113
+ expectedHeaders : [ 'a' , 'b' , 'c' , 'd' ] ,
114
+ } ,
115
+ {
116
+ name : 'headers no data (no newline)' ,
117
+ chunks : [ 'a,b,c,d' ] ,
118
+ expected : [ ] ,
119
+ expectedHeaders : [ 'a' , 'b' , 'c' , 'd' ] ,
120
+ } ,
121
+ {
122
+ name : 'manually defined headers' ,
123
+ chunks : [ ] ,
124
+ expected : [ ] ,
125
+ expectedHeaders : [ 'a' , 'b' , 'c' ] ,
126
+ headers : [ 'a' , 'b' , 'c' ] ,
127
+ }
128
+ ] ) (
129
+ '$name' ,
130
+ ( {
131
+ chunks,
132
+ expected,
133
+ expectedHeaders = expected . length > 0
134
+ ? Object . keys ( expected [ 0 ] )
135
+ : undefined ,
136
+ headers,
137
+ } ) => {
138
+ const results : Array < Record < string , string > > = [ ] ;
110
139
111
- const parser = new CSVParser ( ( data ) => results . push ( data ) , headers ) ;
140
+ const parser = new CSVParser ( ( data ) => results . push ( data ) , headers ) ;
112
141
113
- for ( const chunk of chunks ) {
114
- parser . process ( chunk ) ;
115
- }
142
+ for ( const chunk of chunks ) {
143
+ parser . process ( chunk ) ;
144
+ }
116
145
117
- parser . flush ( ) ;
146
+ parser . flush ( ) ;
118
147
119
- expect ( results ) . toEqual ( expected ) ;
120
- } ) ;
148
+ expect ( results ) . toEqual ( expected ) ;
149
+
150
+ if ( expectedHeaders ) {
151
+ expect ( parser . headers ( ) ) . toEqual ( expectedHeaders ) ;
152
+ }
153
+ } ,
154
+ ) ;
121
155
} ) ;
0 commit comments