diff -r e686773b3f54 -r 0ba2181d7c28 qtcontactsmobility/tests/auto/qcontact/tst_qcontact.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtcontactsmobility/tests/auto/qcontact/tst_qcontact.cpp Fri Mar 19 09:27:18 2010 +0200 @@ -0,0 +1,682 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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" +#include "qcontactmanagerdataholder.h" //QContactManagerDataHolder + +//TESTED_CLASS= +//TESTED_FILES= + +QTM_USE_NAMESPACE +class tst_QContact: public QObject +{ +Q_OBJECT + +public: + tst_QContact(); + virtual ~tst_QContact(); +private: + QContactManagerDataHolder managerDataHolder; + +private slots: + void details(); + void actions(); + void preferences(); + void relationships(); + void displayName(); + void type(); + void emptiness(); + void traits(); + void idTraits(); + void localIdTraits(); +}; + +tst_QContact::tst_QContact() +{ +} + +tst_QContact::~tst_QContact() +{ +} + +void tst_QContact::details() +{ + QContact c; + + // Test there are no details (apart from display label + type) by default + QVERIFY(c.isEmpty() == true); + QVERIFY(c.details().count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + // Test retrieving the first detail (the display label) + QList details = c.details(QString()); + QVERIFY(details.at(0).definitionName() == QContactDisplayLabel::DefinitionName); + QVERIFY(details.at(1).definitionName() == QContactType::DefinitionName); + + QContactDetail detail = c.detail("nonexistent"); + QVERIFY(detail.isEmpty()); + QVERIFY(detail.definitionName().isEmpty()); + + // retrieve the first detail using the empty definition name accessor. + detail = c.detail(QString()); + QVERIFY(detail == details.at(0)); + + QVERIFY(c.details("nonexistent").count() == 0); + + // Add a detail + QContactPhoneNumber p; + p.setNumber("12345678"); + QVERIFY(c.saveDetail(&p)); + QVERIFY(c.isEmpty() == false); + + QVERIFY(c.details().count() == 3); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 1); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count()); + QVERIFY(c.details().count() == 1); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), p); + + // Remove detail + QVERIFY(c.removeDetail(&p)); + QVERIFY(c.details().count() == 2); + QVERIFY(c.isEmpty() == true); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count()); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + // Try removing it again + QVERIFY(!c.removeDetail(&p)); + + // Add again, and remove a different way (retrieved copy) + QVERIFY(c.saveDetail(&p)); + QVERIFY(c.isEmpty() == false); + QVERIFY(c.details().count() == 3); + QContactPhoneNumber p2 = c.detail(QContactPhoneNumber::DefinitionName); + QCOMPARE(p, p2); + + QVERIFY(c.removeDetail(&p2)); + QVERIFY(c.details().count() == 2); + QVERIFY(c.isEmpty() == true); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count()); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + QCOMPARE(p, p2); + + // Add again again, and remove a different way (base class) + QVERIFY(c.saveDetail(&p)); + QVERIFY(c.details().count() == 3); + QContactDetail p3 = c.detail(QContactPhoneNumber::DefinitionName); + QVERIFY(p == p3); + + QVERIFY(c.removeDetail(&p3)); + QVERIFY(c.details().count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 0); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count()); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + QVERIFY(p == p3); + + // now we want to add multiple details of the same type, and test that retrieval works correctly. + p2.setNumber("22222"); + p2.setValue("nonexistent-field", QVariant("22222-2")); + c.saveDetail(&p); + c.saveDetail(&p2); + QVERIFY(c.details().count() == 4); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 1); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName, QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count()); + QVERIFY(c.details().count() == 2); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), p); + QVERIFY(c.removeDetail(&p2)); + + // now try removing a detail for which we've set a preference + QContactEmailAddress pref; + pref.setEmailAddress("test@test"); + c.saveDetail(&pref); + c.setPreferredDetail("SendEmail", pref); + QVERIFY(c.isPreferredDetail(QString(), pref)); + QVERIFY(c.removeDetail(&pref)); + QVERIFY(!c.isPreferredDetail(QString(), pref)); + + // Now try adding a detail to multiple contacts + + QContact c2; + QVERIFY(c2.isEmpty() == true); + QVERIFY(c.saveDetail(&p)); + QVERIFY(c2.saveDetail(&p)); + QVERIFY(c2.isEmpty() == false); + + QVERIFY(c.details().count() == 3); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c.details().count() == 1); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), p); + + QVERIFY(c2.details().count() == 3); + QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c2.details().count() == 1); + QVERIFY(!c2.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c2.detail().isEmpty()); + QCOMPARE(c2.detail(), p); + + // Now try removing it from one + QVERIFY(c.removeDetail(&p)); + + // Make sure it's gone from the first contact + QVERIFY(c.isEmpty() == true); + QVERIFY(c.details().count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + // but not the second + QVERIFY(c2.isEmpty() == false); + QVERIFY(c2.details().count() == 3); + QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c2.details().count() == 1); + QVERIFY(!c2.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c2.detail().isEmpty()); + QCOMPARE(c2.detail(), p); + + // Now remove it from the second as well + QVERIFY(c2.removeDetail(&p)); + + // Make sure it's gone from both + QVERIFY(c.details().count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + QVERIFY(c2.details().count() == 2); + QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c2.details().count() == 0); + QVERIFY(c2.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c2.detail().isEmpty()); + + // add a, add b, remove a, add a, remove b, remove a + QVERIFY(c.saveDetail(&p)); + QVERIFY(c2.saveDetail(&p)); + QVERIFY(c.removeDetail(&p)); + QVERIFY(c.saveDetail(&p)); + QVERIFY(c2.removeDetail(&p)); + QVERIFY(c.removeDetail(&p)); + + // Now add a detail with the same values twice + QContactPhoneNumber one; + QContactPhoneNumber two; + + one.setNumber("12345"); + two.setNumber("12345"); + + // add it once + QVERIFY(c.saveDetail(&one)); + QVERIFY(c.details().count() == 3); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c.details().count() == 1); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), one); + + // add it twice + QVERIFY(c.saveDetail(&two)); + QVERIFY(c.details().count() == 4); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 2); + QVERIFY(c.details().count() == 2); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), one); + QCOMPARE(c.details()[0], one); + QCOMPARE(c.details()[1], two); + + // Remove it once + QVERIFY(c.removeDetail(&one)); + QVERIFY(c.details().count() == 3); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 1); + QVERIFY(c.details().count() == 1); + QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(!c.detail().isEmpty()); + QCOMPARE(c.detail(), two); + + // Remove it twice + QVERIFY(c.removeDetail(&two)); + QVERIFY(c.details().count() == 2); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0); + QVERIFY(c.details().count() == 0); + QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty()); + QVERIFY(c.detail().isEmpty()); + + // Null pointer tests + QVERIFY(c.saveDetail(0) == false); + QVERIFY(c.removeDetail(0) == false); + + // Reference tests... + QContactDetail& ref = one; + QVERIFY(c.saveDetail(&one)); + QVERIFY(ref == one); + one.setNumber("56678"); + QVERIFY(c.saveDetail(&one)); + QVERIFY(ref == one); + + // Retrieve the detail again and modify it + QContactPhoneNumber three = c.detail(); + QVERIFY(ref == three); + QVERIFY(one == three); + three.setNumber("542343"); + QVERIFY(c.saveDetail(&three)); + + // Now see if we got any updates to ref/one + QVERIFY(ref == one); + QVERIFY(ref != three); + + // test saving of a detail with an empty field. + QContactPhoneNumber four; + four.setNumber(""); + c.saveDetail(&four); + QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 2); + QVERIFY(!four.values().isEmpty()); // an empty qstring is not invalid; make sure it exists in the detail. + + // ensure that clearing a contact's details works correctly + QContactName nameDetail; + nameDetail.setCustomLabel("test"); + c.saveDetail(&nameDetail); + QCOMPARE(c.detail(QContactName::DefinitionName).value(QContactName::FieldCustomLabel), QString("test")); + QVERIFY(c.details().size() > 0); + QVERIFY(!c.isEmpty()); + QContactId oldId = c.id(); + c.clearDetails(); + QVERIFY(c.details().size() == 2); // always has a display label and contact type. + QCOMPARE(c.detail(QContactName::DefinitionName).value(QContactName::FieldCustomLabel), QString()); + QVERIFY(c.isEmpty()); + QCOMPARE(c.id(), oldId); // id shouldn't change. +} + +void tst_QContact::actions() +{ + QContact c; // empty contact. + QContact c2; // contact with email saved. + QContactEmailAddress e; + e.setEmailAddress("test@nokia.com"); + c2.saveDetail(&e); + + + // XXX this is here to make the bulk + // of this test pass. The first set + // of tests expect to not find plugins. + QString path = QApplication::applicationDirPath() + "/dummyplugin"; + QApplication::addLibraryPath(path); + path = QApplication::applicationDirPath() + "/dummyplugin/plugins"; + QApplication::addLibraryPath(path); + path = QApplication::applicationDirPath() + "/dummyplugin/plugins/contacts"; + QApplication::addLibraryPath(path); + + // Prior to plugin loading: + // first, the empty contact + QList availableActions = c.availableActions(QString()); + QVERIFY(availableActions.isEmpty()); + QContactDetail d = c.detailWithAction("SendEmail"); + QVERIFY(d.isEmpty()); + QList dets = c.detailsWithAction("SendEmail"); + QVERIFY(dets.isEmpty()); + // then, the email contact + availableActions = c2.availableActions(QString()); + QEXPECT_FAIL("", "Plugins are only loaded once", Continue); + QVERIFY(availableActions.isEmpty()); + d = c2.detailWithAction("SendEmail"); + QEXPECT_FAIL("", "Plugins are only loaded once", Continue); + QVERIFY(d.isEmpty()); + dets = c2.detailsWithAction("SendEmail"); + QEXPECT_FAIL("", "Plugins are only loaded once", Continue); + QVERIFY(dets.isEmpty()); + + // set the correct path to look for plugins and load them +// QString path = QApplication::applicationDirPath() + "/dummyplugin/plugins/"; +// QApplication::addLibraryPath(path); + + // available actions - should be one there now. + // empty contact + availableActions = c.availableActions(QString()); + QVERIFY(availableActions.isEmpty()); + // contact with email + availableActions = c2.availableActions(QString()); + QVERIFY(!availableActions.isEmpty()); // should contain SendEmail + + // try various combinations of version and name + availableActions = c2.availableActions(); + QVERIFY(!availableActions.isEmpty()); // should contain SendEmail + availableActions = c2.availableActions("Test"); + QVERIFY(!availableActions.isEmpty()); // should contain SendEmail + availableActions = c2.availableActions("Test", 1); + QVERIFY(!availableActions.isEmpty()); // should contain SendEmail + availableActions = c2.availableActions("Test", 5); + QVERIFY(availableActions.isEmpty()); // should NOT contain SendEmail + availableActions = c2.availableActions(QString(), 1); + QVERIFY(!availableActions.isEmpty()); // should contain SendEmail + + // detail with action: + // empty contact + d = c.detailWithAction("SendEmail"); + QVERIFY(d.isEmpty()); + d = c.detailWithAction("NonexistentAction"); + QVERIFY(d.isEmpty()); + d = c.detailWithAction(QString()); + QVERIFY(d.isEmpty()); + // contact with email + d = c2.detailWithAction("SendEmail"); + QVERIFY(d == e); + d = c2.detailWithAction("NonexistentAction"); + QVERIFY(d.isEmpty()); + d = c2.detailWithAction(QString()); + QVERIFY(d.isEmpty()); + + // details with action: + // empty contact + dets = c.detailsWithAction("SendEmail"); + QVERIFY(dets.isEmpty()); + dets = c.detailsWithAction("NonexistentAction"); + QVERIFY(dets.isEmpty()); + dets = c.detailsWithAction(QString()); + QVERIFY(dets.isEmpty()); + // contact with email + dets = c2.detailsWithAction("SendEmail"); + QVERIFY(dets.contains(e)); + dets = c2.detailsWithAction("NonexistentAction"); + QVERIFY(dets.isEmpty()); + dets = c2.detailsWithAction(QString()); + QVERIFY(dets.isEmpty()); + + // remove the library path. + QApplication::removeLibraryPath(path); +} + +void tst_QContact::preferences() +{ + QContact c; + + // test first set + QContactDetail det("TestId"); + det.setValue("test", QVariant("test1")); + c.saveDetail(&det); + QCOMPARE(c.isPreferredDetail("testAction", det), false); + + QCOMPARE(c.setPreferredDetail("testAction", det), true); + + QCOMPARE(c.isPreferredDetail("testAction", det), true); + + QCOMPARE(c.isPreferredDetail(QString(), det), true); + + QCOMPARE(c.preferredDetail("testAction"), det); + + // test replacement + QContactDetail det2("TestId"); + det2.setValue("test", QVariant("test2")); + c.saveDetail(&det2); + QCOMPARE(c.isPreferredDetail("testAction", det2), false); + + QCOMPARE(c.setPreferredDetail("testAction", det2), true); + + QCOMPARE(c.isPreferredDetail("testAction", det2), true); + + QCOMPARE(c.isPreferredDetail("testAction", det), false); + + QCOMPARE(c.preferredDetail("testAction"), det2); + + // test for detail that is not part of the contact + QContactDetail det3("TestId"); + det3.setValue("test", QVariant("test3")); + QCOMPARE(c.setPreferredDetail("testAction", det3), false); + + QCOMPARE(c.preferredDetail("testAction"), det2); // shouldn't have changed. + + // test invalid set + QCOMPARE(c.setPreferredDetail(QString(), det3), false); + + QCOMPARE(c.setPreferredDetail(QString(), QContactDetail()), false); + + QCOMPARE(c.setPreferredDetail("testAction", QContactDetail()), false); + + QCOMPARE(c.preferredDetail("testAction"), det2); // shouldn't have changed. + + // test invalid query + QContactDetail det4; + det4.setValue("test", QVariant("test4")); + c.saveDetail(&det4); + QCOMPARE(c.isPreferredDetail(QString(), QContactDetail()), false); + + QCOMPARE(c.isPreferredDetail(QString(), det4), false); // valid detail, but no pref set. + + QCOMPARE(c.isPreferredDetail("testAction", QContactDetail()), false); + + // test retrieving preferred details + QContactDetail pd = c.preferredDetail(QString()); + QVERIFY(pd.isEmpty()); + pd = c.preferredDetail("testAction"); + QVERIFY(pd == det2); // shouldn't have changed. + + // test for preference for action that hasn't been added + QVERIFY(c.preferredDetail("NonexistentAction").isEmpty()); + + // Remove a non preferred detail + QContactDetail det2copy("TestId"); + det2copy.setValue("test", QVariant("test2")); + QVERIFY(c.saveDetail(&det2copy)); + + QVERIFY(c.isPreferredDetail("testAction", det2) == true); + QVERIFY(c.isPreferredDetail("testAction", det2copy) == false); + QVERIFY(c.removeDetail(&det2copy)); + QVERIFY(c.isPreferredDetail("testAction", det2) == true); + QVERIFY(c.isPreferredDetail("testAction", det2copy) == false); + + // Add it again + QVERIFY(c.saveDetail(&det2copy)); + QVERIFY(c.isPreferredDetail("testAction", det2) == true); + QVERIFY(c.isPreferredDetail("testAction", det2copy) == false); + + // Remove the preferred detail (the copy should not become preferred) + QVERIFY(c.removeDetail(&det2)); + QVERIFY(c.isPreferredDetail("testAction", det2) == false); + QVERIFY(c.isPreferredDetail("testAction", det2copy) == false); +} + +void tst_QContact::relationships() +{ + QContact c; + + // boring test, because the default contact has no relationships + // we test this more convincingly in the QContactManager tests. + QList related = c.relatedContacts(); + QVERIFY(related.isEmpty()); + + related = c.relatedContacts(QContactRelationship::HasMember); + QVERIFY(related.isEmpty()); + + related = c.relatedContacts(QContactRelationship::HasMember, QContactRelationshipFilter::First); + QVERIFY(related.isEmpty()); + + QList relationshipList = c.relationships(); + QVERIFY(relationshipList.isEmpty()); + + relationshipList = c.relationships(QContactRelationship::HasMember); + QVERIFY(relationshipList.isEmpty()); + + // now test that we can change the order of relationships regardless of the number of relationships + QList orderedList = c.relationshipOrder(); + QVERIFY(orderedList == relationshipList); // should be the same by default + + QContactRelationship dummyRel; + QContactId firstId; + firstId.setManagerUri("test-nokia"); + firstId.setLocalId(QContactLocalId(5)); + QContactId secondId; + secondId.setManagerUri("test-nokia-2"); + secondId.setLocalId(QContactLocalId(5)); + dummyRel.setFirst(firstId); + dummyRel.setSecond(secondId); + dummyRel.setRelationshipType(QContactRelationship::HasAssistant); + + QList reorderedList; + reorderedList.append(dummyRel); + c.setRelationshipOrder(reorderedList); + + QVERIFY(c.relationshipOrder() == reorderedList); +} + +void tst_QContact::displayName() +{ + QContact c; + QContactManager cm("memory"); // for formatting names + + QString label = c.displayLabel(); + QVERIFY(label.isEmpty()); + + /* Try to make this a bit more consistent by using a single name */ + QContact d; + QContactName name; + name.setCustomLabel("Wesley"); + + QVERIFY(d.displayLabel().isEmpty()); + QVERIFY(d.saveDetail(&name)); + + /* + * The display label is not updated until you save the contact! + */ + QString synth = cm.synthesizeDisplayLabel(d); + QVERIFY(d.displayLabel().isEmpty()); + //QVERIFY(synth == name.customLabel()); // XXX Perhaps not guaranteed, depends on backend synth rules. + + /* Remove the detail via removeDetail */ + QContactDisplayLabel old; + QVERIFY(d.details().count() == 3); + QVERIFY(!d.removeDetail(&old)); // should fail. + QVERIFY(d.isEmpty() == false); + QVERIFY(d.details().count() == 3); // it should not be removed! + + /* Make sure we go back to the old synth version */ + QVERIFY(d.displayLabel().isEmpty()); +} + +void tst_QContact::type() +{ + QContact c; + QVERIFY(c.isEmpty() == true); + + // ensure that the default type is the QContactType::TypeContact type + QVERIFY(c.type() == QString(QLatin1String(QContactType::TypeContact))); + + // now set it to be a group via the type mutator, and test that it works + QContactType groupType; + groupType.setType(QString(QLatin1String(QContactType::TypeGroup))); + c.setType(groupType); + QVERIFY(c.type() == QString(QLatin1String(QContactType::TypeGroup))); + + // set it back to a contact, via the string mutator + c.setType(QContactType::TypeContact); + QVERIFY(c.type() == QString(QLatin1String(QContactType::TypeContact))); + QVERIFY(c.isEmpty() == true); // type doesn't affect emptiness +} + +void tst_QContact::emptiness() +{ + QContact c; + QVERIFY(c.isEmpty() == true); + + c.setType(QContactType::TypeContact); + QVERIFY(c.type() == QString(QLatin1String(QContactType::TypeContact))); + QVERIFY(c.isEmpty() == true); // type doesn't affect emptiness +} + +void tst_QContact::traits() +{ + QVERIFY(sizeof(QContact) == sizeof(void *)); + QTypeInfo ti; + QVERIFY(ti.isComplex); + QVERIFY(!ti.isStatic); + QVERIFY(!ti.isLarge); + QVERIFY(!ti.isPointer); + QVERIFY(!ti.isDummy); +} + +void tst_QContact::idTraits() +{ + QVERIFY(sizeof(QContactId) == sizeof(void *)); + QTypeInfo ti; + QVERIFY(ti.isComplex); + QVERIFY(!ti.isStatic); + QVERIFY(!ti.isLarge); + QVERIFY(!ti.isPointer); + QVERIFY(!ti.isDummy); +} + +void tst_QContact::localIdTraits() +{ + QVERIFY(sizeof(QContactId) == sizeof(void *)); + QTypeInfo ti; + QVERIFY(!ti.isComplex); + QVERIFY(!ti.isStatic); + QVERIFY(!ti.isLarge); + QVERIFY(!ti.isPointer); + QVERIFY(!ti.isDummy); +} + + +QTEST_MAIN(tst_QContact) +#include "tst_qcontact.moc"