@@ -7,6 +7,7 @@ interface CSVParserTest {
77 headers ?: Array < string > ;
88 chunks : Array < string > ;
99 expected : Array < Record < string , string > > ;
10+ expectedHeaders ?: Array < string > ;
1011}
1112
1213describe ( 'SimpleCSVParser' , ( ) => {
@@ -105,17 +106,50 @@ describe('SimpleCSVParser', () => {
105106 { a : '5' , b : '6' , c : '7' , d : '8' } ,
106107 ] ,
107108 } ,
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 > > = [ ] ;
110139
111- const parser = new CSVParser ( ( data ) => results . push ( data ) , headers ) ;
140+ const parser = new CSVParser ( ( data ) => results . push ( data ) , headers ) ;
112141
113- for ( const chunk of chunks ) {
114- parser . process ( chunk ) ;
115- }
142+ for ( const chunk of chunks ) {
143+ parser . process ( chunk ) ;
144+ }
116145
117- parser . flush ( ) ;
146+ parser . flush ( ) ;
118147
119- expect ( results ) . toEqual ( expected ) ;
120- } ) ;
148+ expect ( results ) . toEqual ( expected ) ;
149+
150+ if ( expectedHeaders ) {
151+ expect ( parser . headers ( ) ) . toEqual ( expectedHeaders ) ;
152+ }
153+ } ,
154+ ) ;
121155} ) ;
0 commit comments