@@ -82,6 +82,15 @@ public void TestGeneric()
8282 Assert . IsTrue ( csv . Trim ( ) == "sep=,\r \n Id,Name\r \n 123,Ffff\r \n 321,ddd" , csv ) ;
8383 }
8484
85+ [ TestMethod ]
86+ public void TestEmpty ( )
87+ {
88+ var myExport = new CsvExport ( ) ;
89+ string csv = myExport . Export ( ) ;
90+
91+ Assert . IsTrue ( csv . Trim ( ) == "sep=," , csv ) ;
92+ }
93+
8594 [ TestMethod ]
8695 public void WriteToFile ( )
8796 {
@@ -104,11 +113,130 @@ public void WriteToFile()
104113
105114 File . Delete ( filePath ) ;
106115 }
116+
117+ [ TestMethod ]
118+ public void TestConstructorParameters ( )
119+ {
120+ // Test custom separator
121+ var export1 = new CsvExport ( ";" ) ;
122+ export1 . AddRow ( ) ;
123+ export1 [ "Name" ] = "John" ;
124+ export1 [ "Value" ] = "Test;Data" ;
125+ string result1 = export1 . Export ( ) ;
126+ Assert . IsTrue ( result1 . Contains ( "sep=;" ) ) ;
127+ Assert . IsTrue ( result1 . Contains ( "Name;Value" ) ) ;
128+ Assert . IsTrue ( result1 . Contains ( "\" Test;Data\" " ) ) ;
129+
130+ // Test no preamble
131+ var export2 = new CsvExport ( "," , false ) ;
132+ export2 . AddRow ( ) ;
133+ export2 [ "Name" ] = "John" ;
134+ string result2 = export2 . Export ( ) ;
135+ Assert . IsFalse ( result2 . Contains ( "sep=" ) ) ;
136+ Assert . IsTrue ( result2 . StartsWith ( "Name\r \n " ) ) ;
137+
138+ // Test no header
139+ var export3 = new CsvExport ( "," , true , false ) ;
140+ export3 . AddRow ( ) ;
141+ export3 [ "Name" ] = "John" ;
142+ string result3 = export3 . Export ( ) ;
143+ Assert . IsTrue ( result3 . Contains ( "sep=" ) ) ;
144+ Assert . IsFalse ( result3 . Contains ( "Name\r \n " ) ) ;
145+ Assert . IsTrue ( result3 . Contains ( "John" ) ) ;
146+ }
147+
148+ [ TestMethod ]
149+ public void TestNullValues ( )
150+ {
151+ var myExport = new CsvExport ( ) ;
152+ myExport . AddRow ( ) ;
153+ myExport [ "Name" ] = "John" ;
154+ myExport [ "Value" ] = null ;
155+ myExport [ "Number" ] = 123 ;
156+
157+ string csv = myExport . Export ( ) ;
158+ Assert . IsTrue ( csv . Contains ( "John,,123" ) ) ;
159+ }
160+
161+ [ TestMethod ]
162+ public void TestSpecialCharacters ( )
163+ {
164+ var myExport = new CsvExport ( ) ;
165+ myExport . AddRow ( ) ;
166+ myExport [ "Newline" ] = "Line1\n Line2" ;
167+ myExport [ "CarriageReturn" ] = "Text1\r Text2" ;
168+ myExport [ "Both" ] = "Start\r \n End" ;
169+
170+ string csv = myExport . Export ( ) ;
171+ Assert . IsTrue ( csv . Contains ( "\" Line1\n Line2\" " ) ) ;
172+ Assert . IsTrue ( csv . Contains ( "\" Text1\r Text2\" " ) ) ;
173+ Assert . IsTrue ( csv . Contains ( "\" Start\r \n End\" " ) ) ;
174+ }
175+
176+ [ TestMethod ]
177+ public void TestLargeDataTruncation ( )
178+ {
179+ var myExport = new CsvExport ( ) ;
180+ myExport . AddRow ( ) ;
181+ // Create a string longer than 30000 characters
182+ string largeText = new string ( 'A' , 35000 ) ;
183+ myExport [ "LargeText" ] = largeText ;
184+
185+ string csv = myExport . Export ( ) ;
186+ // Should be truncated to 30000 characters
187+ Assert . IsTrue ( csv . Contains ( new string ( 'A' , 30000 ) ) ) ;
188+ Assert . IsFalse ( csv . Contains ( new string ( 'A' , 30001 ) ) ) ;
189+ }
190+
191+ [ TestMethod ]
192+ public void TestSetValueWithoutAddRow ( )
193+ {
194+ var myExport = new CsvExport ( ) ;
195+ // Setting value without calling AddRow first should be ignored
196+ myExport [ "Name" ] = "Should be ignored" ;
197+
198+ myExport . AddRow ( ) ;
199+ myExport [ "Name" ] = "John" ;
200+
201+ string csv = myExport . Export ( ) ;
202+ Assert . IsFalse ( csv . Contains ( "Should be ignored" ) ) ;
203+ Assert . IsTrue ( csv . Contains ( "John" ) ) ;
204+ }
205+
206+ [ TestMethod ]
207+ public void TestDifferentDataTypes ( )
208+ {
209+ var myExport = new CsvExport ( ) ;
210+ myExport . AddRow ( ) ;
211+ myExport [ "Bool" ] = true ;
212+ myExport [ "Decimal" ] = 123.45m ;
213+ myExport [ "Double" ] = 67.89 ;
214+ myExport [ "Float" ] = 12.34f ;
215+ myExport [ "Long" ] = 9876543210L ;
216+
217+ string csv = myExport . Export ( ) ;
218+ Assert . IsTrue ( csv . Contains ( "True" ) ) ;
219+ Assert . IsTrue ( csv . Contains ( "123.45" ) ) ;
220+ Assert . IsTrue ( csv . Contains ( "67.89" ) ) ;
221+ Assert . IsTrue ( csv . Contains ( "12.34" ) ) ;
222+ Assert . IsTrue ( csv . Contains ( "9876543210" ) ) ;
223+ }
224+
225+ [ TestMethod ]
226+ public void TestEmptyGenericCollection ( )
227+ {
228+ List < MyClass > emptyList = new ( ) ;
229+ var myExport = new CsvExport ( ) ;
230+ myExport . AddRows ( emptyList ) ;
231+
232+ string csv = myExport . Export ( ) ;
233+ Assert . AreEqual ( "sep=," , csv . Trim ( ) ) ;
234+ }
107235 }
108236
109237 public class MyClass
110238 {
111239 public int Id { get ; set ; }
112- public string Name { get ; set ; }
240+ public string Name { get ; set ; } = string . Empty ;
113241 }
114242}
0 commit comments