diff -r 000000000000 -r 876b1a06bc25 tests/auto/qcontactdetails/tst_qcontactdetails.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/auto/qcontactdetails/tst_qcontactdetails.cpp Wed Aug 25 15:49:42 2010 +0300 @@ -0,0 +1,1198 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "qtcontacts.h" + +//TESTED_CLASS= +//TESTED_FILES= + +QTM_USE_NAMESPACE +class tst_QContactDetails : public QObject +{ +Q_OBJECT + +public: + tst_QContactDetails(); + virtual ~tst_QContactDetails(); + +public slots: + void init(); + void cleanup(); + +private slots: + // leaf class testing + void address(); + void anniversary(); + void avatar(); + void birthday(); + void displayLabel(); + void emailAddress(); + void family(); + void gender(); + void geolocation(); + void guid(); + void name(); + void nickname(); + void note(); + void onlineAccount(); + void organization(); + void phoneNumber(); + void ringtone(); + void syncTarget(); + void tag(); + void thumbnail(); + void timestamp(); + void type(); + void url(); + + // custom definition testing + void custom(); +}; + +tst_QContactDetails::tst_QContactDetails() +{ +} + +tst_QContactDetails::~tst_QContactDetails() +{ +} + +void tst_QContactDetails::init() +{ +} + +void tst_QContactDetails::cleanup() +{ +} + +void tst_QContactDetails::address() +{ + QContact c; + QContactAddress a1, a2; + + QVERIFY(a1.isEmpty()); + QVERIFY(a2.isEmpty()); + + // test property set + QCOMPARE(a1.street(), QString()); + a1.setStreet("68 Imaginary Avenue"); + a1.setCountry("Australia"); + QCOMPARE(a1.street(), QString("68 Imaginary Avenue")); + a1.setStreet("1234"); + QCOMPARE(a1.street(), QString("1234")); + a1.setPostOfficeBox("PO Box 5678"); + QCOMPARE(a1.postOfficeBox(), QString("PO Box 5678")); + + + // Sub types + a1.setSubTypes(QContactAddress::SubTypeDomestic); + QCOMPARE(a1.subTypes(), QStringList() << QLatin1String(QContactAddress::SubTypeDomestic)); + + QStringList sl; + sl << QLatin1String(QContactAddress::SubTypeParcel) << QLatin1String(QContactAddress::SubTypePostal); + a1.setSubTypes(sl); + QCOMPARE(a1.subTypes(), sl); + + // test property add + QVERIFY(c.saveDetail(&a1)); + QCOMPARE(c.details(QContactAddress::DefinitionName).count(), 1); + QCOMPARE(QContactAddress(c.details(QContactAddress::DefinitionName).value(0)).street(), a1.street()); + a2.setStreet("Test"); + QVERIFY(c.saveDetail(&a2)); + QCOMPARE(c.details(QContactAddress::DefinitionName).count(), 2); + + // test property update + a1.setValue("label","label1"); + a1.setStreet("12345"); + QVERIFY(c.saveDetail(&a1)); + + // test property remove + QVERIFY(c.removeDetail(&a1)); + QCOMPARE(c.details(QContactAddress::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&a2)); + QVERIFY(!c.removeDetail(&a2)); // cannot remove twice + QCOMPARE(c.details(QContactAddress::DefinitionName).count(), 0); + + QContactAddress a3; + + // set street + a3.setStreet("Test"); + QCOMPARE(a3.street(), QString("Test")); + a3.setStreet(""); + + // set locality + a3.setLocality("Test"); + QCOMPARE(a3.locality(), QString("Test")); + a3.setLocality(""); + + // set region + a3.setRegion("Test"); + QCOMPARE(a3.region(), QString("Test")); + a3.setRegion(""); + + // set postcode + a3.setPostcode("Test"); + QCOMPARE(a3.postcode(), QString("Test")); + a3.setPostcode(""); + + // set country + a3.setCountry("Test"); + QCOMPARE(a3.country(), QString("Test")); + a3.setCountry(""); + + // subtypes + a3.setSubTypes(QContactAddress::SubTypeDomestic); + QCOMPARE(a3.subTypes(), QStringList(QContactAddress::SubTypeDomestic)); + a3.setSubTypes(QStringList() << QContactAddress::SubTypeInternational << QContactAddress::SubTypePostal); + QCOMPARE(a3.subTypes(), QStringList() << QContactAddress::SubTypeInternational << QContactAddress::SubTypePostal); +} + +void tst_QContactDetails::anniversary() +{ + QContact c; + QContactAnniversary a1, a2; + QDate currDate = QDate::currentDate(); + + // test property set + a1.setCalendarId("1234"); + QCOMPARE(a1.calendarId(), QString("1234")); + QCOMPARE(a1.value(QContactAnniversary::FieldCalendarId), QString("1234")); + a1.setEvent("4321"); + QCOMPARE(a1.event(), QString("4321")); + QCOMPARE(a1.value(QContactAnniversary::FieldEvent), QString("4321")); + a1.setOriginalDate(currDate); + QCOMPARE(a1.originalDate(), currDate); + QCOMPARE(a1.value(QContactAnniversary::FieldOriginalDate), currDate); + a1.setSubType(QContactAnniversary::SubTypeWedding); + QCOMPARE(a1.subType(), QString(QLatin1String(QContactAnniversary::SubTypeWedding))); + QCOMPARE(a1.value(QContactAnniversary::FieldSubType), QString(QLatin1String(QContactAnniversary::SubTypeWedding))); + + // test property add + QVERIFY(c.saveDetail(&a1)); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).count(), 1); + QCOMPARE(QContactAnniversary(c.details(QContactAnniversary::DefinitionName).value(0)).event(), a1.event()); + + // test property update + a1.setValue("label","label1"); + a1.setCalendarId("12345"); + QVERIFY(c.saveDetail(&a1)); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).value(0).value(QContactAnniversary::FieldCalendarId), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&a1)); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&a2)); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&a2)); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&a2) == false); + QCOMPARE(c.details(QContactAnniversary::DefinitionName).count(), 0); +} + +void tst_QContactDetails::avatar() +{ + QContact c; + QContactAvatar a1, a2; + + // test property set + a1.setImageUrl(QUrl("1234")); + QCOMPARE(a1.imageUrl(), QUrl("1234")); + QCOMPARE(a1.value(QContactAvatar::FieldImageUrl), QUrl("1234")); + a2.setVideoUrl(QUrl("videoUrl")); + a2.setImageUrl(QUrl("imageUrl")); + QCOMPARE(a2.videoUrl(), QUrl("videoUrl")); + QCOMPARE(a2.value(QContactAvatar::FieldVideoUrl), QUrl("videoUrl")); + QCOMPARE(a2.imageUrl(), QUrl("imageUrl")); + QCOMPARE(a2.value(QContactAvatar::FieldImageUrl), QUrl("imageUrl")); + + // test property add + QVERIFY(c.saveDetail(&a1)); + QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 1); + QCOMPARE(QContactAvatar(c.details(QContactAvatar::DefinitionName).value(0)).imageUrl(), a1.imageUrl()); + + // test property update + a1.setValue("label","label1"); + a1.setImageUrl(QUrl("12345")); + QVERIFY(c.saveDetail(&a1)); + QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value(QContactAvatar::FieldImageUrl), QUrl("12345")); + + // test property remove + QVERIFY(c.removeDetail(&a1)); + QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&a2)); + QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&a2)); + QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&a2) == false); + QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 0); +} + +void tst_QContactDetails::birthday() +{ + QContact c; + QContactBirthday b1, b2; + QDate currDate = QDate::currentDate(); + + // test property set + b1.setDate(currDate); + QCOMPARE(b1.date(), currDate); + QCOMPARE(b1.value(QContactBirthday::FieldBirthday), currDate); + + // test property add + QVERIFY(c.saveDetail(&b1)); + QCOMPARE(c.details(QContactBirthday::DefinitionName).count(), 1); + QCOMPARE(QContactBirthday(c.details(QContactBirthday::DefinitionName).value(0)).date(), b1.date()); + + // test property update + b1.setValue("label","label1"); + b1.setDate(currDate.addDays(3)); + QVERIFY(c.saveDetail(&b1)); + QCOMPARE(c.details(QContactBirthday::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactBirthday::DefinitionName).value(0).value(QContactBirthday::FieldBirthday), currDate.addDays(3)); + + // test property remove + QVERIFY(c.removeDetail(&b1)); + QCOMPARE(c.details(QContactBirthday::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&b2)); + QCOMPARE(c.details(QContactBirthday::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&b2)); + QCOMPARE(c.details(QContactBirthday::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&b2) == false); + QCOMPARE(c.details(QContactBirthday::DefinitionName).count(), 0); +} + +void tst_QContactDetails::displayLabel() +{ + QContactDisplayLabel d1; + QContact c; + + QVERIFY(d1.label().isEmpty()); + QVERIFY(d1.value(QContactDisplayLabel::FieldLabel).isEmpty()); + d1.setValue(QContactDisplayLabel::FieldLabel, "Test"); + QVERIFY(d1.value(QContactDisplayLabel::FieldLabel) == QString("Test")); + QVERIFY(d1.label() == QString("Test")); + + QContactDisplayLabel d2; + d2.setValue(QContactDisplayLabel::FieldLabel, "Test 2"); + + // test property add [== fail] + QVERIFY(!c.saveDetail(&d2)); + QCOMPARE(c.details(QContactDisplayLabel::DefinitionName).count(), 1); + + // test property update [== fail] + d1 = c.detail(); + QVERIFY(!c.saveDetail(&d1)); + + // test property remove + QVERIFY(!c.removeDetail(&d1)); // cannot remove display label + QCOMPARE(c.details().count(), 1); +} + +void tst_QContactDetails::emailAddress() +{ + QContact c; + QContactEmailAddress e1, e2; + + // test property set + e1.setEmailAddress("1234"); + QCOMPARE(e1.emailAddress(), QString("1234")); + QCOMPARE(e1.value(QContactEmailAddress::FieldEmailAddress), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&e1)); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).count(), 1); + QCOMPARE(QContactEmailAddress(c.details(QContactEmailAddress::DefinitionName).value(0)).emailAddress(), e1.emailAddress()); + + // test property update + e1.setValue("label","label1"); + e1.setEmailAddress("12345"); + QVERIFY(c.saveDetail(&e1)); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).value(0).value(QContactEmailAddress::FieldEmailAddress), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&e1)); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&e2)); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&e2)); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&e2) == false); + QCOMPARE(c.details(QContactEmailAddress::DefinitionName).count(), 0); +} + +void tst_QContactDetails::family() +{ + QContact c; + QContactFamily f1, f2; + + // test property set + f1.setSpouse("1234"); + QCOMPARE(f1.spouse(), QString("1234")); + QCOMPARE(f1.value(QContactFamily::FieldSpouse), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&f1)); + QCOMPARE(c.details(QContactFamily::DefinitionName).count(), 1); + QCOMPARE(QContactFamily(c.details(QContactFamily::DefinitionName).value(0)).spouse(), f1.spouse()); + + // test property update + f1.setValue("label","label1"); + f1.setSpouse("12345"); + f1.setChildren(QStringList("54321")); + QVERIFY(c.saveDetail(&f1)); + QCOMPARE(c.details(QContactFamily::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactFamily::DefinitionName).value(0).value(QContactFamily::FieldSpouse), QString("12345")); + QCOMPARE(c.details(QContactFamily::DefinitionName).value(0).value(QContactFamily::FieldChildren), QStringList("54321")); + + // test property remove + f2.setSpouse("1111"); + QVERIFY(c.removeDetail(&f1)); + QCOMPARE(c.details(QContactFamily::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&f2)); + QCOMPARE(c.details(QContactFamily::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&f2)); + QCOMPARE(c.details(QContactFamily::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&f2) == false); + QCOMPARE(c.details(QContactFamily::DefinitionName).count(), 0); +} + +void tst_QContactDetails::gender() +{ + QContact c; + QContactGender g1, g2; + + // test property set + g1.setGender("1234"); + QCOMPARE(g1.gender(), QString("1234")); + QCOMPARE(g1.value(QContactGender::FieldGender), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGender::DefinitionName).count(), 1); + QCOMPARE(QContactGender(c.details(QContactGender::DefinitionName).value(0)).gender(), g1.gender()); + + // test property update + g1.setValue("label","label1"); + g1.setGender("12345"); + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGender::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactGender::DefinitionName).value(0).value(QContactGender::FieldGender), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&g1)); + QCOMPARE(c.details(QContactGender::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&g2)); + QCOMPARE(c.details(QContactGender::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&g2)); + QCOMPARE(c.details(QContactGender::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&g2) == false); + QCOMPARE(c.details(QContactGender::DefinitionName).count(), 0); +} + +void tst_QContactDetails::geolocation() +{ + QContact c; + QContactGeoLocation g1, g2; + + // test property set + g1.setLabel("1234"); + QCOMPARE(g1.label(), QString("1234")); + QCOMPARE(g1.value(QContactGeoLocation::FieldLabel), QString("1234")); + g1.setAccuracy(3.2); + QCOMPARE(g1.accuracy(), 3.2); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldAccuracy), QVariant(3.2)); + g1.setAltitude(3.3); + QCOMPARE(g1.altitude(), 3.3); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldAltitude), QVariant(3.3)); + g1.setAltitudeAccuracy(3.4); + QCOMPARE(g1.altitudeAccuracy(), 3.4); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldAltitudeAccuracy), QVariant(3.4)); + g1.setHeading(3.5); + QCOMPARE(g1.heading(), 3.5); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldHeading), QVariant(3.5)); + g1.setLatitude(3.6); + QCOMPARE(g1.latitude(), 3.6); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldLatitude), QVariant(3.6)); + g1.setLongitude(3.7); + QCOMPARE(g1.longitude(), 3.7); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldLongitude), QVariant(3.7)); + QDateTime current = QDateTime::currentDateTime(); + g1.setTimestamp(current); + QCOMPARE(g1.timestamp(), current); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldTimestamp), QVariant(current)); + g1.setSpeed(3.8); + QCOMPARE(g1.speed(), 3.8); + QCOMPARE(g1.variantValue(QContactGeoLocation::FieldSpeed), QVariant(3.8)); + + // test property add + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).count(), 1); + QCOMPARE(QContactGeoLocation(c.details(QContactGeoLocation::DefinitionName).value(0)).label(), g1.label()); + + // test property update + g1.setLabel("12345"); + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).value(0).value(QContactGeoLocation::FieldLabel), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&g1)); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&g2)); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&g2)); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&g2) == false); + QCOMPARE(c.details(QContactGeoLocation::DefinitionName).count(), 0); +} + +void tst_QContactDetails::guid() +{ + QContact c; + QContactGuid g1, g2; + + // test property set + g1.setGuid("1234"); + QCOMPARE(g1.guid(), QString("1234")); + QCOMPARE(g1.value(QContactGuid::FieldGuid), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGuid::DefinitionName).count(), 1); + QCOMPARE(QContactGuid(c.details(QContactGuid::DefinitionName).value(0)).guid(), g1.guid()); + + // test property update + g1.setValue("label","label1"); + g1.setGuid("12345"); + QVERIFY(c.saveDetail(&g1)); + QCOMPARE(c.details(QContactGuid::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactGuid::DefinitionName).value(0).value(QContactGuid::FieldGuid), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&g1)); + QCOMPARE(c.details(QContactGuid::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&g2)); + QCOMPARE(c.details(QContactGuid::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&g2)); + QCOMPARE(c.details(QContactGuid::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&g2) == false); + QCOMPARE(c.details(QContactGuid::DefinitionName).count(), 0); +} + +void tst_QContactDetails::name() +{ + QContact c; + QContactName n1, n2; + + QVERIFY(n1.isEmpty()); + QVERIFY(n2.isEmpty()); + + // test property set + n1.setPrefix("Dr"); + n1.setFirstName("Freddy"); + n1.setMiddleName("William Preston"); + n1.setLastName("Gumboots"); + n1.setSuffix("Esquire"); + QCOMPARE(n1.prefix(), QString("Dr")); + QCOMPARE(n1.firstName(), QString("Freddy")); + QCOMPARE(n1.middleName(), QString("William Preston")); + QCOMPARE(n1.lastName(), QString("Gumboots")); + QCOMPARE(n1.suffix(), QString("Esquire")); + + // Values based (ql1c) + QCOMPARE(n1.value(QContactName::FieldPrefix), QString("Dr")); + QCOMPARE(n1.value(QContactName::FieldFirstName), QString("Freddy")); + QCOMPARE(n1.value(QContactName::FieldMiddleName), QString("William Preston")); + QCOMPARE(n1.value(QContactName::FieldLastName), QString("Gumboots")); + QCOMPARE(n1.value(QContactName::FieldSuffix), QString("Esquire")); + + // Values based (const char *) + QCOMPARE(n1.value(QContactName::FieldPrefix.latin1()), QString("Dr")); + QCOMPARE(n1.value(QContactName::FieldFirstName.latin1()), QString("Freddy")); + QCOMPARE(n1.value(QContactName::FieldMiddleName.latin1()), QString("William Preston")); + QCOMPARE(n1.value(QContactName::FieldLastName.latin1()), QString("Gumboots")); + QCOMPARE(n1.value(QContactName::FieldSuffix.latin1()), QString("Esquire")); + + // Values based (QLatin1String) + QCOMPARE(n1.value(QLatin1String(QContactName::FieldPrefix)), QString("Dr")); + QCOMPARE(n1.value(QLatin1String(QContactName::FieldFirstName)), QString("Freddy")); + QCOMPARE(n1.value(QLatin1String(QContactName::FieldMiddleName)), QString("William Preston")); + QCOMPARE(n1.value(QLatin1String(QContactName::FieldLastName)), QString("Gumboots")); + QCOMPARE(n1.value(QLatin1String(QContactName::FieldSuffix)), QString("Esquire")); + + // test property add + QVERIFY(c.saveDetail(&n1)); + QCOMPARE(c.details(QContactName::DefinitionName).count(), 1); + n2.setFirstName("Billy"); + n2.setLastName("Galoshes"); + QVERIFY(c.saveDetail(&n2)); + QCOMPARE(c.details(QContactName::DefinitionName).count(), 2); + + // test property update + n1.setValue("label","label1"); + QVERIFY(c.saveDetail(&n1)); + + // test property remove + QVERIFY(c.removeDetail(&n1)); // remove + QCOMPARE(c.details(QContactName::DefinitionName).count(), 1); + QVERIFY(c.saveDetail(&n2)); // save but already added; count remains the same. + QCOMPARE(c.details(QContactName::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&n2)); // remove it + QCOMPARE(c.details(QContactName::DefinitionName).count(), 0); + QVERIFY(!c.removeDetail(&n2));// remove now fails + QVERIFY(c.saveDetail(&n1)); // save the original name + QCOMPARE(c.details(QContactName::DefinitionName).count(), 1); +} + +void tst_QContactDetails::nickname() +{ + QContact c; + QContactNickname n1, n2; + + // test property set + n1.setNickname("1234"); + QCOMPARE(n1.nickname(), QString("1234")); + QCOMPARE(n1.value(QContactNickname::FieldNickname), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&n1)); + QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 1); + QCOMPARE(QContactNickname(c.details(QContactNickname::DefinitionName).value(0)).nickname(), n1.nickname()); + + // test property update + n1.setValue("label","label1"); + n1.setNickname("12345"); + QVERIFY(c.saveDetail(&n1)); + QCOMPARE(c.details(QContactNickname::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactNickname::DefinitionName).value(0).value(QContactNickname::FieldNickname), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&n1)); + QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&n2)); + QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&n2)); + QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&n2) == false); + QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0); +} + +void tst_QContactDetails::note() +{ + QContact c; + QContactNote n1, n2; + + // test property set + n1.setNote("lorem ipsum"); + QCOMPARE(n1.note(), QString("lorem ipsum")); + QCOMPARE(n1.value(QContactNote::FieldNote), QString("lorem ipsum")); + + // test property add + QVERIFY(c.saveDetail(&n1)); + QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1); + QCOMPARE(QContactNote(c.details(QContactNote::DefinitionName).value(0)).note(), n1.note()); + + // test property update + n1.setValue("label","label1"); + n1.setNote("orange gypsum"); + QVERIFY(c.saveDetail(&n1)); + QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value(QContactNote::FieldNote), QString("orange gypsum")); + + // test property remove + QVERIFY(c.removeDetail(&n1)); + QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&n2)); + QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&n2)); + QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&n2) == false); + QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0); +} + +void tst_QContactDetails::onlineAccount() +{ + QContact c; + QContactOnlineAccount o1, o2; + + // test property set + o1.setAccountUri("test@nokia.com"); + QCOMPARE(o1.accountUri(), QString("test@nokia.com")); + QCOMPARE(o1.value(QContactOnlineAccount::FieldAccountUri), QString("test@nokia.com")); + + // Sub types + o1.setSubTypes(QContactOnlineAccount::SubTypeSip); + QCOMPARE(o1.subTypes(), QStringList() << QLatin1String(QContactOnlineAccount::SubTypeSip)); + + QStringList sl; + sl << QLatin1String(QContactOnlineAccount::SubTypeImpp) << QLatin1String(QContactOnlineAccount::SubTypeVideoShare); + o1.setSubTypes(sl); + QCOMPARE(o1.subTypes(), sl); + + o1 = QContactOnlineAccount(); + o1.setAccountUri("test@nokia.com"); + + // test property add + QVERIFY(c.saveDetail(&o1)); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 1); + QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri()); + QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri()); + + // test property update + o1.setValue("label","label1"); + o1.setAccountUri("test2@nokia.com"); + QVERIFY(c.saveDetail(&o1)); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).value(0).value(QContactOnlineAccount::FieldAccountUri), QString("test2@nokia.com")); + + // test property remove + QVERIFY(c.removeDetail(&o1)); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&o2)); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&o2)); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&o2) == false); + QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 0); +} + +void tst_QContactDetails::organization() +{ + QContact c; + QContactOrganization o1, o2; + + // test property set + o1.setName("organization one"); + QCOMPARE(o1.name(), QString("organization one")); + QCOMPARE(o1.value(QContactOrganization::FieldName), QString("organization one")); + + o1.setDepartment(QStringList(QString("department one"))); + QCOMPARE(o1.department(), QStringList(QString("department one"))); + QCOMPARE(o1.value(QContactOrganization::FieldDepartment), QStringList(QString("department one"))); + + o1.setLocation("location one"); + QCOMPARE(o1.location(), QString("location one")); + QCOMPARE(o1.value(QContactOrganization::FieldLocation), QString("location one")); + + o1.setLogoUrl(QUrl("logo one")); + QCOMPARE(o1.logoUrl(), QUrl("logo one")); + QCOMPARE(o1.value(QContactOrganization::FieldLogoUrl), QUrl("logo one")); + + o1.setTitle("title one"); + QCOMPARE(o1.title(), QString("title one")); + QCOMPARE(o1.value(QContactOrganization::FieldTitle), QString("title one")); + + o1.setAssistantName("assistant one"); + QCOMPARE(o1.assistantName(), QString("assistant one")); + QCOMPARE(o1.value(QContactOrganization::FieldAssistantName), QString("assistant one")); + + // test property add + QVERIFY(c.saveDetail(&o1)); + QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 1); + QCOMPARE(QContactOrganization(c.details(QContactOrganization::DefinitionName).value(0)).name(), o1.name()); + + // test property update + o1.setName("organization two"); + QVERIFY(c.saveDetail(&o1)); + QCOMPARE(c.details(QContactOrganization::DefinitionName).value(0).value(QContactOrganization::FieldName), QString("organization two")); + + // test property remove + QVERIFY(c.removeDetail(&o1)); + QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&o2)); + QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&o2)); + QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&o2) == false); + QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 0); + + // organization-specific API testing + o1.setDepartment(QStringList(QString("Imaginary Dept"))); + o1.setLocation("Utopia"); + o1.setLogoUrl(QUrl("logo.png")); + o1.setName("Utopian Megacorporation"); + o1.setTitle("Generic Employee"); + c.saveDetail(&o1); + QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldDepartment) == QStringList(QString("Imaginary Dept"))); + QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLocation) == QString("Utopia")); + QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLogoUrl) == QUrl("logo.png")); + QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldName) == QString("Utopian Megacorporation")); + QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldTitle) == QString("Generic Employee")); +} + +void tst_QContactDetails::phoneNumber() +{ + QContact c; + QContactPhoneNumber p1, p2; + + // test property set + p1.setNumber("1234"); + QCOMPARE(p1.number(), QString("1234")); + QCOMPARE(p1.value(QContactPhoneNumber::FieldNumber), QString("1234")); + + // Sub types + p1.setSubTypes(QContactPhoneNumber::SubTypeCar); + QCOMPARE(p1.subTypes(), QStringList() << QLatin1String(QContactPhoneNumber::SubTypeCar)); + + QStringList sl; + sl << QLatin1String(QContactPhoneNumber::SubTypeMobile) << QLatin1String(QContactPhoneNumber::SubTypeFax); + p1.setSubTypes(sl); + QCOMPARE(p1.subTypes(), sl); + + // test property add + QVERIFY(c.saveDetail(&p1)); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 1); + QCOMPARE(QContactPhoneNumber(c.details(QContactPhoneNumber::DefinitionName).value(0)).number(), p1.number()); + + // test property update + p1.setValue("label","label1"); + p1.setNumber("12345"); + QVERIFY(c.saveDetail(&p1)); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).value(0).value(QContactPhoneNumber::FieldNumber), QString("12345")); + + p1.setSubTypes(QContactPhoneNumber::SubTypeDtmfMenu); + c.saveDetail(&p1); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == QStringList(QString(QLatin1String(QContactPhoneNumber::SubTypeDtmfMenu)))); + p1.setSubTypes(QStringList() << QContactPhoneNumber::SubTypeModem << QContactPhoneNumber::SubTypeFax); + c.saveDetail(&p1); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == p1.subTypes()); + + // test property remove + QVERIFY(c.removeDetail(&p1)); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&p2)); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&p2)); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&p2) == false); + QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0); +} + +void tst_QContactDetails::ringtone() +{ + QContact c; + QContactRingtone r1, r2; + + // test property set + r1.setAudioRingtoneUrl(QUrl("audioUrl")); + QCOMPARE(r1.audioRingtoneUrl(), QUrl("audioUrl")); + QCOMPARE(r1.value(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl")); + + // and the other fields + r2.setVideoRingtoneUrl(QUrl("videoUrl")); + QCOMPARE(r2.videoRingtoneUrl(), QUrl("videoUrl")); + QCOMPARE(r2.value(QContactRingtone::FieldVideoRingtoneUrl), QUrl("videoUrl")); + r2.setVibrationRingtoneUrl(QUrl("vibrationUrl")); + QCOMPARE(r2.vibrationRingtoneUrl(), QUrl("vibrationUrl")); + QCOMPARE(r2.value(QContactRingtone::FieldVibrationRingtoneUrl), QUrl("vibrationUrl")); + + // test property add + QVERIFY(c.saveDetail(&r1)); + QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1); + QCOMPARE(QContactRingtone(c.details(QContactRingtone::DefinitionName).value(0)).audioRingtoneUrl(), r1.audioRingtoneUrl()); + + // test property update + r1.setValue("label","label1"); + r1.setAudioRingtoneUrl(QUrl("audioUrl2")); + QVERIFY(c.saveDetail(&r1)); + QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl2")); + + // test property remove + QVERIFY(c.removeDetail(&r1)); + QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&r2)); + QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&r2)); + QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&r2) == false); + QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0); +} + +void tst_QContactDetails::syncTarget() +{ + QContact c; + QContactSyncTarget s1, s2; + + // test property set + s1.setSyncTarget("1234"); + QCOMPARE(s1.syncTarget(), QString("1234")); + QCOMPARE(s1.value(QContactSyncTarget::FieldSyncTarget), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&s1)); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 1); + QCOMPARE(QContactSyncTarget(c.details(QContactSyncTarget::DefinitionName).value(0)).syncTarget(), s1.syncTarget()); + + // test property update + s1.setValue("label","label1"); + s1.setSyncTarget("12345"); + QVERIFY(c.saveDetail(&s1)); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).value(0).value(QContactSyncTarget::FieldSyncTarget), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&s1)); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&s2)); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&s2)); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&s2) == false); + QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0); +} + +void tst_QContactDetails::tag() +{ + QContact c; + QContactTag t1, t2; + + // test property set + t1.setTag("red"); + QCOMPARE(t1.tag(), QString("red")); + QCOMPARE(t1.value(QContactTag::FieldTag), QString("red")); + + // test property add + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1); + QCOMPARE(QContactTag(c.details(QContactTag::DefinitionName).value(0)).tag(), t1.tag()); + QVERIFY(c.saveDetail(&t2)); + QCOMPARE(c.details(QContactTag::DefinitionName).count(), 2); + + // test property update + t1.setValue("label","label1"); + t1.setTag("green"); + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value(QContactTag::FieldTag), QString("green")); + + // test property remove + QVERIFY(c.removeDetail(&t1)); + QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&t2)); + QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&t2) == false); + QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0); +} + +void tst_QContactDetails::thumbnail() +{ + QContact c; + QContactThumbnail t1, t2; + QImage i1, i2; // XXX TODO: FIXME load an image from bytearray + + // test property set + t1.setThumbnail(i1); + QCOMPARE(t1.thumbnail(), i1); + QCOMPARE(t1.value(QContactThumbnail::FieldThumbnail), i1); + + // Make sure we have none to start with + QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 0); + + // test property add + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1); + QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t1.thumbnail()); + + // test property update + t1.setValue("label","label1"); + t1.setThumbnail(i2); + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value(QContactThumbnail::FieldThumbnail), i2); + + // Uniqueness is not currently enforced + QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1); + t2.setThumbnail(i1); + QVERIFY(c.saveDetail(&t2)); + QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 2); // save should overwrite! + QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), i1); + QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t2.thumbnail()); + + QVERIFY(c.removeDetail(&t1)); + QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1); +} + +void tst_QContactDetails::timestamp() +{ + QContact c; + QContactTimestamp t1, t2; + QDateTime modified = QDateTime::currentDateTime(); + QDateTime created = modified.addSecs(-43); + + // test property set + t1.setCreated(created); + QCOMPARE(t1.created(), created); + QCOMPARE(t1.variantValue(QContactTimestamp::FieldCreationTimestamp).toDateTime(), created); + + // test property add + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).count(), 1); + QCOMPARE(QContactTimestamp(c.details(QContactTimestamp::DefinitionName).value(0)).created(), t1.created()); + + // test property update + t1.setValue("label","label1"); + t1.setLastModified(modified); + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).value(0).variantValue(QContactTimestamp::FieldCreationTimestamp).toDateTime(), created); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).value(0).variantValue(QContactTimestamp::FieldModificationTimestamp).toDateTime(), modified); + + // test property remove + QVERIFY(c.removeDetail(&t1)); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).count(), 0); + t2.setCreated(created.addSecs(15)); + QVERIFY(c.saveDetail(&t2)); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&t2)); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&t2) == false); + QCOMPARE(c.details(QContactTimestamp::DefinitionName).count(), 0); +} + +void tst_QContactDetails::type() +{ + QContact c; + QContactType t1, t2; + + // test property set + t1.setType(QContactType::TypeGroup); + QCOMPARE(t1.type(), QString(QLatin1String(QContactType::TypeGroup))); + QCOMPARE(t1.value(QContactType::FieldType), QString(QLatin1String(QContactType::TypeGroup))); + + // test property add + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactType::DefinitionName).count(), 1); + QCOMPARE(QContactType(c.details(QContactType::DefinitionName).value(0)).type(), t1.type()); + + // test property update + t1.setType(QContactType::TypeContact); + QVERIFY(c.saveDetail(&t1)); + QCOMPARE(c.details(QContactType::DefinitionName).value(0).value(QContactType::FieldType), QString(QLatin1String(QContactType::TypeContact))); + + // test property remove + QVERIFY(!c.removeDetail(&t1)); // cannot remove type + QCOMPARE(c.details(QContactType::DefinitionName).count(), 1); + t2.setType(QContactType::TypeGroup); + QVERIFY(c.saveDetail(&t2)); // overwrites t1 + QCOMPARE(c.details(QContactType::DefinitionName).count(), 1); + QVERIFY(!c.removeDetail(&t2)); // cannot remove type - "succeeds" but count remains unchanged + QCOMPARE(c.details(QContactType::DefinitionName).count(), 1); + QVERIFY(!c.removeDetail(&t2)); + QCOMPARE(c.details(QContactType::DefinitionName).count(), 1); +} + +void tst_QContactDetails::url() +{ + QContact c; + QContactUrl u1, u2; + + // test property set + u1.setUrl("1234"); + QCOMPARE(u1.url(), QString("1234")); + QCOMPARE(u1.value(QContactUrl::FieldUrl), QString("1234")); + + u1.setSubType(QContactUrl::SubTypeHomePage); + QCOMPARE(u1.subType(), QString(QLatin1String(QContactUrl::SubTypeHomePage))); + QCOMPARE(u1.value(QContactUrl::FieldSubType), QString(QLatin1String(QContactUrl::SubTypeHomePage))); + + // test property add + QVERIFY(c.saveDetail(&u1)); + QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 1); + QCOMPARE(QContactUrl(c.details(QContactUrl::DefinitionName).value(0)).url(), u1.url()); + + // test property update + u1.setValue("label","label1"); + u1.setUrl("12345"); + QVERIFY(c.saveDetail(&u1)); + QCOMPARE(c.details(QContactUrl::DefinitionName).value(0).value("label"), QString("label1")); + QCOMPARE(c.details(QContactUrl::DefinitionName).value(0).value(QContactUrl::FieldUrl), QString("12345")); + + // test property remove + QVERIFY(c.removeDetail(&u1)); + QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0); + QVERIFY(c.saveDetail(&u2)); + QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 1); + QVERIFY(c.removeDetail(&u2)); + QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0); + QVERIFY(c.removeDetail(&u2) == false); + QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0); +} + + + + + + + + + + + + +// define a custom detail to test inheritance/slicing +class CustomTestDetail : public QContactDetail +{ +public: + Q_DECLARE_CUSTOM_CONTACT_DETAIL(CustomTestDetail, "CustomTestDetail") + Q_DECLARE_LATIN1_CONSTANT(FieldTestLabel, "TestLabel"); + + ~CustomTestDetail() + { + // we define a dtor which does some random stuff + // to test that the virtual dtor works as expected. + + int *temp = 0; + int random = qrand(); + random += 1; + if (random > 0) { + temp = new int; + *temp = 5; + } + + if (temp) { + delete temp; + } + } + + void setTestLabel(const QString& testLabel) { setValue(FieldTestLabel, testLabel); } + QString testLabel() const { return value(FieldTestLabel); } +}; +Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::FieldTestLabel, "TestLabel"); +Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::DefinitionName, "CustomTestDetail"); + +void tst_QContactDetails::custom() +{ + QContact c; + + // first, test a custom definition detail + QContactDetail c1("mycustom"), c2("mycustom"); + + // test property set + c1.setValue("custom", "1234"); + QCOMPARE(c1.value("custom"), QString("1234")); + + // test property add + QVERIFY(c.saveDetail(&c1)); + QCOMPARE(c.details("mycustom").count(), 1); + QCOMPARE((c.details("mycustom").value(0)).value("custom"), c1.value("custom")); + + // test property update + c1.setValue("label","label1"); + c1.setValue("custom", "12345"); + QVERIFY(c.saveDetail(&c1)); + + // test property remove + QVERIFY(c.removeDetail(&c1)); + QCOMPARE(c.details("mycustom").count(), 0); + QVERIFY(c.saveDetail(&c2)); + QCOMPARE(c.details("mycustom").count(), 1); + QVERIFY(c.removeDetail(&c2)); + QCOMPARE(c.details("mycustom").count(), 0); + QVERIFY(c.removeDetail(&c2) == false); + QCOMPARE(c.details("mycustom").count(), 0); + + + // then, test a custom subclass (we don't test registration of the custom definition, however) + CustomTestDetail ctd1, ctd2; + ctd1.setTestLabel("this is a test"); + ctd2.setTestLabel("test 2"); + QCOMPARE(ctd1.testLabel(), QString("this is a test")); + + // prior to add + QCOMPARE(c.details("CustomTestDetail").count(), 0); + QCOMPARE(c.details().count(), 0); + + // test detail add + QVERIFY(c.saveDetail(&ctd1)); + QCOMPARE(c.details("CustomTestDetail").count(), 1); + QCOMPARE(c.details().count(), 1); + QCOMPARE(c.details().first().testLabel(), QString("this is a test")); + + // test detail update + ctd1.setTestLabel("this is a modified test"); + QVERIFY(c.saveDetail(&ctd1)); // should merely update + QCOMPARE(c.details("CustomTestDetail").count(), 1); + QCOMPARE(c.details().count(), 1); + QCOMPARE(c.details().first().testLabel(), QString("this is a modified test")); + + // test detail remove + QVERIFY(c.removeDetail(&ctd1)); + QCOMPARE(c.details("CustomTestDetail").count(), 0); + QCOMPARE(c.details().count(), 0); + + // now test how custom details interact with foreach loops. + QVERIFY(c.saveDetail(&ctd1)); + QVERIFY(c.saveDetail(&ctd2)); + QVERIFY(c.saveDetail(&c1)); + + // first, definition agnostic foreach. + foreach (const QContactDetail& det, c.details()) { + QCOMPARE(det.definitionName().isEmpty(), false); + } + + // second, definition parameter foreach, with assignment. + foreach (const QContactDetail& det, c.details("CustomTestDetail")) { + CustomTestDetail customDet = det; + QCOMPARE(det.definitionName(), QString("CustomTestDetail")); + QCOMPARE(customDet.testLabel().isEmpty(), false); + } + + // third, definition parameter foreach, with cast. + foreach (const QContactDetail& det, c.details("CustomTestDetail")) { + QCOMPARE(static_cast(det).definitionName(), QString("CustomTestDetail")); + QCOMPARE(static_cast(det).testLabel().isEmpty(), false); + } + + // fourth, parametrized foreach. + foreach (const CustomTestDetail& det, c.details()) { + QCOMPARE(det.definitionName(), QString("CustomTestDetail")); + } +} + + +QTEST_MAIN(tst_QContactDetails) +#include "tst_qcontactdetails.moc"