| 1 | unit UTestCases;
|
|---|
| 2 |
|
|---|
| 3 | interface
|
|---|
| 4 |
|
|---|
| 5 | uses
|
|---|
| 6 | Classes, SysUtils, UTest;
|
|---|
| 7 |
|
|---|
| 8 | function InitTestCases: TTestCases;
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 | implementation
|
|---|
| 12 |
|
|---|
| 13 | uses
|
|---|
| 14 | UVCard;
|
|---|
| 15 |
|
|---|
| 16 | const
|
|---|
| 17 | VCardVersion = 'VERSION:2.1';
|
|---|
| 18 | UnixLineEnding = #10;
|
|---|
| 19 | MacLineEnding = #13;
|
|---|
| 20 |
|
|---|
| 21 | function BeginEnd(Text: string; WithVersion: Boolean = True): string;
|
|---|
| 22 | begin
|
|---|
| 23 | Result := VCardBegin + VCardLineEnding;
|
|---|
| 24 | if WithVersion then Result := Result + VCardVersion + VCardLineEnding;
|
|---|
| 25 | Result := Result + Text + VCardEnd + VCardLineEnding;
|
|---|
| 26 | end;
|
|---|
| 27 |
|
|---|
| 28 | function InitTestCases: TTestCases;
|
|---|
| 29 | begin
|
|---|
| 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 | Output := Input;
|
|---|
| 43 | end;
|
|---|
| 44 | with TTestCaseLoadSave(AddNew('Multi-line', TTestCaseLoadSave)) do begin
|
|---|
| 45 | Input := BeginEnd(
|
|---|
| 46 | 'NOTE:First line\nsecond line\nempty line\n\nlast line' + VCardLineEnding);
|
|---|
| 47 | Output := Input;
|
|---|
| 48 | end;
|
|---|
| 49 | with TTestCaseLoadSave(AddNew('Quoted-printable load-save', TTestCaseLoadSave)) do begin
|
|---|
| 50 | Input := BeginEnd(
|
|---|
| 51 | 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding);
|
|---|
| 52 | Output := Input;
|
|---|
| 53 | end;
|
|---|
| 54 | with TTestCaseLoadSave(AddNew('Quoted-printable load-save multi-line', TTestCaseLoadSave)) do begin
|
|---|
| 55 | Input := BeginEnd(
|
|---|
| 56 | 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=ADJm=C3=A9n=' + VCardLineEnding +
|
|---|
| 57 | 'o=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding);
|
|---|
| 58 | Output := Input;
|
|---|
| 59 | end;
|
|---|
| 60 | with TTestCaseLoadSave(AddNew('Base64 load-save (encoding=base64)', TTestCaseLoadSave)) do begin
|
|---|
| 61 | Input := BeginEnd(
|
|---|
| 62 | 'FN;ENCODING=BASE64:VGVzdCBzdHJpbmc=' + VCardLineEnding);
|
|---|
| 63 | Output := Input;
|
|---|
| 64 | end;
|
|---|
| 65 | with TTestCaseLoadSave(AddNew('Base64 load-save (base64)', TTestCaseLoadSave)) do begin
|
|---|
| 66 | Input := BeginEnd(
|
|---|
| 67 | 'FN;BASE64:VGVzdCBzdHJpbmc=' + VCardLineEnding);
|
|---|
| 68 | Output := Input;
|
|---|
| 69 | end;
|
|---|
| 70 | with TTestCaseLoadSave(AddNew('Base64 load-save (encoding=b)', TTestCaseLoadSave)) do begin
|
|---|
| 71 | Input := BeginEnd(
|
|---|
| 72 | 'FN;ENCODING=B:VGVzdCBzdHJpbmc=' + VCardLineEnding);
|
|---|
| 73 | Output := Input;
|
|---|
| 74 | end;
|
|---|
| 75 | with TTestCaseLoadSave(AddNew('Base64 load-save multi-line', TTestCaseLoadSave)) do begin
|
|---|
| 76 | Input := BeginEnd(
|
|---|
| 77 | 'FN;ENCODING=BASE64:U29tZSB2ZXJ5IGxvbmcgc3RyaW5nIFNvbWUgdmVyeSBsb25nIHN0cmlu' + VCardLineEnding +
|
|---|
| 78 | ' ZyBTb21lIHZlcnkgbG9uZyBzdHJpbmcgU29tZSB2ZXJ5IGxvbmcgc3RyaW5n' + VCardLineEnding);
|
|---|
| 79 | Output := Input;
|
|---|
| 80 | end;
|
|---|
| 81 | //AddNew('Image format', TTestCaseLoadSave);
|
|---|
| 82 | with TTestCaseLoadSave(AddNew('Empty', TTestCaseLoadSave)) do begin
|
|---|
| 83 | Input := '';
|
|---|
| 84 | Output := '';
|
|---|
| 85 | end;
|
|---|
| 86 | with TTestCaseLoadSave(AddNew('Begin only', TTestCaseLoadSave)) do begin
|
|---|
| 87 | Input := VCardBegin;
|
|---|
| 88 | Output := '';
|
|---|
| 89 | end;
|
|---|
| 90 | with TTestCaseLoadSave(AddNew('Missing end', TTestCaseLoadSave)) do begin
|
|---|
| 91 | Input := VCardBegin + VCardLineEnding +
|
|---|
| 92 | VCardVersion + VCardLineEnding +
|
|---|
| 93 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 94 | 'FN:Name Surname' + VCardLineEnding;
|
|---|
| 95 | Output := '';
|
|---|
| 96 | end;
|
|---|
| 97 | with TTestCaseLoadSave(AddNew('Missing start', TTestCaseLoadSave)) do begin
|
|---|
| 98 | Input := VCardVersion + VCardLineEnding +
|
|---|
| 99 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 100 | 'FN:Name Surname' + VCardLineEnding +
|
|---|
| 101 | VCardEnd + VCardLineEnding;
|
|---|
| 102 | Output := '';
|
|---|
| 103 | end;
|
|---|
| 104 | with TTestCaseCheckProperty(AddNew('Property FN', TTestCaseCheckProperty)) do begin
|
|---|
| 105 | Index := cfFullName;
|
|---|
| 106 | Value := 'Name Surname';
|
|---|
| 107 | Input := BeginEnd('FN:' + Value + VCardLineEnding);
|
|---|
| 108 | end;
|
|---|
| 109 | with TTestCaseCheckProperty(AddNew('Escaped new lines in text', TTestCaseCheckProperty)) do begin
|
|---|
| 110 | Index := cfNote;
|
|---|
| 111 | Value := 'Line' + #13#10 + 'Line';
|
|---|
| 112 | Input := BeginEnd('NOTE:Line\nLine' + VCardLineEnding);
|
|---|
| 113 | end;
|
|---|
| 114 | with TTestCaseCheckProperty(AddNew('Compound value', TTestCaseCheckProperty)) do begin
|
|---|
| 115 | Index := cfFirstName;
|
|---|
| 116 | Value := 'FirstName';
|
|---|
| 117 | Input := BeginEnd('N:Surname;FirstName;;;' + VCardLineEnding);
|
|---|
| 118 | end;
|
|---|
| 119 | with TTestCaseCheckProperty(AddNew('Quoted-printable special symbols', TTestCaseCheckProperty)) do begin
|
|---|
| 120 | Index := cfFullName;
|
|---|
| 121 | Value := 'Jméno Příjmení';
|
|---|
| 122 | Input := BeginEnd(
|
|---|
| 123 | 'FN;ENCODING=QUOTED-PRINTABLE:Jm=C3=A9no=20P=C5=99=C3=ADjmen=C3=AD' + VCardLineEnding);
|
|---|
| 124 | end;
|
|---|
| 125 | with TTestCaseCheckProperty(AddNew('Base64 special symbols', TTestCaseCheckProperty)) do begin
|
|---|
| 126 | Index := cfFullName;
|
|---|
| 127 | Value := 'Jméno Příjmení';
|
|---|
| 128 | Input := BeginEnd('FN;ENCODING=BASE64:Sm3DqW5vIFDFmcOtam1lbsOt' + VCardLineEnding);
|
|---|
| 129 | end;
|
|---|
| 130 | with TTestCaseLoadSave(AddNew('Remove exact duplicates', TTestCaseLoadSave)) do begin
|
|---|
| 131 | Input := BeginEnd(
|
|---|
| 132 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 133 | 'FN:Name Surname' + VCardLineEnding) +
|
|---|
| 134 | BeginEnd(
|
|---|
| 135 | 'N:Surname2;Name2' + VCardLineEnding +
|
|---|
| 136 | 'FN:Name2 Surname2' + VCardLineEnding) +
|
|---|
| 137 | BeginEnd(
|
|---|
| 138 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 139 | 'FN:Name Surname' + VCardLineEnding) +
|
|---|
| 140 | BeginEnd(
|
|---|
| 141 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 142 | 'FN:Name Surname' + VCardLineEnding +
|
|---|
| 143 | 'NOTE:Note' + VCardLineEnding) +
|
|---|
| 144 | BeginEnd(
|
|---|
| 145 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 146 | 'FN:Name Surname' + VCardLineEnding);
|
|---|
| 147 | Action := akRemoveExactDuplicates;
|
|---|
| 148 | Output := BeginEnd(
|
|---|
| 149 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 150 | 'FN:Name Surname' + VCardLineEnding) +
|
|---|
| 151 | BeginEnd(
|
|---|
| 152 | 'N:Surname2;Name2' + VCardLineEnding +
|
|---|
| 153 | 'FN:Name2 Surname2' + VCardLineEnding) +
|
|---|
| 154 | BeginEnd(
|
|---|
| 155 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 156 | 'FN:Name Surname' + VCardLineEnding +
|
|---|
| 157 | 'NOTE:Note' + VCardLineEnding);
|
|---|
| 158 | end;
|
|---|
| 159 | with TTestCaseLoadSave(AddNew('Normalize Unix line endings', TTestCaseLoadSave)) do begin
|
|---|
| 160 | Input := VCardBegin + UnixLineEnding +
|
|---|
| 161 | VCardVersion + UnixLineEnding +
|
|---|
| 162 | 'N:Surname;Name' + UnixLineEnding +
|
|---|
| 163 | 'FN:Name Surname' + UnixLineEnding +
|
|---|
| 164 | VCardEnd + UnixLineEnding;
|
|---|
| 165 | Output := VCardBegin + VCardLineEnding +
|
|---|
| 166 | VCardVersion + VCardLineEnding +
|
|---|
| 167 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 168 | 'FN:Name Surname' + VCardLineEnding +
|
|---|
| 169 | VCardEnd + VCardLineEnding;
|
|---|
| 170 | end;
|
|---|
| 171 | with TTestCaseLoadSave(AddNew('Normalize Mac line endings', TTestCaseLoadSave)) do begin
|
|---|
| 172 | Input := VCardBegin + MacLineEnding +
|
|---|
| 173 | VCardVersion + MacLineEnding +
|
|---|
| 174 | 'N:Surname;Name' + MacLineEnding +
|
|---|
| 175 | 'FN:Name Surname' + MacLineEnding +
|
|---|
| 176 | VCardEnd + MacLineEnding;
|
|---|
| 177 | Output := VCardBegin + VCardLineEnding +
|
|---|
| 178 | VCardVersion + VCardLineEnding +
|
|---|
| 179 | 'N:Surname;Name' + VCardLineEnding +
|
|---|
| 180 | 'FN:Name Surname' + VCardLineEnding +
|
|---|
| 181 | VCardEnd + VCardLineEnding;
|
|---|
| 182 | end;
|
|---|
| 183 | end;
|
|---|
| 184 | end;
|
|---|
| 185 |
|
|---|
| 186 | end.
|
|---|
| 187 |
|
|---|