4
4
using Newtonsoft . Json . Linq ;
5
5
using NUnit . Framework ;
6
6
7
-
8
7
namespace Frends . Csv . Tests
9
8
{
10
9
[ TestFixture ]
@@ -18,18 +17,19 @@ public void TestParseSkipRowsWithAutomaticHeaders()
18
17
year;car;mark;price
19
18
1997;Ford;E350;2,34
20
19
2000;Mercury;Cougar;2,38" ;
21
- var result = Csv . Parse ( new ParseInput ( ) {
20
+ var result = Csv . Parse ( new ParseInput ( )
21
+ {
22
22
ColumnSpecifications = new ColumnSpecification [ 0 ] ,
23
23
Delimiter = ";" ,
24
24
Csv = csv
25
- } , new ParseOption ( ) { ContainsHeaderRow = true , SkipRowsFromTop = 2 , SkipEmptyRows = false } ) ;
25
+ } , new ParseOption ( ) { ContainsHeaderRow = true , SkipRowsFromTop = 2 , SkipEmptyRows = false } ) ;
26
26
27
27
dynamic resultJArray = result . ToJson ( ) ;
28
28
var resultXml = result . ToXml ( ) ;
29
29
var resultData = result . Data ;
30
30
Assert . That ( resultData . Count , Is . EqualTo ( 2 ) ) ;
31
31
Assert . That ( resultJArray . Count , Is . EqualTo ( 2 ) ) ;
32
- Assert . That ( resultXml , Does . Contain ( "<year>2000</year>" ) ) ;
32
+ Assert . That ( resultXml , Does . Contain ( "<year>2000</year>" ) ) ;
33
33
Assert . That ( resultJArray [ 0 ] . price . ToString ( ) , Is . EqualTo ( "2,34" ) ) ;
34
34
}
35
35
@@ -41,20 +41,21 @@ public void TestParseWithColumnSpecAndMissingHeader()
41
41
42
42
var result = Csv . Parse ( new ParseInput ( )
43
43
{
44
- ColumnSpecifications = new [ ]
44
+ ColumnSpecifications = new [ ]
45
45
{
46
46
new ColumnSpecification ( ) { Name = "Year" , Type = ColumnType . Int } ,
47
47
new ColumnSpecification ( ) { Name = "Car" , Type = ColumnType . String } ,
48
48
new ColumnSpecification ( ) { Name = "Mark" , Type = ColumnType . String } ,
49
49
new ColumnSpecification ( ) { Name = "Price" , Type = ColumnType . Decimal }
50
50
} ,
51
- Delimiter = ";" , Csv = csv
52
- } , new ParseOption ( ) { ContainsHeaderRow = false , CultureInfo = "fi-FI" } ) ;
51
+ Delimiter = ";" ,
52
+ Csv = csv
53
+ } , new ParseOption ( ) { ContainsHeaderRow = false , CultureInfo = "fi-FI" } ) ;
53
54
var resultJArray = result . ToJson ( ) as JArray ;
54
55
var resultXml = result . ToXml ( ) ;
55
56
var resultData = result . Data ;
56
57
Assert . That ( resultData . Count , Is . EqualTo ( 2 ) ) ;
57
- Assert . That ( resultJArray . Count , Is . EqualTo ( 2 ) ) ;
58
+ Assert . That ( resultJArray . Count , Is . EqualTo ( 2 ) ) ;
58
59
Assert . That ( resultXml , Does . Contain ( "<Year>2000</Year>" ) ) ;
59
60
Assert . That ( resultJArray [ 0 ] [ "Price" ] . Value < decimal > ( ) , Is . EqualTo ( 2.34 ) ) ;
60
61
}
@@ -105,14 +106,14 @@ public void TestParseWillAllKindOfDataTypes()
105
106
Delimiter = ";" ,
106
107
Csv = csv
107
108
} , new ParseOption ( ) { ContainsHeaderRow = true , CultureInfo = "fi-FI" } ) ;
108
- var resultJson = ( JArray ) result . ToJson ( ) ;
109
+ var resultJson = ( JArray ) result . ToJson ( ) ;
109
110
Assert . That ( resultJson [ 0 ] [ "Long" ] . Value < long > ( ) , Is . EqualTo ( 4294967296 ) ) ;
110
111
var resultXml = result . ToXml ( ) ;
111
112
Assert . That ( resultXml , Does . Contain ( "<DateTime2>1.5.2008 10.34.42</DateTime2>" ) ) ;
112
113
var resultData = result . Data ;
113
114
var itemArray = resultData [ 0 ] ;
114
115
Assert . That ( itemArray [ 0 ] . GetType ( ) , Is . EqualTo ( typeof ( int ) ) ) ;
115
- Assert . That ( itemArray [ 0 ] , Is . EqualTo ( 1997 ) ) ;
116
+ Assert . That ( itemArray [ 0 ] , Is . EqualTo ( 1997 ) ) ;
116
117
117
118
Assert . That ( itemArray [ 1 ] . GetType ( ) , Is . EqualTo ( typeof ( string ) ) ) ;
118
119
Assert . That ( itemArray [ 1 ] , Is . EqualTo ( "Fo;rd" ) ) ;
@@ -133,13 +134,67 @@ public void TestParseWillAllKindOfDataTypes()
133
134
Assert . That ( itemArray [ 6 ] , Is . EqualTo ( 'f' ) ) ;
134
135
135
136
Assert . That ( itemArray [ 7 ] . GetType ( ) , Is . EqualTo ( typeof ( DateTime ) ) ) ;
136
- Assert . That ( itemArray [ 7 ] , Is . EqualTo ( new DateTime ( 2008 , 9 , 15 ) ) ) ;
137
+ Assert . That ( itemArray [ 7 ] , Is . EqualTo ( new DateTime ( 2008 , 9 , 15 ) ) ) ;
137
138
138
139
Assert . That ( itemArray [ 8 ] . GetType ( ) , Is . EqualTo ( typeof ( DateTime ) ) ) ;
139
- Assert . That ( itemArray [ 8 ] , Is . EqualTo ( new DateTime ( 2008 , 5 , 1 , 10 , 34 , 42 ) ) ) ;
140
+ Assert . That ( itemArray [ 8 ] , Is . EqualTo ( new DateTime ( 2008 , 5 , 1 , 10 , 34 , 42 ) ) ) ;
141
+ }
142
+
143
+ [ Test ]
144
+ public void TestParseTreatMissingFieldsAsNullSetToTrue ( )
145
+ {
146
+ var csv =
147
+ @"header1,header2,header3
148
+ value1,value2,value3
149
+ value1,value2,value3
150
+ value1,value2" ;
151
+
152
+ var result = Csv . Parse ( new ParseInput ( )
153
+ {
154
+ ColumnSpecifications = new ColumnSpecification [ 0 ] ,
155
+ Delimiter = "," ,
156
+ Csv = csv
157
+ } , new ParseOption ( ) { ContainsHeaderRow = true , CultureInfo = "fi-FI" , TreatMissingFieldsAsNulls = true } ) ;
158
+ var resultJson = ( JArray ) result . ToJson ( ) ;
159
+ Assert . That ( resultJson [ 2 ] . Value < string > ( "header3" ) , Is . EqualTo ( null ) ) ;
160
+
161
+ var resultXml = result . ToXml ( ) ;
162
+ Assert . That ( resultXml , Does . Contain ( "<header3 />" ) ) ;
163
+
164
+ var resultData = result . Data ;
165
+ var nullItem = resultData [ 2 ] [ 2 ] ;
166
+
167
+ Assert . That ( nullItem , Is . EqualTo ( null ) ) ;
140
168
}
141
169
170
+ [ Test ]
171
+ public void TestParseTreatMissingFieldsAsNullSetToFalse ( )
172
+ {
173
+ Assert . Throws < CsvHelper . MissingFieldException > (
174
+ delegate
175
+ {
176
+ var csv =
177
+ @"header1,header2,header3
178
+ value1,value2,value3
179
+ value1,value2,value3
180
+ value1,value2" ;
181
+
182
+ var result = Csv . Parse ( new ParseInput ( )
183
+ {
184
+ ColumnSpecifications = new ColumnSpecification [ 0 ] ,
185
+ Delimiter = "," ,
186
+ Csv = csv
187
+ } , new ParseOption ( ) { ContainsHeaderRow = true , CultureInfo = "fi-FI" , TreatMissingFieldsAsNulls = false } ) ;
188
+ } ) ;
189
+ }
190
+
191
+ [ Test ]
192
+ public void TestParseTreatMissingFieldsAsNullDefaultValue ( )
193
+ {
194
+ var options = new ParseOption ( ) ;
142
195
196
+ Assert . That ( options . TreatMissingFieldsAsNulls , Is . EqualTo ( false ) ) ;
197
+ }
143
198
144
199
[ Test ]
145
200
public void TestWriteFromListTable ( )
@@ -161,7 +216,7 @@ public void TestWriteFromListTable()
161
216
new List < object > ( ) { 100 , "Dilantin" , "Melanie" , date }
162
217
} ;
163
218
164
- var result = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . List , Delimiter = ";" , Data = data , Headers = headers } , new CreateOption ( ) { CultureInfo = "fi-FI" } ) ;
219
+ var result = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . List , Delimiter = ";" , Data = data , Headers = headers } , new CreateOption ( ) { CultureInfo = "fi-FI" } ) ;
165
220
Assert . That ( result . Csv ,
166
221
Is . EqualTo (
167
222
@"Dosage;Drug;Patient;Date
@@ -173,12 +228,11 @@ public void TestWriteFromListTable()
173
228
" ) ) ;
174
229
}
175
230
176
-
177
231
[ Test ]
178
232
public void TestWriteFromJson ( )
179
233
{
180
234
var json = @"[{""cool"":""nice"", ""what"": ""no""}, {""cool"":""not"", ""what"": ""yes""}, {""cool"":""maybe"", ""what"": ""never""}]" ;
181
- var result = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . Json , Delimiter = ";" , Json = json } , new CreateOption ( ) ) ;
235
+ var result = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . Json , Delimiter = ";" , Json = json } , new CreateOption ( ) ) ;
182
236
Assert . That ( result . Csv ,
183
237
Is . EqualTo ( @"cool;what
184
238
nice;no
@@ -211,19 +265,11 @@ public void TestNoQuotesOption()
211
265
"" Normally I would have quotes "";I would not
212
266
" ) ) ;
213
267
214
-
215
268
var result1 = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . Json , Delimiter = ";" , Json = json } , new CreateOption ( ) { NeverAddQuotesAroundValues = true } ) ;
216
269
Assert . That ( result1 . Csv ,
217
270
Is . EqualTo ( @"foo;bar
218
271
Normally I would have quotes ;I would not
219
272
" ) ) ;
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
273
}
228
274
229
275
[ Test ]
@@ -254,10 +300,11 @@ public void TestDecimalValues()
254
300
0.1;1.00;0.000000000000000000000000000000000000000000000000000000001
255
301
" ) ) ;
256
302
}
303
+
257
304
[ Test ]
258
305
public void ParseAndWriteShouldUseSeparateCultures ( )
259
306
{
260
- var csv =
307
+ var csv =
261
308
@"First; Second; Number; Date
262
309
Foo; bar; 100; 2000-01-01" ;
263
310
@@ -272,7 +319,7 @@ public void ParseAndWriteShouldUseSeparateCultures()
272
319
} ,
273
320
Delimiter = ";" ,
274
321
Csv = csv
275
- } , new ParseOption ( ) { ContainsHeaderRow = true , CultureInfo = "en-us" } ) ;
322
+ } , new ParseOption ( ) { ContainsHeaderRow = true , CultureInfo = "en-us" } ) ;
276
323
277
324
var result = Csv . Create ( new CreateInput ( ) { InputType = CreateInputType . List , Delimiter = ";" , Data = parseResult . Data , Headers = parseResult . Headers } , new CreateOption ( ) { CultureInfo = "fi-FI" } ) ;
278
325
@@ -305,7 +352,6 @@ public void TestParseRowsWithAutomaticHeadersWhiteSpaceRemovalDefault()
305
352
Assert . That ( resultJArray [ 0 ] . price . ToString ( ) , Is . EqualTo ( "2,34" ) ) ;
306
353
}
307
354
308
-
309
355
[ Test ]
310
356
public void TestParseRowsWithAutomaticHeadersWhiteSpaceRemovalGiven ( )
311
357
{
@@ -328,9 +374,5 @@ public void TestParseRowsWithAutomaticHeadersWhiteSpaceRemovalGiven()
328
374
Assert . That ( resultXml , Does . Contain ( "<year_of_the_z>" ) ) ;
329
375
Assert . That ( resultJArray [ 0 ] . price . ToString ( ) , Is . EqualTo ( "2,34" ) ) ;
330
376
}
331
-
332
-
333
-
334
377
}
335
- }
336
-
378
+ }
0 commit comments