source: trunk/TestCases.pas

Last change on this file was 199, checked in by chronos, 10 days ago
  • Fixed: Handling escaped semicolon in indexed property values.
File size: 16.2 KB
Line 
1unit TestCases;
2
3interface
4
5uses
6 Classes, SysUtils, Test, TestCase;
7
8function InitTestCases: TTestCases;
9
10
11implementation
12
13uses
14 VCard, Table;
15
16const
17 VCardVersion = 'VERSION:2.1';
18 UnixLineEnding = #10;
19 MacLineEnding = #13;
20
21function BeginEnd(Text: string; WithVersion: Boolean = True): string;
22begin
23 Result := VCardBegin + VCardLineEnding;
24 if WithVersion then Result := Result + VCardVersion + VCardLineEnding;
25 Result := Result + Text + VCardEnd + VCardLineEnding;
26end;
27
28function InitTestCases: TTestCases;
29begin
30 Result := TTestCases.Create;
31 with Result do begin
32 with TTestCaseLoadSave(AddNew('Load and save', TTestCaseLoadSave)) do begin
33 Input := BeginEnd(
34 'N:Surname;Name' + VCardLineEnding +
35 'FN:Name Surname' + VCardLineEnding);
36 Output := Input;
37 end;
38 with TTestCaseLoadSave(AddNew('Long text', TTestCaseLoadSave)) do begin
39 Input := BeginEnd(
40 'NOTE:This is some long test which is really multi-lined each line is on dif' + VCardLineEnding +
41 ' ferent line so it is on multiple lines.' + VCardLineEnding +
42 VCardLineEnding);
43 Output := Input;
44 end;
45 with TTestCaseLoadSave(AddNew('Multi-line', TTestCaseLoadSave)) do begin
46 Input := BeginEnd(
47 'NOTE:First line\nsecond line\nempty line\n\nlast line' + VCardLineEnding);
48 Output := Input;
49 end;
50 with TTestCaseLoadSave(AddNew('Quoted-printable load-save', TTestCaseLoadSave)) do begin
51 Input := BeginEnd(
52 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding);
53 Output := Input;
54 end;
55 with TTestCaseLoadSave(AddNew('Quoted-printable load-save multi-line', TTestCaseLoadSave)) do begin
56 Input := BeginEnd(
57 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=ADJm=C3=A9n=' + VCardLineEnding +
58 'o=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding +
59 VCardLineEnding);
60 Output := Input;
61 end;
62 with TTestCaseLoadSave(AddNew('Base64 load-save (encoding=base64)', TTestCaseLoadSave)) do begin
63 Input := BeginEnd(
64 'FN;ENCODING=BASE64:VGVzdCBzdHJpbmc=' + VCardLineEnding);
65 Output := Input;
66 end;
67 with TTestCaseLoadSave(AddNew('Base64 load-save (base64)', TTestCaseLoadSave)) do begin
68 Input := BeginEnd(
69 'FN;BASE64:VGVzdCBzdHJpbmc=' + VCardLineEnding);
70 Output := Input;
71 end;
72 with TTestCaseLoadSave(AddNew('Base64 load-save (encoding=b)', TTestCaseLoadSave)) do begin
73 Input := BeginEnd(
74 'FN;ENCODING=B:VGVzdCBzdHJpbmc=' + VCardLineEnding);
75 Output := Input;
76 end;
77 with TTestCaseLoadSave(AddNew('Base64 load-save multi-line', TTestCaseLoadSave)) do begin
78 Input := BeginEnd(
79 'FN;ENCODING=BASE64:U29tZSB2ZXJ5IGxvbmcgc3RyaW5nIFNvbWUgdmVyeSBsb25nIHN0cmlu' + VCardLineEnding +
80 ' ZyBTb21lIHZlcnkgbG9uZyBzdHJpbmcgU29tZSB2ZXJ5IGxvbmcgc3RyaW5n' + VCardLineEnding +
81 VCardLineEnding);
82 Output := Input;
83 end;
84 //AddNew('Image format', TTestCaseLoadSave);
85 with TTestCaseLoadSave(AddNew('Empty', TTestCaseLoadSave)) do begin
86 Input := '';
87 Output := '';
88 end;
89 with TTestCaseLoadSave(AddNew('Begin only', TTestCaseLoadSave)) do begin
90 Input := VCardBegin;
91 Output := '';
92 end;
93 with TTestCaseLoadSave(AddNew('Missing end', TTestCaseLoadSave)) do begin
94 Input := VCardBegin + VCardLineEnding +
95 VCardVersion + VCardLineEnding +
96 'N:Surname;Name' + VCardLineEnding +
97 'FN:Name Surname' + VCardLineEnding;
98 Output := '';
99 end;
100 with TTestCaseLoadSave(AddNew('Missing start', TTestCaseLoadSave)) do begin
101 Input := VCardVersion + VCardLineEnding +
102 'N:Surname;Name' + VCardLineEnding +
103 'FN:Name Surname' + VCardLineEnding +
104 VCardEnd + VCardLineEnding;
105 Output := '';
106 end;
107 with TTestCasePropertyRead(AddNew('Property FN', TTestCasePropertyRead)) do begin
108 Index := cfFullName;
109 Value := 'Name Surname';
110 Input := BeginEnd('FN:' + Value + VCardLineEnding);
111 end;
112 with TTestCasePropertyRead(AddNew('Escaped new lines in text', TTestCasePropertyRead)) do begin
113 Index := cfNote;
114 Value := 'Line' + #13#10 + 'Line';
115 Input := BeginEnd('NOTE:Line\nLine' + VCardLineEnding);
116 end;
117 with TTestCasePropertyRead(AddNew('Compound value', TTestCasePropertyRead)) do begin
118 Index := cfFirstName;
119 Value := 'FirstName';
120 Input := BeginEnd('N:Surname;FirstName;;;' + VCardLineEnding);
121 end;
122 with TTestCasePropertyRead(AddNew('Escaped semicolon in name get 0', TTestCasePropertyRead)) do begin
123 Index := cfLastName;
124 Value := 'Surname;Surname';
125 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
126 end;
127 with TTestCasePropertyRead(AddNew('Escaped semicolon in name get 1', TTestCasePropertyRead)) do begin
128 Index := cfFirstName;
129 Value := 'Name;Name';
130 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
131 end;
132 with TTestCasePropertyRead(AddNew('Escaped semicolon in name get 2', TTestCasePropertyRead)) do begin
133 Index := cfMiddleName;
134 Value := '';
135 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
136 end;
137 with TTestCasePropertyWrite(AddNew('Escaped semicolon in name set 0', TTestCasePropertyWrite)) do begin
138 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
139 Index := cfLastName;
140 Value := 'Surname2;Surname2';
141 Output := BeginEnd('N:Surname2\;Surname2;Name\;Name' + VCardLineEnding);
142 end;
143 with TTestCasePropertyWrite(AddNew('Escaped semicolon in name set 1', TTestCasePropertyWrite)) do begin
144 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
145 Index := cfFirstName;
146 Value := 'Name2;Name2';
147 Output := BeginEnd('N:Surname\;Surname;Name2\;Name2' + VCardLineEnding);
148 end;
149 with TTestCasePropertyWrite(AddNew('Escaped semicolon in name set 2', TTestCasePropertyWrite)) do begin
150 Input := BeginEnd('N:Surname\;Surname;Name\;Name' + VCardLineEnding);
151 Index := cfMiddleName;
152 Value := 'Middle2;Middle2';
153 Output := BeginEnd('N:Surname\;Surname;Name\;Name;Middle2\;Middle2' + VCardLineEnding);
154 end;
155 with TTestCasePropertyRead(AddNew('Quoted-printable special symbols', TTestCasePropertyRead)) do begin
156 Index := cfFullName;
157 Value := 'Jméno Příjmení';
158 Input := BeginEnd(
159 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding);
160 end;
161 with TTestCasePropertyRead(AddNew('Base64 special symbols', TTestCasePropertyRead)) do begin
162 Index := cfFullName;
163 Value := 'Jméno Příjmení';
164 Input := BeginEnd('FN;ENCODING=BASE64:Sm3DqW5vIFDFmcOtam1lbsOt' + VCardLineEnding);
165 end;
166 with TTestCaseLoadSave(AddNew('Remove exact duplicates', TTestCaseLoadSave)) do begin
167 Input := BeginEnd(
168 'N:Surname;Name' + VCardLineEnding +
169 'FN:Name Surname' + VCardLineEnding) +
170 BeginEnd(
171 'N:Surname2;Name2' + VCardLineEnding +
172 'FN:Name2 Surname2' + VCardLineEnding) +
173 BeginEnd(
174 'N:Surname;Name' + VCardLineEnding +
175 'FN:Name Surname' + VCardLineEnding) +
176 BeginEnd(
177 'N:Surname;Name' + VCardLineEnding +
178 'FN:Name Surname' + VCardLineEnding +
179 'NOTE:Note' + VCardLineEnding) +
180 BeginEnd(
181 'N:Surname;Name' + VCardLineEnding +
182 'FN:Name Surname' + VCardLineEnding);
183 Action := akRemoveExactDuplicates;
184 Output := BeginEnd(
185 'N:Surname;Name' + VCardLineEnding +
186 'FN:Name Surname' + VCardLineEnding) +
187 BeginEnd(
188 'N:Surname2;Name2' + VCardLineEnding +
189 'FN:Name2 Surname2' + VCardLineEnding) +
190 BeginEnd(
191 'N:Surname;Name' + VCardLineEnding +
192 'FN:Name Surname' + VCardLineEnding +
193 'NOTE:Note' + VCardLineEnding);
194 end;
195 with TTestCaseLoadSave(AddNew('Normalize Unix line endings', TTestCaseLoadSave)) do begin
196 Input := VCardBegin + UnixLineEnding +
197 VCardVersion + UnixLineEnding +
198 'N:Surname;Name' + UnixLineEnding +
199 'FN:Name Surname' + UnixLineEnding +
200 VCardEnd + UnixLineEnding;
201 Output := VCardBegin + VCardLineEnding +
202 VCardVersion + VCardLineEnding +
203 'N:Surname;Name' + VCardLineEnding +
204 'FN:Name Surname' + VCardLineEnding +
205 VCardEnd + VCardLineEnding;
206 end;
207 with TTestCaseLoadSave(AddNew('Normalize Mac line endings', TTestCaseLoadSave)) do begin
208 Input := VCardBegin + MacLineEnding +
209 VCardVersion + MacLineEnding +
210 'N:Surname;Name' + MacLineEnding +
211 'FN:Name Surname' + MacLineEnding +
212 VCardEnd + MacLineEnding;
213 Output := VCardBegin + VCardLineEnding +
214 VCardVersion + VCardLineEnding +
215 'N:Surname;Name' + VCardLineEnding +
216 'FN:Name Surname' + VCardLineEnding +
217 VCardEnd + VCardLineEnding;
218 end;
219
220 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Remove exact duplicates', TTestCaseVCardProcessor)) do begin
221 Processor.RemoveExactDuplicates := True;
222 Input := BeginEnd(
223 'N:Surname;Name' + VCardLineEnding +
224 'FN:Name Surname' + VCardLineEnding) +
225 BeginEnd(
226 'N:Surname2;Name2' + VCardLineEnding +
227 'FN:Name2 Surname2' + VCardLineEnding) +
228 BeginEnd(
229 'N:Surname;Name' + VCardLineEnding +
230 'FN:Name Surname' + VCardLineEnding) +
231 BeginEnd(
232 'N:Surname;Name' + VCardLineEnding +
233 'FN:Name Surname' + VCardLineEnding +
234 'NOTE:Note' + VCardLineEnding) +
235 BeginEnd(
236 'N:Surname;Name' + VCardLineEnding +
237 'FN:Name Surname' + VCardLineEnding);
238 Output := BeginEnd(
239 'N:Surname;Name' + VCardLineEnding +
240 'FN:Name Surname' + VCardLineEnding) +
241 BeginEnd(
242 'N:Surname2;Name2' + VCardLineEnding +
243 'FN:Name2 Surname2' + VCardLineEnding) +
244 BeginEnd(
245 'N:Surname;Name' + VCardLineEnding +
246 'FN:Name Surname' + VCardLineEnding +
247 'NOTE:Note' + VCardLineEnding);
248 end;
249 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Remove phone spaces', TTestCaseVCardProcessor)) do begin
250 Processor.RemovePhoneSpaces := True;
251 Input := BeginEnd('TEL: 123 456 789 ' + VCardLineEnding) +
252 BeginEnd('TEL;CELL:919 191 919' + VCardLineEnding);
253 Output := BeginEnd('TEL:123456789' + VCardLineEnding) +
254 BeginEnd('TEL;CELL:919191919' + VCardLineEnding);
255 end;
256 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Remove photos', TTestCaseVCardProcessor)) do begin
257 Processor.RemovePhotos := True;
258 Input := BeginEnd('N:Surname;Name' + VCardLineEnding +
259 'FN:Name Surname' + VCardLineEnding +
260 'PHOTO:dadsa' + VCardLineEnding) +
261 BeginEnd('N:Surname;Name' + VCardLineEnding +
262 'FN:Name Surname' + VCardLineEnding +
263 'PHOTO:dadsa' + VCardLineEnding +
264 'PHOTO:adsadadsa' + VCardLineEnding);
265 Output := BeginEnd('N:Surname;Name' + VCardLineEnding +
266 'FN:Name Surname' + VCardLineEnding) +
267 BeginEnd('N:Surname;Name' + VCardLineEnding +
268 'FN:Name Surname' + VCardLineEnding);
269 end;
270 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Order', TTestCaseVCardProcessor)) do begin
271 Processor.Order := True;
272 Input := BeginEnd('N:Surname2;Name2' + VCardLineEnding +
273 'FN:Name2 Surname2' + VCardLineEnding) +
274 BeginEnd('N:Surname1;Name1' + VCardLineEnding +
275 'FN:Name1 Surname1' + VCardLineEnding) +
276 BeginEnd('N:Surname3;Name3' + VCardLineEnding +
277 'FN:Name3 Surname3' + VCardLineEnding);
278 Output := BeginEnd('FN:Name1 Surname1' + VCardLineEnding +
279 'N:Surname1;Name1' + VCardLineEnding) +
280 BeginEnd('FN:Name2 Surname2' + VCardLineEnding +
281 'N:Surname2;Name2'+ VCardLineEnding) +
282 BeginEnd('FN:Name3 Surname3' + VCardLineEnding +
283 'N:Surname3;Name3' + VCardLineEnding);
284 end;
285 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Add phone country code', TTestCaseVCardProcessor)) do begin
286 Processor.AddDefaultPhoneCountryPrefix := True;
287 Processor.DefaultPhoneCountryCode := '+470';
288 Processor.NonPrefixedPhoneLength := 9;
289 Input := BeginEnd('TEL: 123 456 789 ' + VCardLineEnding) +
290 BeginEnd('TEL;CELL:919 191 919' + VCardLineEnding) +
291 BeginEnd('TEL;CELL:+421 919 191 919' + VCardLineEnding) +
292 BeginEnd('TEL;CELL:*#1234' + VCardLineEnding);
293 Output := BeginEnd('TEL:+470 123 456 789 ' + VCardLineEnding) +
294 BeginEnd('TEL;CELL:+470919 191 919' + VCardLineEnding) +
295 BeginEnd('TEL;CELL:+421 919 191 919' + VCardLineEnding) +
296 BeginEnd('TEL;CELL:*#1234' + VCardLineEnding);
297 end;
298 with TTestCaseVCardProcessor(AddNew('VCardProcessor - Convert international call prefix to country code', TTestCaseVCardProcessor)) do begin
299 Processor.ConvertInternationalCallPrefixToCountryCode := True;
300 Processor.DefaultInternationalCallPrefix := '00420';
301 Processor.DefaultPhoneCountryCode := '+470';
302 Input := BeginEnd('TEL:00420123456789' + VCardLineEnding) +
303 BeginEnd('TEL;CELL:00420 919 191 919 ' + VCardLineEnding) +
304 BeginEnd('TEL;CELL:00421919191919' + VCardLineEnding);
305 Output := BeginEnd('TEL:+470123456789' + VCardLineEnding) +
306 BeginEnd('TEL;CELL:+470 919 191 919 ' + VCardLineEnding) +
307 BeginEnd('TEL;CELL:00421919191919' + VCardLineEnding);
308 end;
309
310 with TTestCaseVCardExportImport(AddNew('Export/Import CSV', TTestCaseVCardExportImport)) do begin
311 Format := tfCsv;
312 HumanReadableHeader := False;
313 Input := BeginEnd(
314 'N:Surname;Name' + VCardLineEnding +
315 'FN:Name Surname' + VCardLineEnding) +
316 BeginEnd(
317 'N:Surname2;Name2' + VCardLineEnding +
318 'FN:Name2 Surname2' + VCardLineEnding);
319 Output := Input;
320 end;
321 with TTestCaseVCardExportImport(AddNew('Export/Import CSV human header', TTestCaseVCardExportImport)) do begin
322 Format := tfCsv;
323 HumanReadableHeader := True;
324 Input := BeginEnd(
325 'N:Surname;Name' + VCardLineEnding +
326 'FN:Name Surname' + VCardLineEnding) +
327 BeginEnd(
328 'N:Surname2;Name2' + VCardLineEnding +
329 'FN:Name2 Surname2' + VCardLineEnding);
330 Output := Input;
331 end;
332 with TTestCaseVCardExportImport(AddNew('Export/Import MediaWiki', TTestCaseVCardExportImport)) do begin
333 Format := tfMediaWiki;
334 HumanReadableHeader := False;
335 Input := BeginEnd(
336 'N:Surname;Name' + VCardLineEnding +
337 'FN:Name Surname' + VCardLineEnding) +
338 BeginEnd(
339 'N:Surname2;Name2' + VCardLineEnding +
340 'FN:Name2 Surname2' + VCardLineEnding);
341 Output := Input;
342 end;
343 with TTestCaseVCardExportImport(AddNew('Export/Import XML', TTestCaseVCardExportImport)) do begin
344 Format := tfXml;
345 HumanReadableHeader := False;
346 Input := BeginEnd(
347 'N:Surname;Name' + VCardLineEnding +
348 'FN:Name Surname' + VCardLineEnding) +
349 BeginEnd(
350 'N:Surname2;Name2' + VCardLineEnding +
351 'FN:Name2 Surname2' + VCardLineEnding);
352 Output := Input;
353 end;
354 with TTestCaseVCardExportImport(AddNew('Export/Import JSON', TTestCaseVCardExportImport)) do begin
355 Format := tfJSON;
356 HumanReadableHeader := False;
357 Input := BeginEnd(
358 'N:Surname;Name' + VCardLineEnding +
359 'FN:Name Surname' + VCardLineEnding) +
360 BeginEnd(
361 'N:Surname2;Name2' + VCardLineEnding +
362 'FN:Name2 Surname2' + VCardLineEnding);
363 Output := Input;
364 end;
365
366 with TTestCaseLoadSave(AddNew('Merge same cell phone', TTestCaseLoadSave)) do begin
367 Input := VCardBegin + MacLineEnding +
368 VCardVersion + MacLineEnding +
369 'N:Surname;Name' + MacLineEnding +
370 'FN:Name Surname' + MacLineEnding +
371 'TEL;CELL:123456789' + MacLineEnding +
372 VCardEnd + MacLineEnding +
373
374 VCardBegin + MacLineEnding +
375 VCardVersion + MacLineEnding +
376 'N:Surname2;Name' + MacLineEnding +
377 'FN:Name Surname2' + MacLineEnding +
378 'TEL;CELL:123456789' + MacLineEnding +
379 VCardEnd + MacLineEnding;
380 Output := VCardBegin + VCardLineEnding +
381 VCardVersion + VCardLineEnding +
382 'N:Surname;Name' + VCardLineEnding +
383 'FN:Name Surname' + VCardLineEnding +
384 'TEL;CELL:123456789' + MacLineEnding +
385 VCardEnd + VCardLineEnding;
386 end;
387 end;
388end;
389
390end.
391
Note: See TracBrowser for help on using the repository browser.