annotate 3rdparty/vmime/tests/parser/headerTest.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 //
ferencd@0 2 // VMime library (http://www.vmime.org)
ferencd@0 3 // Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
ferencd@0 4 //
ferencd@0 5 // This program is free software; you can redistribute it and/or
ferencd@0 6 // modify it under the terms of the GNU General Public License as
ferencd@0 7 // published by the Free Software Foundation; either version 3 of
ferencd@0 8 // the License, or (at your option) any later version.
ferencd@0 9 //
ferencd@0 10 // This program is distributed in the hope that it will be useful,
ferencd@0 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
ferencd@0 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ferencd@0 13 // General Public License for more details.
ferencd@0 14 //
ferencd@0 15 // You should have received a copy of the GNU General Public License along
ferencd@0 16 // with this program; if not, write to the Free Software Foundation, Inc.,
ferencd@0 17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ferencd@0 18 //
ferencd@0 19 // Linking this library statically or dynamically with other modules is making
ferencd@0 20 // a combined work based on this library. Thus, the terms and conditions of
ferencd@0 21 // the GNU General Public License cover the whole combination.
ferencd@0 22 //
ferencd@0 23
ferencd@0 24 #include "tests/testUtils.hpp"
ferencd@0 25
ferencd@0 26
ferencd@0 27 VMIME_TEST_SUITE_BEGIN(headerTest)
ferencd@0 28
ferencd@0 29 VMIME_TEST_LIST_BEGIN
ferencd@0 30 VMIME_TEST(testHas1)
ferencd@0 31 VMIME_TEST(testHas2)
ferencd@0 32
ferencd@0 33 VMIME_TEST(testAppend1)
ferencd@0 34 VMIME_TEST(testAppend2)
ferencd@0 35
ferencd@0 36 VMIME_TEST(testInsertFieldBefore1)
ferencd@0 37 VMIME_TEST(testInsertFieldBefore2)
ferencd@0 38
ferencd@0 39 VMIME_TEST(testInsertFieldAfter1)
ferencd@0 40 VMIME_TEST(testInsertFieldAfter2)
ferencd@0 41
ferencd@0 42 VMIME_TEST(testReplaceField)
ferencd@0 43
ferencd@0 44 VMIME_TEST(testRemoveField1)
ferencd@0 45 VMIME_TEST(testRemoveField2)
ferencd@0 46
ferencd@0 47 VMIME_TEST(testRemoveAllFields)
ferencd@0 48
ferencd@0 49 VMIME_TEST(testgetFieldCount)
ferencd@0 50
ferencd@0 51 VMIME_TEST(testIsEmpty1)
ferencd@0 52 VMIME_TEST(testIsEmpty2)
ferencd@0 53
ferencd@0 54 VMIME_TEST(testGetFieldAt)
ferencd@0 55
ferencd@0 56 VMIME_TEST(testGetFieldList1)
ferencd@0 57 VMIME_TEST(testGetFieldList2)
ferencd@0 58
ferencd@0 59 VMIME_TEST(testFind1)
ferencd@0 60
ferencd@0 61 VMIME_TEST(testFindAllFields1)
ferencd@0 62 VMIME_TEST(testFindAllFields2)
ferencd@0 63 VMIME_TEST(testFindAllFields3)
ferencd@0 64 VMIME_TEST_LIST_END
ferencd@0 65
ferencd@0 66
ferencd@0 67 static const std::string getFieldValue(const vmime::headerField& field)
ferencd@0 68 {
ferencd@0 69 std::ostringstream oss;
ferencd@0 70 vmime::utility::outputStreamAdapter voss(oss);
ferencd@0 71 field.generate(voss);
ferencd@0 72
ferencd@0 73 return (oss.str());
ferencd@0 74 }
ferencd@0 75
ferencd@0 76 // has function tests
ferencd@0 77 void testHas1()
ferencd@0 78 {
ferencd@0 79 vmime::header hdr;
ferencd@0 80 hdr.parse("From: x\r\nTo: y\r\nTo: z\r\n");
ferencd@0 81
ferencd@0 82 bool res = hdr.hasField("Z");
ferencd@0 83
ferencd@0 84 VASSERT_EQ("Value", false, res);
ferencd@0 85 }
ferencd@0 86
ferencd@0 87 void testHas2()
ferencd@0 88 {
ferencd@0 89 vmime::header hdr;
ferencd@0 90 hdr.parse("X: x\r\nTo: y\r\nTo: z\r\n");
ferencd@0 91
ferencd@0 92 bool res = hdr.hasField("To");
ferencd@0 93
ferencd@0 94 VASSERT_EQ("Value", true, res);
ferencd@0 95 }
ferencd@0 96
ferencd@0 97 // appendField function tests
ferencd@0 98 void testAppend1()
ferencd@0 99 {
ferencd@0 100 vmime::header hdr;
ferencd@0 101 hdr.parse("");
ferencd@0 102
ferencd@0 103 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("A", "a");
ferencd@0 104 hdr.appendField(hf);
ferencd@0 105
ferencd@0 106 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 107
ferencd@0 108 VASSERT_EQ("Count", static_cast <unsigned int>(1), res.size());
ferencd@0 109 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 110 }
ferencd@0 111
ferencd@0 112 void testAppend2()
ferencd@0 113 {
ferencd@0 114 vmime::header hdr;
ferencd@0 115 hdr.parse("A: a\r\n");
ferencd@0 116
ferencd@0 117 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("B", "b");
ferencd@0 118 hdr.appendField(hf);
ferencd@0 119
ferencd@0 120 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 121
ferencd@0 122 VASSERT_EQ("Count", static_cast <unsigned int>(2), res.size());
ferencd@0 123 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 124 VASSERT_EQ("Second value", "B: b", headerTest::getFieldValue(*res[1]));
ferencd@0 125 }
ferencd@0 126
ferencd@0 127 // insertFieldBefore
ferencd@0 128 void testInsertFieldBefore1()
ferencd@0 129 {
ferencd@0 130 vmime::header hdr;
ferencd@0 131 hdr.parse("A: a\r\nC: c\r\n");
ferencd@0 132
ferencd@0 133 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("B", "b");
ferencd@0 134 hdr.insertFieldBefore(hdr.getField("C"), hf);
ferencd@0 135
ferencd@0 136 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 137
ferencd@0 138 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 139 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 140 VASSERT_EQ("Second value", "B: b", headerTest::getFieldValue(*res[1]));
ferencd@0 141 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 142 }
ferencd@0 143
ferencd@0 144 void testInsertFieldBefore2()
ferencd@0 145 {
ferencd@0 146 vmime::header hdr;
ferencd@0 147 hdr.parse("A: a\r\nC: c\r\n");
ferencd@0 148
ferencd@0 149 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("B", "b");
ferencd@0 150 hdr.insertFieldBefore(1, hf);
ferencd@0 151
ferencd@0 152 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 153
ferencd@0 154 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 155 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 156 VASSERT_EQ("Second value", "B: b", headerTest::getFieldValue(*res[1]));
ferencd@0 157 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 158 }
ferencd@0 159
ferencd@0 160 // insertFieldAfter
ferencd@0 161 void testInsertFieldAfter1()
ferencd@0 162 {
ferencd@0 163 vmime::header hdr;
ferencd@0 164 hdr.parse("A: a\r\nC: c\r\n");
ferencd@0 165
ferencd@0 166 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("B", "b");
ferencd@0 167 hdr.insertFieldAfter(hdr.getField("A"), hf);
ferencd@0 168
ferencd@0 169 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 170
ferencd@0 171 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 172 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 173 VASSERT_EQ("Second value", "B: b", headerTest::getFieldValue(*res[1]));
ferencd@0 174 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 175 }
ferencd@0 176
ferencd@0 177 void testInsertFieldAfter2()
ferencd@0 178 {
ferencd@0 179 vmime::header hdr;
ferencd@0 180 hdr.parse("A: a\r\nC: c\r\n");
ferencd@0 181
ferencd@0 182 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("B", "b");
ferencd@0 183 hdr.insertFieldAfter(0, hf);
ferencd@0 184
ferencd@0 185 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 186
ferencd@0 187 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 188 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 189 VASSERT_EQ("Second value", "B: b", headerTest::getFieldValue(*res[1]));
ferencd@0 190 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 191 }
ferencd@0 192
ferencd@0 193 // replaceField
ferencd@0 194 void testReplaceField()
ferencd@0 195 {
ferencd@0 196 vmime::header hdr;
ferencd@0 197 hdr.parse("A: a\r\nB: b\r\nC: c\r\n");
ferencd@0 198
ferencd@0 199 vmime::shared_ptr <vmime::headerField> hf = vmime::headerFieldFactory::getInstance()->create("Z", "z");
ferencd@0 200 hdr.replaceField(hdr.getField("B"), hf);
ferencd@0 201
ferencd@0 202 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 203
ferencd@0 204 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 205 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 206 VASSERT_EQ("Second value", "Z: z", headerTest::getFieldValue(*res[1]));
ferencd@0 207 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 208 }
ferencd@0 209
ferencd@0 210 // removeField
ferencd@0 211 void testRemoveField1()
ferencd@0 212 {
ferencd@0 213 vmime::header hdr1, hdr2;
ferencd@0 214 hdr1.parse("A: a\r\nB: b\r\nC: c\r\n");
ferencd@0 215 hdr2.parse("A: a\r\nB: b\r\nC: c\r\n");
ferencd@0 216
ferencd@0 217 hdr1.removeField(hdr1.getField("B"));
ferencd@0 218 hdr2.removeField(1);
ferencd@0 219
ferencd@0 220 std::vector <vmime::shared_ptr <vmime::headerField> > res1 = hdr1.getFieldList();
ferencd@0 221
ferencd@0 222 VASSERT_EQ("Count", static_cast <unsigned int>(2), res1.size());
ferencd@0 223 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res1[0]));
ferencd@0 224 VASSERT_EQ("Second value", "C: c", headerTest::getFieldValue(*res1[1]));
ferencd@0 225
ferencd@0 226 std::vector <vmime::shared_ptr <vmime::headerField> > res2 = hdr2.getFieldList();
ferencd@0 227
ferencd@0 228 VASSERT_EQ("Count", static_cast <unsigned int>(2), res2.size());
ferencd@0 229 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res2[0]));
ferencd@0 230 VASSERT_EQ("Second value", "C: c", headerTest::getFieldValue(*res2[1]));
ferencd@0 231 }
ferencd@0 232
ferencd@0 233 void testRemoveField2()
ferencd@0 234 {
ferencd@0 235 vmime::header hdr1, hdr2;
ferencd@0 236 hdr1.parse("A: a\r\n");
ferencd@0 237 hdr2.parse("A: a\r\n");
ferencd@0 238
ferencd@0 239 hdr1.removeField(hdr1.getField("A"));
ferencd@0 240 hdr2.removeField(0);
ferencd@0 241
ferencd@0 242 std::vector <vmime::shared_ptr <vmime::headerField> > res1 = hdr1.getFieldList();
ferencd@0 243 VASSERT_EQ("Count", static_cast <unsigned int>(0), res1.size());
ferencd@0 244
ferencd@0 245 std::vector <vmime::shared_ptr <vmime::headerField> > res2 = hdr2.getFieldList();
ferencd@0 246 VASSERT_EQ("Count", static_cast <unsigned int>(0), res2.size());
ferencd@0 247 }
ferencd@0 248
ferencd@0 249 // removeAllFields
ferencd@0 250 void testRemoveAllFields()
ferencd@0 251 {
ferencd@0 252 vmime::header hdr1, hdr2;
ferencd@0 253 hdr1.parse("A: a\r\n");
ferencd@0 254 hdr2.parse("A: a\r\nB: b\r\n");
ferencd@0 255
ferencd@0 256 hdr1.removeAllFields();
ferencd@0 257 hdr2.removeAllFields();
ferencd@0 258
ferencd@0 259 std::vector <vmime::shared_ptr <vmime::headerField> > res1 = hdr1.getFieldList();
ferencd@0 260 VASSERT_EQ("Count", static_cast <unsigned int>(0), res1.size());
ferencd@0 261
ferencd@0 262 std::vector <vmime::shared_ptr <vmime::headerField> > res2 = hdr2.getFieldList();
ferencd@0 263 VASSERT_EQ("Count", static_cast <unsigned int>(0), res2.size());
ferencd@0 264 }
ferencd@0 265
ferencd@0 266 // getFieldCount
ferencd@0 267 void testgetFieldCount()
ferencd@0 268 {
ferencd@0 269 vmime::header hdr;
ferencd@0 270 hdr.parse("A: a\r\nB: b\r\nC: c\r\nD: d\r\n");
ferencd@0 271
ferencd@0 272 VASSERT_EQ("Value", 4, hdr.getFieldCount());
ferencd@0 273 }
ferencd@0 274
ferencd@0 275 // isEmpty
ferencd@0 276 void testIsEmpty1()
ferencd@0 277 {
ferencd@0 278 vmime::header hdr;
ferencd@0 279 hdr.parse("A: a\r\nB: b\r\nC: c\r\n");
ferencd@0 280
ferencd@0 281 VASSERT_EQ("Value", false, hdr.isEmpty());
ferencd@0 282 }
ferencd@0 283
ferencd@0 284 void testIsEmpty2()
ferencd@0 285 {
ferencd@0 286 vmime::header hdr;
ferencd@0 287 hdr.parse("\r\n");
ferencd@0 288
ferencd@0 289 VASSERT_EQ("Value", true, hdr.isEmpty());
ferencd@0 290 }
ferencd@0 291
ferencd@0 292 // getFieldAt
ferencd@0 293 void testGetFieldAt()
ferencd@0 294 {
ferencd@0 295 vmime::header hdr;
ferencd@0 296 hdr.parse("B: b\r\nA: a\r\nC: c\r\n");
ferencd@0 297
ferencd@0 298 vmime::shared_ptr <vmime::headerField> res = hdr.getFieldAt(2);
ferencd@0 299
ferencd@0 300 VASSERT_EQ("Value", "C: c", getFieldValue(*res));
ferencd@0 301 }
ferencd@0 302
ferencd@0 303 // getFieldList
ferencd@0 304 void testGetFieldList1()
ferencd@0 305 {
ferencd@0 306 vmime::header hdr;
ferencd@0 307 hdr.parse("A: a\r\nB: b1\r\nC: c\r\nB: b2\r\n");
ferencd@0 308
ferencd@0 309 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 310
ferencd@0 311 VASSERT_EQ("Count", static_cast <unsigned int>(4), res.size());
ferencd@0 312 VASSERT_EQ("First value", "A: a", headerTest::getFieldValue(*res[0]));
ferencd@0 313 VASSERT_EQ("Second value", "B: b1", headerTest::getFieldValue(*res[1]));
ferencd@0 314 VASSERT_EQ("Third value", "C: c", headerTest::getFieldValue(*res[2]));
ferencd@0 315 VASSERT_EQ("Thourth value", "B: b2", headerTest::getFieldValue(*res[3]));
ferencd@0 316 }
ferencd@0 317
ferencd@0 318 void testGetFieldList2()
ferencd@0 319 {
ferencd@0 320 vmime::header hdr;
ferencd@0 321 hdr.parse("\r\n");
ferencd@0 322
ferencd@0 323 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.getFieldList();
ferencd@0 324
ferencd@0 325 VASSERT_EQ("Count", static_cast <unsigned int>(0), res.size());
ferencd@0 326 }
ferencd@0 327
ferencd@0 328 // find function tests
ferencd@0 329 void testFind1()
ferencd@0 330 {
ferencd@0 331 vmime::header hdr;
ferencd@0 332 hdr.parse("A: a\r\nB: b\r\nC: c\r\nB: d\r\n");
ferencd@0 333
ferencd@0 334 vmime::shared_ptr <vmime::headerField> res = hdr.findField("B");
ferencd@0 335
ferencd@0 336 VASSERT_EQ("Value", "B: b", getFieldValue(*res));
ferencd@0 337 }
ferencd@0 338
ferencd@0 339 // getAllByName function tests
ferencd@0 340 void testFindAllFields1()
ferencd@0 341 {
ferencd@0 342 vmime::header hdr;
ferencd@0 343 hdr.parse("A: a1\nC: c1\n");
ferencd@0 344
ferencd@0 345 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.findAllFields("B");
ferencd@0 346
ferencd@0 347 VASSERT_EQ("Count", static_cast <unsigned int>(0), res.size());
ferencd@0 348 }
ferencd@0 349
ferencd@0 350 void testFindAllFields2()
ferencd@0 351 {
ferencd@0 352 vmime::header hdr;
ferencd@0 353 hdr.parse("A: a1\nB: b1\nB: b2\nC: c1\n");
ferencd@0 354
ferencd@0 355 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.findAllFields("B");
ferencd@0 356
ferencd@0 357 VASSERT_EQ("Count", static_cast <unsigned int>(2), res.size());
ferencd@0 358 VASSERT_EQ("First value", "B: b1", headerTest::getFieldValue(*res[0]));
ferencd@0 359 VASSERT_EQ("Second value", "B: b2", headerTest::getFieldValue(*res[1]));
ferencd@0 360 }
ferencd@0 361
ferencd@0 362 void testFindAllFields3()
ferencd@0 363 {
ferencd@0 364 vmime::header hdr;
ferencd@0 365 hdr.parse("A: a1\nB: b1\nB: b2\nC: c1\nC: c3\nC: c2\n");
ferencd@0 366
ferencd@0 367 std::vector <vmime::shared_ptr <vmime::headerField> > res = hdr.findAllFields("C");
ferencd@0 368
ferencd@0 369 VASSERT_EQ("Count", static_cast <unsigned int>(3), res.size());
ferencd@0 370 VASSERT_EQ("First value", "C: c1", headerTest::getFieldValue(*res[0]));
ferencd@0 371 VASSERT_EQ("Second value", "C: c3", headerTest::getFieldValue(*res[1]));
ferencd@0 372 VASSERT_EQ("Second value", "C: c2", headerTest::getFieldValue(*res[2]));
ferencd@0 373 }
ferencd@0 374
ferencd@0 375 VMIME_TEST_SUITE_END
ferencd@0 376