qtmobility/tests/auto/qcontact/tst_qcontact.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
--- a/qtmobility/tests/auto/qcontact/tst_qcontact.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/tests/auto/qcontact/tst_qcontact.cpp	Mon May 03 13:18:40 2010 +0300
@@ -42,12 +42,21 @@
 #include <QtTest/QtTest>
 
 #include "qtcontacts.h"
+#include "qcontactid.h"
 #include "qcontactmanagerdataholder.h" //QContactManagerDataHolder
+#include <QSet>
+
 
 //TESTED_CLASS=
 //TESTED_FILES=
 
 QTM_USE_NAMESPACE
+class HackEngine : public QContactManagerEngine
+{
+    public:
+        static void setRels(QContact* contact, const QList<QContactRelationship>& rels) {QContactManagerEngine::setContactRelationships(contact, rels);}
+};
+
 class tst_QContact: public QObject
 {
 Q_OBJECT
@@ -66,6 +75,9 @@
     void displayName();
     void type();
     void emptiness();
+    void idLessThan();
+    void idHash();
+    void hash();
     void traits();
     void idTraits();
     void localIdTraits();
@@ -550,7 +562,7 @@
     related = c.relatedContacts(QContactRelationship::HasMember);
     QVERIFY(related.isEmpty());
 
-    related = c.relatedContacts(QContactRelationship::HasMember, QContactRelationshipFilter::First);
+    related = c.relatedContacts(QContactRelationship::HasMember, QContactRelationship::First);
     QVERIFY(related.isEmpty());
 
     QList<QContactRelationship> relationshipList = c.relationships();
@@ -558,27 +570,6 @@
 
     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<QContactRelationship> 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<QContactRelationship> reorderedList;
-    reorderedList.append(dummyRel);
-    c.setRelationshipOrder(reorderedList);
-
-    QVERIFY(c.relationshipOrder() == reorderedList);
 }
 
 void tst_QContact::displayName()
@@ -645,6 +636,86 @@
     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);
+    contact5.setPreferredDetail("action", detail1);
+    QContactRelationship rel;
+    HackEngine::setRels(&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 *));