Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 629265a

Browse files
committed
Fix csv Tests on Linux
According to RFC 4180 https://www.ietf.org/rfc/rfc4180.txt CSV line must ends with CRLF Previous versions of CSV serializer generated CSV using Environment.NewLine which differs on Windows/Linux/Mac platforms. This commit changes default CSV line ending to CRLF and fixes the tests for Linux/Mac platform.
1 parent c2f3313 commit 629265a

File tree

5 files changed

+83
-165
lines changed

5 files changed

+83
-165
lines changed

src/ServiceStack.Text/CsvConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static string RowSeparatorString
107107
{
108108
get
109109
{
110-
return tsRowSeparatorString ?? sRowSeparatorString ?? Environment.NewLine;
110+
return tsRowSeparatorString ?? sRowSeparatorString ?? "\r\n";
111111
}
112112
set
113113
{

tests/ServiceStack.Text.Tests/CsvStreamTests.cs

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,9 @@ public void Can_create_csv_from_Categories()
6666
var csv = CsvSerializer.SerializeToCsv(categories);
6767
Log(csv);
6868
Assert.That(csv, Is.EqualTo(
69-
"Id,CategoryName,Description,Picture"
70-
+ Environment.NewLine
71-
+ "1,\"between \"\"quotes\"\" here\",\"with, comma\","
72-
+ Environment.NewLine
73-
+ "1,\"between \"\"quotes\"\" here\",\"with, comma\","
74-
+ Environment.NewLine
69+
"Id,CategoryName,Description,Picture\r\n"
70+
+ "1,\"between \"\"quotes\"\" here\",\"with, comma\",\r\n"
71+
+ "1,\"between \"\"quotes\"\" here\",\"with, comma\",\r\n"
7572
));
7673
}
7774

@@ -85,12 +82,9 @@ public void Can_create_csv_from_Categories_pipe_separator()
8582
var csv = CsvSerializer.SerializeToCsv(categories);
8683
Log(csv);
8784
Assert.That(csv, Is.EqualTo(
88-
"Id|CategoryName|Description|Picture"
89-
+ Environment.NewLine
90-
+ "1|\"between \"\"quotes\"\" here\"|with, comma|"
91-
+ Environment.NewLine
92-
+ "1|\"between \"\"quotes\"\" here\"|with, comma|"
93-
+ Environment.NewLine
85+
"Id|CategoryName|Description|Picture\r\n"
86+
+ "1|\"between \"\"quotes\"\" here\"|with, comma|\r\n"
87+
+ "1|\"between \"\"quotes\"\" here\"|with, comma|\r\n"
9488
));
9589
}
9690

@@ -104,12 +98,9 @@ public void Can_create_csv_from_Categories_pipe_delimiter()
10498
var csv = CsvSerializer.SerializeToCsv(categories);
10599
Log(csv);
106100
Assert.That(csv, Is.EqualTo(
107-
"Id,CategoryName,Description,Picture"
108-
+ Environment.NewLine
109-
+ "1,between \"quotes\" here,|with, comma|,"
110-
+ Environment.NewLine
111-
+ "1,between \"quotes\" here,|with, comma|,"
112-
+ Environment.NewLine
101+
"Id,CategoryName,Description,Picture\r\n"
102+
+ "1,between \"quotes\" here,|with, comma|,\r\n"
103+
+ "1,between \"quotes\" here,|with, comma|,\r\n"
113104
));
114105
}
115106

@@ -123,12 +114,9 @@ public void Can_create_csv_from_Categories_long_delimiter()
123114
var csv = CsvSerializer.SerializeToCsv(categories);
124115
Log(csv);
125116
Assert.That(csv, Is.EqualTo(
126-
"Id,CategoryName,Description,Picture"
127-
+ Environment.NewLine
128-
+ "1,between \"quotes\" here,~^~with, comma~^~,"
129-
+ Environment.NewLine
130-
+ "1,between \"quotes\" here,~^~with, comma~^~,"
131-
+ Environment.NewLine
117+
"Id,CategoryName,Description,Picture\r\n"
118+
+ "1,between \"quotes\" here,~^~with, comma~^~,\r\n"
119+
+ "1,between \"quotes\" here,~^~with, comma~^~,\r\n"
132120
));
133121
}
134122

@@ -139,8 +127,7 @@ public void Can_generate_csv_with_invalid_chars()
139127
var csv = CsvSerializer.SerializeToCsv(fields);
140128
Log(csv);
141129
Assert.That(csv, Is.EqualTo(
142-
"1,2,\"3\"\"\",4,\"5\"\"five,six\"\"\",\"7,7.1\",\"\"\"7,7.1\"\"\",8"
143-
+ Environment.NewLine
130+
"1,2,\"3\"\"\",4,\"5\"\"five,six\"\"\",\"7,7.1\",\"\"\"7,7.1\"\"\",8\r\n"
144131
));
145132
}
146133

@@ -152,8 +139,7 @@ public void Can_generate_csv_with_invalid_chars_pipe_delimiter()
152139
var csv = CsvSerializer.SerializeToCsv(fields);
153140
Log(csv);
154141
Assert.That(csv, Is.EqualTo(
155-
"1,2,3\",4,|5\"five,six\"|,|7,7.1|,|\"7,7.1\"|,8"
156-
+ Environment.NewLine
142+
"1,2,3\",4,|5\"five,six\"|,|7,7.1|,|\"7,7.1\"|,8\r\n"
157143
));
158144
}
159145

@@ -165,8 +151,7 @@ public void Can_generate_csv_with_invalid_chars_pipe_separator()
165151
var csv = CsvSerializer.SerializeToCsv(fields);
166152
Log(csv);
167153
Assert.That(csv, Is.EqualTo(
168-
"1|2|\"3\"\"\"|4|\"5\"\"five,six\"\"\"|7,7.1|\"\"\"7,7.1\"\"\"|8"
169-
+ Environment.NewLine
154+
"1|2|\"3\"\"\"|4|\"5\"\"five,six\"\"\"|7,7.1|\"\"\"7,7.1\"\"\"|8\r\n"
170155
));
171156
}
172157

tests/ServiceStack.Text.Tests/CsvTests/CustomHeaderTests.cs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,9 @@ public void Can_serialize_custom_headers_map()
3434
Console.WriteLine(csv);
3535

3636
Assert.That(csv, Is.EqualTo(
37-
"Column 1,Column 2,\"Column,3\",\"Column\n4\",Column 5"
38-
+ Environment.NewLine
39-
+ "I,Like,To,Read,Novels"
40-
+ Environment.NewLine
41-
+ "I am,Very,Cool,And,Awesome"
42-
+ Environment.NewLine
37+
"Column 1,Column 2,\"Column,3\",\"Column\n4\",Column 5\r\n"
38+
+ "I,Like,To,Read,Novels\r\n"
39+
+ "I am,Very,Cool,And,Awesome\r\n"
4340
));
4441
}
4542

@@ -63,12 +60,9 @@ public void Can_serialize_custom_anonymous_type_headers()
6360
Console.WriteLine(csv);
6461

6562
Assert.That(csv, Is.EqualTo(
66-
"Column 1,Column 2,\"Column,3\",\"Column\n4\",Column 5"
67-
+ Environment.NewLine
68-
+ "I,Like,To,Read,Novels"
69-
+ Environment.NewLine
70-
+ "I am,Very,Cool,And,Awesome"
71-
+ Environment.NewLine
63+
"Column 1,Column 2,\"Column,3\",\"Column\n4\",Column 5\r\n"
64+
+ "I,Like,To,Read,Novels\r\n"
65+
+ "I am,Very,Cool,And,Awesome\r\n"
7266
));
7367
}
7468

@@ -90,12 +84,9 @@ public void Can_serialize_partial_custom_headers_map()
9084
Console.WriteLine(csv);
9185

9286
Assert.That(csv, Is.EqualTo(
93-
"Column 1,\"Column,3\",Column 5"
94-
+ Environment.NewLine
95-
+ "I,To,Novels"
96-
+ Environment.NewLine
97-
+ "I am,Cool,Awesome"
98-
+ Environment.NewLine
87+
"Column 1,\"Column,3\",Column 5\r\n"
88+
+ "I,To,Novels\r\n"
89+
+ "I am,Cool,Awesome\r\n"
9990
));
10091
}
10192

@@ -121,10 +112,8 @@ public void Can_serialize_without_headers()
121112
Console.WriteLine(csv);
122113

123114
Assert.That(csv, Is.EqualTo(
124-
"I,Like,To,Read,Novels"
125-
+ Environment.NewLine
126-
+ "I am,Very,Cool,And,Awesome"
127-
+ Environment.NewLine
115+
"I,Like,To,Read,Novels\r\n"
116+
+ "I am,Very,Cool,And,Awesome\r\n"
128117
));
129118
}
130119

tests/ServiceStack.Text.Tests/CsvTests/DictionaryTests.cs

Lines changed: 35 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,13 @@ public void Serializes_dictionary_mismatched_keys_deserializes_tabular_csv()
2424
Console.WriteLine(csv);
2525

2626
Assert.That(csv, Is.EqualTo(
27-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
28-
+ Environment.NewLine
29-
+ ",Like,To,Read,Novels"
30-
+ Environment.NewLine
31-
+ "I am,,Cool,And,Awesome"
32-
+ Environment.NewLine
33-
+ "I, Like ,,,"
34-
+ Environment.NewLine
35-
+ "I,Don't,\"Know,\",,You?"
36-
+ Environment.NewLine
37-
+ "I,Saw,The,Movie,"
38-
+ Environment.NewLine
39-
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\""
40-
+ Environment.NewLine
27+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
28+
+ ",Like,To,Read,Novels\r\n"
29+
+ "I am,,Cool,And,Awesome\r\n"
30+
+ "I, Like ,,,\r\n"
31+
+ "I,Don't,\"Know,\",,You?\r\n"
32+
+ "I,Saw,The,Movie,\r\n"
33+
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\"\r\n"
4134
));
4235
}
4336

@@ -57,20 +50,13 @@ public void Serializes_dictionary_data()
5750
Console.WriteLine(csv);
5851

5952
Assert.That(csv, Is.EqualTo(
60-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
61-
+ Environment.NewLine
62-
+ "I,Like,To,Read,Novels"
63-
+ Environment.NewLine
64-
+ "I am,Very,Cool,And,Awesome"
65-
+ Environment.NewLine
66-
+ "I, Like ,Reading,,"
67-
+ Environment.NewLine
68-
+ "I,Don't,\"Know,\",Do,You?"
69-
+ Environment.NewLine
70-
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\""
71-
+ Environment.NewLine
72-
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\""
73-
+ Environment.NewLine
53+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
54+
+ "I,Like,To,Read,Novels\r\n"
55+
+ "I am,Very,Cool,And,Awesome\r\n"
56+
+ "I, Like ,Reading,,\r\n"
57+
+ "I,Don't,\"Know,\",Do,You?\r\n"
58+
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\"\r\n"
59+
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\"\r\n"
7460
));
7561
}
7662

@@ -133,20 +119,13 @@ public void Serializes_dictionary_object_data()
133119
Console.WriteLine(csv);
134120

135121
Assert.That(csv, Is.EqualTo(
136-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
137-
+ Environment.NewLine
138-
+ "I,Like,To,Read,123"
139-
+ Environment.NewLine
140-
+ "I am,Very,Cool,And,4"
141-
+ Environment.NewLine
142-
+ "I, Like ,2,,"
143-
+ Environment.NewLine
144-
+ "I,Don't,\"Know,\",Do,You?"
145-
+ Environment.NewLine
146-
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\""
147-
+ Environment.NewLine
148-
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\""
149-
+ Environment.NewLine
122+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
123+
+ "I,Like,To,Read,123\r\n"
124+
+ "I am,Very,Cool,And,4\r\n"
125+
+ "I, Like ,2,,\r\n"
126+
+ "I,Don't,\"Know,\",Do,You?\r\n"
127+
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\"\r\n"
128+
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\"\r\n"
150129
));
151130
}
152131

@@ -173,20 +152,13 @@ public void Serializes_dictionary_data_long_delimiter()
173152
Console.WriteLine(csv);
174153

175154
Assert.That(csv, Is.EqualTo(
176-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
177-
+ Environment.NewLine
178-
+ "I,Like,To,Read,Novels"
179-
+ Environment.NewLine
180-
+ "I am,Very,Cool,And,Awesome"
181-
+ Environment.NewLine
182-
+ "I, Like ,Reading,,"
183-
+ Environment.NewLine
184-
+ "I,Don't,^~^Know,^~^,Do,You?"
185-
+ Environment.NewLine
186-
+ "I,Saw,The,Movie,\"Jaws\""
187-
+ Environment.NewLine
188-
+ "I,Went,To,^~^Space\nCamp^~^,^~^Last\r\nYear^~^"
189-
+ Environment.NewLine
155+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
156+
+ "I,Like,To,Read,Novels\r\n"
157+
+ "I am,Very,Cool,And,Awesome\r\n"
158+
+ "I, Like ,Reading,,\r\n"
159+
+ "I,Don't,^~^Know,^~^,Do,You?\r\n"
160+
+ "I,Saw,The,Movie,\"Jaws\"\r\n"
161+
+ "I,Went,To,^~^Space\nCamp^~^,^~^Last\r\nYear^~^\r\n"
190162
));
191163
}
192164

@@ -207,20 +179,13 @@ public void Serializes_dictionary_data_pipe_separator()
207179
Console.WriteLine(csv);
208180

209181
Assert.That(csv, Is.EqualTo(
210-
"Column1Data|Column2Data|Column3Data|Column4Data|Column5Data"
211-
+ Environment.NewLine
212-
+ "I|Like|To|Read|Novels"
213-
+ Environment.NewLine
214-
+ "I am|Very|Cool|And|Awesome"
215-
+ Environment.NewLine
216-
+ "I| Like |Reading||"
217-
+ Environment.NewLine
218-
+ "I|Don't|Know,|Do|You?"
219-
+ Environment.NewLine
220-
+ "I|Saw|The|Movie|\"\"\"Jaws\"\"\""
221-
+ Environment.NewLine
222-
+ "I|Went|To|\"Space\nCamp\"|\"Last\r\nYear\""
223-
+ Environment.NewLine
182+
"Column1Data|Column2Data|Column3Data|Column4Data|Column5Data\r\n"
183+
+ "I|Like|To|Read|Novels\r\n"
184+
+ "I am|Very|Cool|And|Awesome\r\n"
185+
+ "I| Like |Reading||\r\n"
186+
+ "I|Don't|Know,|Do|You?\r\n"
187+
+ "I|Saw|The|Movie|\"\"\"Jaws\"\"\"\r\n"
188+
+ "I|Went|To|\"Space\nCamp\"|\"Last\r\nYear\"\r\n"
224189
));
225190
}
226191
}

tests/ServiceStack.Text.Tests/CsvTests/NewLineTests.cs

Lines changed: 21 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,13 @@ public void Serializes_adhoc_data()
2424
Console.WriteLine(csv);
2525

2626
Assert.That(csv, Is.EqualTo(
27-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
28-
+ Environment.NewLine
29-
+ "I,Like,To,Read,Novels"
30-
+ Environment.NewLine
31-
+ "I am,Very,Cool,And,Awesome"
32-
+ Environment.NewLine
33-
+ "I, Like ,Reading,,"
34-
+ Environment.NewLine
35-
+ "I,Don't,\"Know,\",Do,You?"
36-
+ Environment.NewLine
37-
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\""
38-
+ Environment.NewLine
39-
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\""
40-
+ Environment.NewLine
27+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
28+
+ "I,Like,To,Read,Novels\r\n"
29+
+ "I am,Very,Cool,And,Awesome\r\n"
30+
+ "I, Like ,Reading,,\r\n"
31+
+ "I,Don't,\"Know,\",Do,You?\r\n"
32+
+ "I,Saw,The,Movie,\"\"\"Jaws\"\"\"\r\n"
33+
+ "I,Went,To,\"Space\nCamp\",\"Last\r\nYear\"\r\n"
4134
));
4235
}
4336
[TearDown]
@@ -63,20 +56,13 @@ public void Serializes_adhoc_data_pipe_separator()
6356
Console.WriteLine(csv);
6457

6558
Assert.That(csv, Is.EqualTo(
66-
"Column1Data|Column2Data|Column3Data|Column4Data|Column5Data"
67-
+ Environment.NewLine
68-
+ "I|Like|To|Read|Novels"
69-
+ Environment.NewLine
70-
+ "I am|Very|Cool|And|Awesome"
71-
+ Environment.NewLine
72-
+ "I| Like |Reading||"
73-
+ Environment.NewLine
74-
+ "I|Don't|Know,|Do|You?"
75-
+ Environment.NewLine
76-
+ "I|Saw|The|Movie|\"\"\"Jaws\"\"\""
77-
+ Environment.NewLine
78-
+ "I|Went|To|\"Space\nCamp\"|\"Last\r\nYear\""
79-
+ Environment.NewLine
59+
"Column1Data|Column2Data|Column3Data|Column4Data|Column5Data\r\n"
60+
+ "I|Like|To|Read|Novels\r\n"
61+
+ "I am|Very|Cool|And|Awesome\r\n"
62+
+ "I| Like |Reading||\r\n"
63+
+ "I|Don't|Know,|Do|You?\r\n"
64+
+ "I|Saw|The|Movie|\"\"\"Jaws\"\"\"\r\n"
65+
+ "I|Went|To|\"Space\nCamp\"|\"Last\r\nYear\"\r\n"
8066
));
8167
}
8268

@@ -97,20 +83,13 @@ public void Serializes_adhoc_data_pipe_delimiter()
9783
Console.WriteLine(csv);
9884

9985
Assert.That(csv, Is.EqualTo(
100-
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data"
101-
+ Environment.NewLine
102-
+ "I,Like,To,Read,Novels"
103-
+ Environment.NewLine
104-
+ "I am,Very,Cool,And,Awesome"
105-
+ Environment.NewLine
106-
+ "I, Like ,Reading,,"
107-
+ Environment.NewLine
108-
+ "I,Don't,|Know,|,Do,You?"
109-
+ Environment.NewLine
110-
+ "I,Saw,The,Movie,\"Jaws\""
111-
+ Environment.NewLine
112-
+ "I,Went,To,|Space\nCamp|,|Last\r\nYear|"
113-
+ Environment.NewLine
86+
"Column1Data,Column2Data,Column3Data,Column4Data,Column5Data\r\n"
87+
+ "I,Like,To,Read,Novels\r\n"
88+
+ "I am,Very,Cool,And,Awesome\r\n"
89+
+ "I, Like ,Reading,,\r\n"
90+
+ "I,Don't,|Know,|,Do,You?\r\n"
91+
+ "I,Saw,The,Movie,\"Jaws\"\r\n"
92+
+ "I,Went,To,|Space\nCamp|,|Last\r\nYear|\r\n"
11493
));
11594
}
11695
}

0 commit comments

Comments
 (0)