--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qcontact/tst_qcontact.cpp Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,575 @@
+/****************************************************************************
+**
+** 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 <QtTest/QtTest>
+
+#include "qtcontacts.h"
+#include "qcontactid.h"
+#include <QSet>
+
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+QTM_USE_NAMESPACE
+class tst_QContact: public QObject
+{
+Q_OBJECT
+
+public:
+ tst_QContact();
+ virtual ~tst_QContact();
+
+private slots:
+ void details();
+ void relationships();
+ void displayName();
+ void type();
+ void emptiness();
+ void idLessThan();
+ void idHash();
+ void hash();
+ 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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().isEmpty());
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName.latin1()).count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName.latin1()).isEmpty());
+ QVERIFY(c.details(QLatin1String(QContactPhoneNumber::DefinitionName)).count() == 0);
+ QVERIFY(c.detail(QLatin1String(QContactPhoneNumber::DefinitionName)).isEmpty());
+
+ // Test retrieving the first detail (the display label)
+ QList<QContactDetail> 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(QLatin1String(QContactPhoneNumber::DefinitionName)).count() == 1);
+ QVERIFY(c.details(QLatin1String(QContactPhoneNumber::DefinitionName), QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 1);
+ QVERIFY(c.details(QLatin1String(QContactPhoneNumber::DefinitionName), QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count());
+
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName.latin1()).count() == 1);
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName.latin1(), QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 1);
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName.latin1(), QString(), QString("12345678")).count() == c.details(QContactPhoneNumber::DefinitionName).count());
+
+ QVERIFY(c.details<QContactPhoneNumber>(QContactPhoneNumber::FieldNumber, QString("12345678")).count() == 1);
+ QVERIFY(c.details<QContactPhoneNumber>(QContactPhoneNumber::FieldNumber.latin1(), QString("12345678")).count() == 1);
+ QVERIFY(c.details<QContactPhoneNumber>(QLatin1String(QContactPhoneNumber::FieldNumber), QString("12345678")).count() == 1);
+
+ QVERIFY(c.details<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), 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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().isEmpty());
+
+ QVERIFY(p == p3);
+
+ // now we want to add multiple details of the same type, and test that retrieval works correctly.
+ p2 = QContactPhoneNumber();
+ 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<QContactPhoneNumber>().count() == 2);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), p);
+ QVERIFY(c.removeDetail(&p2));
+
+ // 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<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), p);
+
+ QVERIFY(c2.details().count() == 3);
+ QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 1);
+ QVERIFY(c2.details<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c2.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c2.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c2.detail<QContactPhoneNumber>(), 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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().isEmpty());
+
+ // but not the second
+ QVERIFY(c2.isEmpty() == false);
+ QVERIFY(c2.details().count() == 3);
+ QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 1);
+ QVERIFY(c2.details<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c2.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c2.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c2.detail<QContactPhoneNumber>(), 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<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().isEmpty());
+
+ QVERIFY(c2.details().count() == 2);
+ QVERIFY(c2.details(QContactPhoneNumber::DefinitionName).count() == 0);
+ QVERIFY(c2.details<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c2.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c2.detail<QContactPhoneNumber>().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<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), one);
+
+ // add it twice
+ QVERIFY(c.saveDetail(&two));
+ QVERIFY(c.details().count() == 4);
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 2);
+ QVERIFY(c.details<QContactPhoneNumber>().count() == 2);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), one);
+ QCOMPARE(c.details<QContactPhoneNumber>()[0], one);
+ QCOMPARE(c.details<QContactPhoneNumber>()[1], two);
+
+ // Remove it once
+ QVERIFY(c.removeDetail(&one));
+ QVERIFY(c.details().count() == 3);
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 1);
+ QVERIFY(c.details<QContactPhoneNumber>().count() == 1);
+ QVERIFY(!c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(!c.detail<QContactPhoneNumber>().isEmpty());
+ QCOMPARE(c.detail<QContactPhoneNumber>(), two);
+
+ // Remove it twice
+ QVERIFY(c.removeDetail(&two));
+ QVERIFY(c.details().count() == 2);
+ QVERIFY(c.details(QContactPhoneNumber::DefinitionName).count() == 0);
+ QVERIFY(c.details<QContactPhoneNumber>().count() == 0);
+ QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).isEmpty());
+ QVERIFY(c.detail<QContactPhoneNumber>().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<QContactPhoneNumber>();
+ 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.variantValues().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::relationships()
+{
+ QContact c;
+
+ // boring test, because the default contact has no relationships
+ // we test this more convincingly in the QContactManager tests.
+ QList<QContactId> related = c.relatedContacts();
+ QVERIFY(related.isEmpty());
+
+ related = c.relatedContacts(QContactRelationship::HasMember);
+ QVERIFY(related.isEmpty());
+
+ related = c.relatedContacts(QContactRelationship::HasMember, QContactRelationship::First);
+ QVERIFY(related.isEmpty());
+
+ QList<QContactRelationship> relationshipList = c.relationships();
+ QVERIFY(relationshipList.isEmpty());
+
+ relationshipList = c.relationships(QContactRelationship::HasMember);
+ QVERIFY(relationshipList.isEmpty());
+}
+
+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 or call synthCDL
+ */
+ QVERIFY(d.displayLabel().isEmpty());
+
+ cm.synthesizeContactDisplayLabel(&d);
+ QVERIFY(d.displayLabel() == "Wesley");
+
+ name.setCustomLabel("Bosley");
+ d.saveDetail(&name);
+
+ QVERIFY(d.displayLabel() == "Wesley");
+
+ cm.synthesizeContactDisplayLabel(&d);
+ QVERIFY(d.displayLabel() == "Bosley");
+
+ /* 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!
+
+ /* Test self assign */
+ d.operator =(d);
+ QVERIFY(d.details().count() == 3);
+ QVERIFY(d.isEmpty() == false);
+}
+
+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::idLessThan()
+{
+ QContactId id1;
+ id1.setManagerUri("a");
+ id1.setLocalId(1);
+ QContactId id2;
+ id2.setManagerUri("a");
+ id2.setLocalId(1);
+ QVERIFY(!(id1 < id2));
+ QVERIFY(!(id2 < id1));
+ QContactId id3;
+ id3.setManagerUri("a");
+ id3.setLocalId(2);
+ QContactId id4;
+ id4.setManagerUri("b");
+ id4.setLocalId(1);
+ QContactId id5; // no URI
+ id5.setLocalId(2);
+ QVERIFY(id1 < id3);
+ QVERIFY(!(id3 < id1));
+ QVERIFY(id1 < id4);
+ QVERIFY(!(id4 < id1));
+ QVERIFY(id3 < id4);
+ QVERIFY(!(id4 < id3));
+ QVERIFY(id5 < id1);
+ QVERIFY(!(id1 < id5));
+}
+
+void tst_QContact::idHash()
+{
+ QContactId id1;
+ id1.setManagerUri("a");
+ id1.setLocalId(1);
+ QContactId id2;
+ id2.setManagerUri("a");
+ id2.setLocalId(1);
+ QContactId id3;
+ id3.setManagerUri("b");
+ id3.setLocalId(1);
+ QVERIFY(qHash(id1) == qHash(id2));
+ QVERIFY(qHash(id1) != qHash(id3));
+ QSet<QContactId> set;
+ set.insert(id1);
+ set.insert(id2);
+ set.insert(id3);
+ QCOMPARE(set.size(), 2);
+}
+
+void tst_QContact::hash()
+{
+ QContactId id;
+ id.setManagerUri("a");
+ id.setLocalId(1);
+ QContact contact1;
+ contact1.setId(id);
+ QContactDetail detail1("definition");
+ detail1.setValue("key", "value");
+ contact1.saveDetail(&detail1);
+ QContact contact2;
+ contact2.setId(id);
+ contact2.saveDetail(&detail1);
+ QContact contact3;
+ contact3.setId(id);
+ QContactDetail detail3("definition");
+ detail3.setValue("key", "another value");
+ contact3.saveDetail(&detail3);
+ QContact contact4; // no details
+ contact4.setId(id);
+ QContact contact5; // preferred details and relationships shouldn't affect the hash
+ contact5.setId(id);
+ contact5.saveDetail(&detail1);
+ QContactRelationship rel;
+ QContactManagerEngine::setContactRelationships(&contact5, QList<QContactRelationship>() << rel);
+ QVERIFY(qHash(contact1) == qHash(contact2));
+ QVERIFY(qHash(contact1) != qHash(contact3));
+ QVERIFY(qHash(contact1) != qHash(contact4));
+ QVERIFY(qHash(contact1) == qHash(contact5));
+}
+
+void tst_QContact::traits()
+{
+ QVERIFY(sizeof(QContact) == sizeof(void *));
+ QTypeInfo<QTM_PREPEND_NAMESPACE(QContact)> 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<QTM_PREPEND_NAMESPACE(QContactId)> 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<QTM_PREPEND_NAMESPACE(QContactLocalId)> ti;
+ QVERIFY(!ti.isComplex);
+ QVERIFY(!ti.isStatic);
+ QVERIFY(!ti.isLarge);
+ QVERIFY(!ti.isPointer);
+ QVERIFY(!ti.isDummy);
+}
+
+
+QTEST_MAIN(tst_QContact)
+#include "tst_qcontact.moc"