File indexing completed on 2024-03-24 03:56:12
0001 /* 0002 This file is part of the KContacts framework. 0003 SPDX-FileCopyrightText: 2007 Tobias Koenig <tokoe@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "addresstest.h" 0009 #include "addresseelist.h" 0010 #include "kcontacts/address.h" 0011 #include "vcardtool_p.h" 0012 #include <KConfig> 0013 #include <KConfigGroup> 0014 #include <QStandardPaths> 0015 #include <QTest> 0016 0017 QTEST_MAIN(AddressTest) 0018 void initLocale() 0019 { 0020 qputenv("LANG", "it_CH"); 0021 QLocale::setDefault(QLocale(QLocale::Italian, QLocale::Switzerland)); 0022 } 0023 0024 Q_CONSTRUCTOR_FUNCTION(initLocale) 0025 0026 void AddressTest::initTestCase() 0027 { 0028 } 0029 0030 void AddressTest::emptyTest() 0031 { 0032 KContacts::Address address; 0033 0034 QVERIFY(address.isEmpty()); 0035 } 0036 0037 void AddressTest::storeTest() 0038 { 0039 KContacts::Address address; 0040 0041 address.setId(QStringLiteral("My Id")); 0042 address.setType(KContacts::Address::Home); 0043 address.setPostOfficeBox(QStringLiteral("1234")); 0044 address.setExtended(QStringLiteral("My Extended Label")); 0045 address.setStreet(QStringLiteral("My Street")); 0046 address.setLocality(QStringLiteral("My Locality")); 0047 address.setRegion(QStringLiteral("My Region")); 0048 address.setPostalCode(QStringLiteral("My PostalCode")); 0049 address.setCountry(QStringLiteral("My Country")); 0050 address.setLabel(QStringLiteral("My Label")); 0051 0052 QCOMPARE(address.id(), QStringLiteral("My Id")); 0053 QCOMPARE(address.type(), KContacts::Address::Home); 0054 QCOMPARE(address.postOfficeBox(), QStringLiteral("1234")); 0055 QCOMPARE(address.extended(), QStringLiteral("My Extended Label")); 0056 QCOMPARE(address.street(), QStringLiteral("My Street")); 0057 QCOMPARE(address.locality(), QStringLiteral("My Locality")); 0058 QCOMPARE(address.region(), QStringLiteral("My Region")); 0059 QCOMPARE(address.postalCode(), QStringLiteral("My PostalCode")); 0060 QCOMPARE(address.country(), QStringLiteral("My Country")); 0061 QCOMPARE(address.label(), QStringLiteral("My Label")); 0062 QVERIFY(!address.geo().isValid()); 0063 } 0064 0065 void AddressTest::equalsTest() 0066 { 0067 KContacts::Address address1; 0068 KContacts::Address address2; 0069 0070 address1.setId(QStringLiteral("My Id")); 0071 address1.setType(KContacts::Address::Home); 0072 address1.setPostOfficeBox(QStringLiteral("1234")); 0073 address1.setExtended(QStringLiteral("My Extended Label")); 0074 address1.setStreet(QStringLiteral("My Street")); 0075 address1.setLocality(QStringLiteral("My Locality")); 0076 address1.setRegion(QStringLiteral("My Region")); 0077 address1.setPostalCode(QStringLiteral("My Postalcode")); 0078 address1.setCountry(QStringLiteral("My country")); 0079 address1.setLabel(QStringLiteral("My Label")); 0080 0081 address2.setId(QStringLiteral("My Id")); 0082 address2.setType(KContacts::Address::Home); 0083 address2.setPostOfficeBox(QStringLiteral("1234")); 0084 address2.setExtended(QStringLiteral("My Extended Label")); 0085 address2.setStreet(QStringLiteral("My Street")); 0086 address2.setLocality(QStringLiteral("My Locality")); 0087 address2.setRegion(QStringLiteral("My Region")); 0088 address2.setPostalCode(QStringLiteral("My Postalcode")); 0089 address2.setCountry(QStringLiteral("My country")); 0090 address2.setLabel(QStringLiteral("My Label")); 0091 0092 QVERIFY(address1 == address2); 0093 } 0094 0095 void AddressTest::differsTest() 0096 { 0097 KContacts::Address address1(KContacts::Address::Home); 0098 KContacts::Address address2(KContacts::Address::Work); 0099 0100 QVERIFY(address1 != address2); 0101 } 0102 0103 void AddressTest::assignmentTest() 0104 { 0105 KContacts::Address address1; 0106 KContacts::Address address2; 0107 0108 address1.setId(QStringLiteral("My Id")); 0109 address1.setType(KContacts::Address::Home); 0110 address1.setPostOfficeBox(QStringLiteral("1234")); 0111 address1.setExtended(QStringLiteral("My Extended Label")); 0112 address1.setStreet(QStringLiteral("My Street")); 0113 address1.setLocality(QStringLiteral("My Locality")); 0114 address1.setRegion(QStringLiteral("My Region")); 0115 address1.setPostalCode(QStringLiteral("My Postalcode")); 0116 address1.setCountry(QStringLiteral("My country")); 0117 address1.setLabel(QStringLiteral("My Label")); 0118 0119 address2 = address1; 0120 0121 QVERIFY(address1 == address2); 0122 } 0123 0124 void AddressTest::serializeTest() 0125 { 0126 KContacts::Address address1; 0127 KContacts::Address address2; 0128 0129 address1.setType(KContacts::Address::Work); 0130 address1.setPostOfficeBox(QStringLiteral("1234")); 0131 address1.setExtended(QStringLiteral("My Extended Label")); 0132 address1.setStreet(QStringLiteral("My Street")); 0133 address1.setLocality(QStringLiteral("My Locality")); 0134 address1.setRegion(QStringLiteral("My Region")); 0135 address1.setPostalCode(QStringLiteral("My Postalcode")); 0136 address1.setCountry(QStringLiteral("My country")); 0137 address1.setLabel(QStringLiteral("My Label")); 0138 0139 QByteArray data; 0140 QDataStream s(&data, QIODevice::WriteOnly); 0141 s << address1; 0142 0143 QDataStream t(&data, QIODevice::ReadOnly); 0144 t >> address2; 0145 0146 QVERIFY(address1 == address2); 0147 } 0148 0149 void AddressTest::formatTest() 0150 { 0151 { 0152 KContacts::Address address; 0153 address.setStreet(QStringLiteral("Lummerlandstr. 1")); 0154 address.setPostalCode(QStringLiteral("12345")); 0155 address.setLocality(QStringLiteral("Lummerstadt")); 0156 address.setCountry(QStringLiteral("Germany")); 0157 0158 const QString result( 0159 QStringLiteral("Jim Knopf\nLummerlandstr. 1\n" 0160 "12345 Lummerstadt\n\nGERMANIA")); 0161 0162 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Jim Knopf")), result); 0163 } 0164 0165 { 0166 KContacts::Address address; 0167 address.setStreet(QStringLiteral("457 Foobar Ave")); 0168 address.setPostalCode(QStringLiteral("1A2B3C")); 0169 address.setLocality(QStringLiteral("Nervousbreaktown")); 0170 address.setRegion(QStringLiteral("DC")); 0171 address.setCountry(QStringLiteral("United States of America")); 0172 0173 const QString result( 0174 QStringLiteral("Huck Finn\n457 Foobar Ave\nNERVOUSBREAKTOWN," 0175 " DC 1A2B3C\n\nSTATI UNITI")); 0176 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Huck Finn")), result); 0177 } 0178 0179 { 0180 KContacts::Address address; 0181 address.setStreet(QStringLiteral("Lummerlandstr. 1")); 0182 address.setPostalCode(QStringLiteral("12345")); 0183 address.setLocality(QStringLiteral("Lummerstadt")); 0184 address.setCountry(QStringLiteral("Deutschland")); 0185 0186 const QString result( 0187 QStringLiteral("Jim Knopf\nLummerlandstr. 1\n" 0188 "12345 Lummerstadt\n\nGERMANIA")); 0189 0190 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Jim Knopf")), result); 0191 } 0192 0193 { 0194 KContacts::Address address; 0195 address.setStreet(QStringLiteral("Lummerlandstr. 1")); 0196 address.setPostalCode(QStringLiteral("12345")); 0197 address.setLocality(QStringLiteral("Lummerstadt")); 0198 address.setCountry(QString()); 0199 0200 const QString result(QStringLiteral("Jim Knopf\nLummerlandstr. 1\n12345 Lummerstadt")); 0201 0202 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Jim Knopf")), result); 0203 } 0204 0205 { 0206 KContacts::Address address; 0207 address.setStreet(QStringLiteral("Haus Randa")); 0208 address.setPostalCode(QStringLiteral("1234")); 0209 address.setLocality(QStringLiteral("Randa")); 0210 address.setPostOfficeBox(QStringLiteral("5678")); 0211 address.setCountry(QStringLiteral("Schweiz")); 0212 0213 // we want the Italian variant of the Swiss format for it_CH 0214 const QString result(QStringLiteral("Dr. Konqui\nCasella postale 5678\nHaus Randa\n1234 Randa\n\nSVIZZERA")); 0215 0216 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Dr. Konqui")), result); 0217 } 0218 0219 { 0220 KContacts::Address address; 0221 address.setStreet(QStringLiteral("Haus Randa")); 0222 address.setPostalCode(QStringLiteral("1234")); 0223 address.setLocality(QStringLiteral("Randa")); 0224 address.setPostOfficeBox(QStringLiteral("5678")); 0225 address.setCountry(QStringLiteral("CH")); 0226 0227 // we want the Italian variant of the Swiss format for it_CH 0228 const QString result(QStringLiteral("Dr. Konqui\nCasella postale 5678\nHaus Randa\n1234 Randa\n\nSVIZZERA")); 0229 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Dr. Konqui")), result); 0230 } 0231 0232 { 0233 KContacts::Address address; 0234 address.setCountry(QStringLiteral("CH")); 0235 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QString()), QLatin1String("SVIZZERA")); 0236 } 0237 0238 { 0239 // business format for postal style 0240 KContacts::Address address; 0241 address.setCountry(QStringLiteral("AT")); 0242 address.setLocality(QStringLiteral("Berlin")); 0243 address.setPostalCode(QStringLiteral("10969")); 0244 address.setStreet(QStringLiteral("Prinzenstraße 85 F")); 0245 const auto result = QString::fromUtf8("KDE e.V.\nz.Hd. Dr. Konqi\nPrinzenstraße 85 F\n10969 Berlin\n\nAUSTRIA"); 0246 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal, QStringLiteral("Dr. Konqi"), QStringLiteral("KDE e.V.")), result); 0247 } 0248 0249 { 0250 // local vs latin script formats 0251 KContacts::Address address; 0252 address.setCountry(QStringLiteral("JP")); 0253 address.setRegion(QStringLiteral("Tokyo")); 0254 address.setLocality(QStringLiteral("Minato-ku")); 0255 address.setPostalCode(QStringLiteral("106-0047")); 0256 address.setStreet(QStringLiteral("4-6-28 Minami-Azabu")); 0257 auto result = QString::fromUtf8("4-6-28 Minami-Azabu, Minato-ku\nTOKYO 106-0047\n\nGIAPPONE"); 0258 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal), result); 0259 0260 address.setRegion(QStringLiteral("東京")); 0261 address.setLocality(QStringLiteral("都港区")); 0262 address.setPostalCode(QStringLiteral("106-0047")); 0263 address.setStreet(QStringLiteral("南麻布 4-6-28")); 0264 result = QString::fromUtf8("〒106-0047\n東京都港区南麻布 4-6-28\n\nGIAPPONE"); 0265 QCOMPARE(address.formatted(KContacts::AddressFormatStyle::Postal), result); 0266 } 0267 } 0268 0269 void AddressTest::shouldExportVcard3() 0270 { 0271 KContacts::Address address; 0272 0273 address.setId(QStringLiteral("My Id")); 0274 address.setType(KContacts::Address::Home); 0275 address.setPostOfficeBox(QStringLiteral("1234")); 0276 address.setExtended(QStringLiteral("My Extended Label")); 0277 address.setStreet(QStringLiteral("My Street")); 0278 address.setLocality(QStringLiteral("My Locality")); 0279 address.setRegion(QStringLiteral("My Region")); 0280 address.setPostalCode(QStringLiteral("My Postalcode")); 0281 address.setCountry(QStringLiteral("My country")); 0282 address.setLabel(QStringLiteral("My Label")); 0283 0284 KContacts::AddresseeList lst; 0285 KContacts::Addressee addr; 0286 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0287 addr.setUid(QStringLiteral("testuid")); 0288 addr.insertAddress(address); 0289 lst << addr; 0290 0291 KContacts::VCardTool vcard; 0292 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v3_0); 0293 QByteArray expected( 0294 "BEGIN:VCARD\r\n" 0295 "VERSION:3.0\r\n" 0296 "ADR;TYPE=home:1234;My Extended Label;My Street;My Locality;My Region;My Pos\r\n" 0297 " talcode;My country\r\n" 0298 "EMAIL:foo@kde.org\r\n" 0299 "LABEL;TYPE=home:My Label\r\n" 0300 "N:;;;;\r\n" 0301 "UID:testuid\r\n" 0302 "END:VCARD\r\n\r\n"); 0303 QCOMPARE(ba, expected); 0304 } 0305 0306 void AddressTest::shouldParseAddressVCard3() 0307 { 0308 QByteArray vcarddata( 0309 "BEGIN:VCARD\n" 0310 "VERSION:3.0\n" 0311 "N:LastName;FirstName;;;\n" 0312 "ADR;TYPE=home:1234;My Extended Label;My Street;My Locality;My Region;My Pos\r\n" 0313 " talcode;My country\r\n" 0314 "UID:c80cf296-0825-4eb0-ab16-1fac1d522a33@xxxxxx.xx\n" 0315 "LABEL;TYPE=home:My Label\r\n" 0316 "REV:2015-03-14T09:24:45+00:00\n" 0317 "FN:FirstName LastName\n" 0318 "END:VCARD\n"); 0319 0320 KContacts::VCardTool vcard; 0321 const KContacts::AddresseeList lst = vcard.parseVCards(vcarddata); 0322 QCOMPARE(lst.count(), 1); 0323 QCOMPARE(lst.at(0).addresses().count(), 1); 0324 KContacts::Address address = lst.at(0).addresses().at(0); 0325 QCOMPARE(address.type(), KContacts::Address::Home); 0326 QCOMPARE(address.postOfficeBox(), QStringLiteral("1234")); 0327 QCOMPARE(address.extended(), QStringLiteral("My Extended Label")); 0328 QCOMPARE(address.region(), QStringLiteral("My Region")); 0329 QCOMPARE(address.street(), QStringLiteral("My Street")); 0330 QCOMPARE(address.country(), QStringLiteral("My country")); 0331 QCOMPARE(address.postalCode(), QStringLiteral("My Postalcode")); 0332 QCOMPARE(address.label(), QStringLiteral("My Label")); 0333 } 0334 0335 void AddressTest::shouldParseAddressVCard4() 0336 { 0337 QByteArray vcarddata( 0338 "BEGIN:VCARD\r\n" 0339 "VERSION:4.0\r\n" 0340 "ADR;LABEL=\"My Label\";TYPE=home:1234;My Extended Label;My Street;My Locality\r\n" 0341 " ;My Region;My Postalcode;My country\r\nEMAIL:foo@kde.org\r\n" 0342 "N:;;;;\r\n" 0343 "UID:testuid\r\n" 0344 "END:VCARD\r\n\r\n"); 0345 KContacts::VCardTool vcard; 0346 const KContacts::AddresseeList lst = vcard.parseVCards(vcarddata); 0347 QCOMPARE(lst.count(), 1); 0348 QCOMPARE(lst.at(0).addresses().count(), 1); 0349 KContacts::Address address = lst.at(0).addresses().at(0); 0350 QCOMPARE(address.type(), KContacts::Address::Home); 0351 QCOMPARE(address.postOfficeBox(), QStringLiteral("1234")); 0352 QCOMPARE(address.extended(), QStringLiteral("My Extended Label")); 0353 QCOMPARE(address.region(), QStringLiteral("My Region")); 0354 QCOMPARE(address.street(), QStringLiteral("My Street")); 0355 QCOMPARE(address.country(), QStringLiteral("My country")); 0356 QCOMPARE(address.postalCode(), QStringLiteral("My Postalcode")); 0357 QCOMPARE(address.label(), QStringLiteral("My Label")); 0358 } 0359 0360 void AddressTest::shouldParseAddressVCard4WithGeoPosition() 0361 { 0362 QByteArray vcarddata( 0363 "BEGIN:VCARD\r\n" 0364 "VERSION:4.0\r\n" 0365 "ADR;GEO=\"geo:22.500000,45.099998\";LABEL=\"My Label\";TYPE=home:1234;My Extend\r\n" 0366 " ed Label;My Street;My Locality;My Region;My Postalcode;My country\r\n" 0367 "EMAIL:foo@kde.org\r\n" 0368 "N:;;;;\r\n" 0369 "UID:testuid\r\n" 0370 "END:VCARD\r\n\r\n"); 0371 KContacts::VCardTool vcard; 0372 const KContacts::AddresseeList lst = vcard.parseVCards(vcarddata); 0373 QCOMPARE(lst.count(), 1); 0374 QCOMPARE(lst.at(0).addresses().count(), 1); 0375 KContacts::Address address = lst.at(0).addresses().at(0); 0376 QCOMPARE(address.type(), KContacts::Address::Home); 0377 QCOMPARE(address.postOfficeBox(), QStringLiteral("1234")); 0378 QCOMPARE(address.extended(), QStringLiteral("My Extended Label")); 0379 QCOMPARE(address.region(), QStringLiteral("My Region")); 0380 QCOMPARE(address.street(), QStringLiteral("My Street")); 0381 QCOMPARE(address.country(), QStringLiteral("My country")); 0382 QCOMPARE(address.postalCode(), QStringLiteral("My Postalcode")); 0383 QCOMPARE(address.label(), QStringLiteral("My Label")); 0384 KContacts::Geo geo = address.geo(); 0385 QVERIFY(geo.isValid()); 0386 QCOMPARE(geo.latitude(), 22.5f); 0387 QCOMPARE(geo.longitude(), 45.1f); 0388 } 0389 0390 void AddressTest::shouldExportVCard4WithGeoPosition() 0391 { 0392 KContacts::Address address; 0393 0394 address.setId(QStringLiteral("My Id")); 0395 address.setType(KContacts::Address::Home); 0396 address.setPostOfficeBox(QStringLiteral("1234")); 0397 address.setExtended(QStringLiteral("My Extended Label")); 0398 address.setStreet(QStringLiteral("My Street")); 0399 address.setLocality(QStringLiteral("My Locality")); 0400 address.setRegion(QStringLiteral("My Region")); 0401 address.setPostalCode(QStringLiteral("My Postalcode")); 0402 address.setCountry(QStringLiteral("My country")); 0403 address.setLabel(QStringLiteral("My Label")); 0404 0405 KContacts::Geo geo; 0406 0407 geo.setLatitude(22.5f); 0408 geo.setLongitude(45.1f); 0409 address.setGeo(geo); 0410 0411 KContacts::AddresseeList lst; 0412 KContacts::Addressee addr; 0413 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0414 addr.setUid(QStringLiteral("testuid")); 0415 addr.insertAddress(address); 0416 lst << addr; 0417 0418 KContacts::VCardTool vcard; 0419 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v4_0); 0420 QByteArray expected( 0421 "BEGIN:VCARD\r\n" 0422 "VERSION:4.0\r\n" 0423 "ADR;GEO=\"geo:22.500000,45.099998\";LABEL=\"My Label\";TYPE=home:1234;My Extend\r\n" 0424 " ed Label;My Street;My Locality;My Region;My Postalcode;My country\r\n" 0425 "EMAIL:foo@kde.org\r\n" 0426 "N:;;;;\r\n" 0427 "UID:testuid\r\n" 0428 "END:VCARD\r\n\r\n"); 0429 QCOMPARE(ba, expected); 0430 } 0431 0432 void AddressTest::shouldExportVcard4() 0433 { 0434 KContacts::Address address; 0435 0436 address.setId(QStringLiteral("My Id")); 0437 address.setType(KContacts::Address::Home); 0438 address.setPostOfficeBox(QStringLiteral("1234")); 0439 address.setExtended(QStringLiteral("My Extended Label")); 0440 address.setStreet(QStringLiteral("My Street")); 0441 address.setLocality(QStringLiteral("My Locality")); 0442 address.setRegion(QStringLiteral("My Region")); 0443 address.setPostalCode(QStringLiteral("My Postalcode")); 0444 address.setCountry(QStringLiteral("My country")); 0445 address.setLabel(QStringLiteral("My Label")); 0446 0447 KContacts::AddresseeList lst; 0448 KContacts::Addressee addr; 0449 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0450 addr.setUid(QStringLiteral("testuid")); 0451 addr.insertAddress(address); 0452 lst << addr; 0453 0454 KContacts::VCardTool vcard; 0455 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v4_0); 0456 QByteArray expected( 0457 "BEGIN:VCARD\r\n" 0458 "VERSION:4.0\r\n" 0459 "ADR;LABEL=\"My Label\";TYPE=home:1234;My Extended Label;My Street;My Locality\r\n" 0460 " ;My Region;My Postalcode;My country\r\nEMAIL:foo@kde.org\r\n" 0461 "N:;;;;\r\n" 0462 "UID:testuid\r\n" 0463 "END:VCARD\r\n\r\n"); 0464 QCOMPARE(ba, expected); 0465 } 0466 0467 void AddressTest::testGeoUri() 0468 { 0469 KContacts::Address addr; 0470 addr.setCountry(QStringLiteral("DE")); 0471 addr.setRegion(QStringLiteral("BE")); 0472 addr.setLocality(QStringLiteral("Berlin")); 0473 addr.setPostalCode(QStringLiteral("10969")); 0474 addr.setStreet(QStringLiteral("Prinzenstraße 85 F")); 0475 addr.setExtended(QStringLiteral("East wing")); 0476 0477 QCOMPARE(addr.geoUri(), QUrl(QStringLiteral("geo:0,0?q=Prinzenstraße 85 F,10969 Berlin,DE"))); 0478 0479 addr.setGeo({52.503, 13.41}); 0480 QCOMPARE(addr.geoUri(), QUrl(QStringLiteral("geo:52.503,13.41"))); 0481 } 0482 0483 #include "moc_addresstest.cpp"