18 #include "ut_mobcntmodel.h" |
18 #include "ut_mobcntmodel.h" |
19 #include "mobcntmodel.h" |
19 #include "mobcntmodel.h" |
20 #include "mobcntmodel_p.h" |
20 #include "mobcntmodel_p.h" |
21 |
21 |
22 #include <qtcontacts.h> |
22 #include <qtcontacts.h> |
23 #include <QSignalSpy> |
23 #include <QUrl> |
24 |
24 |
25 void TestMobCntModel::initTestCase() |
25 void TestMobCntModel::initTestCase() |
26 { |
26 { |
27 //let's have clean database before running tests |
27 //let's have clean database before running tests |
28 mManager = new QContactManager("symbian"); |
28 mManager = new QContactManager("symbian"); |
29 QList<QContactLocalId> ids = mManager->contactIds(); |
29 QList<QContactLocalId> ids = mManager->contactIds(); |
30 QMap<int, QContactManager::Error> errorMapInit; |
30 QMap<int, QContactManager::Error> errorMapInit; |
31 mManager->removeContacts(ids, &errorMapInit); |
31 mManager->removeContacts(ids, &errorMapInit); |
|
32 } |
|
33 |
|
34 void TestMobCntModel::contactReady(int startRow, int endRow) |
|
35 { |
|
36 QVERIFY(startRow == endRow); |
|
37 mDataReady = true; |
32 } |
38 } |
33 |
39 |
34 void TestMobCntModel::create() |
40 void TestMobCntModel::create() |
35 { |
41 { |
36 mCntModel = new MobCntModel(); |
42 mCntModel = new MobCntModel(); |
37 QVERIFY(mCntModel != 0); |
43 QVERIFY(mCntModel != 0); |
38 QVERIFY(mCntModel->rowCount() == 1); |
44 QVERIFY(mCntModel->rowCount() == 1); |
39 QVERIFY(mCntModel->mIconManager); |
45 QVERIFY(mCntModel->d->m_cache); |
40 QVERIFY(mCntModel->d->ownedContactManager); |
46 QVERIFY(mCntModel->d->ownedContactManager); |
41 QVERIFY(mCntModel->d->m_contactManager != 0); |
47 QVERIFY(mCntModel->d->m_contactManager != 0); |
42 |
48 |
43 delete mCntModel; |
49 delete mCntModel; |
44 mCntModel = 0; |
50 mCntModel = 0; |
45 |
51 |
46 mCntModel = new MobCntModel(mManager); |
52 mCntModel = new MobCntModel(mManager); |
47 QVERIFY(mCntModel != 0); |
53 QVERIFY(mCntModel != 0); |
48 QCOMPARE(mCntModel->rowCount(),1); |
54 QCOMPARE(mCntModel->rowCount(),1); |
49 QVERIFY(mCntModel->rowCount() == 1); |
55 QVERIFY(mCntModel->rowCount() == 1); |
50 QVERIFY(mCntModel->mIconManager); |
56 QVERIFY(mCntModel->d->m_cache); |
51 QVERIFY(!mCntModel->d->ownedContactManager); |
57 QVERIFY(!mCntModel->d->ownedContactManager); |
52 QVERIFY(mCntModel->d->m_contactManager != 0); |
58 QVERIFY(mCntModel->d->m_contactManager != 0); |
53 } |
59 } |
54 |
60 |
55 void TestMobCntModel::data() |
61 void TestMobCntModel::data() |
56 { |
62 { |
|
63 mModelListener = new ModelListener(this); |
|
64 mDataReady = false; |
|
65 |
57 //create and save contact |
66 //create and save contact |
58 QContact c; |
67 QContact c; |
59 QContactName name; |
68 QContactName name; |
60 name.setFirstName("firstname"); |
69 name.setFirstName("firstname"); |
61 name.setLastName("lastname"); |
70 name.setLastName("lastname"); |
89 QVERIFY(ret.type() == QVariant::StringList); |
98 QVERIFY(ret.type() == QVariant::StringList); |
90 QStringList displayContent; |
99 QStringList displayContent; |
91 displayContent = ret.toStringList(); |
100 displayContent = ret.toStringList(); |
92 QVERIFY(displayContent.count() == 2); |
101 QVERIFY(displayContent.count() == 2); |
93 QVERIFY(displayContent.at(0) == "firstname lastname"); |
102 QVERIFY(displayContent.at(0) == "firstname lastname"); |
|
103 // second string is only an empty placeholder, e.g. " ", until cache has fetched the value |
|
104 |
|
105 // wait for cache to signal that all contact info is ready |
|
106 while (!mDataReady) { QTest::qWait(200); QApplication::processEvents(); } |
|
107 mDataReady = false; |
|
108 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
|
109 |
|
110 QVERIFY(ret.type() == QVariant::StringList); |
|
111 displayContent = ret.toStringList(); |
|
112 QVERIFY(displayContent.count() == 2); |
|
113 QVERIFY(displayContent.at(0) == "firstname lastname"); |
94 QVERIFY(displayContent.at(1) == "1234567"); |
114 QVERIFY(displayContent.at(1) == "1234567"); |
95 |
115 |
96 // check backgroundrole |
116 // check backgroundrole |
97 ret = mCntModel->data(modelIndex, Qt::BackgroundRole); |
117 ret = mCntModel->data(modelIndex, Qt::BackgroundRole); |
98 QVERIFY(ret.isNull()); |
118 QVERIFY(ret.isNull()); |
99 |
119 |
100 //check decoration role |
120 //check decoration role |
101 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
121 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
102 QVERIFY(ret.type() == QVariant::List); |
122 QVERIFY(ret.type() == QVariant::List); |
103 |
123 |
104 // add empty avatar and check decoration |
124 // add empty avatar and check decoration |
105 QContactAvatar avatar; |
125 QContactAvatar avatar; |
106 avatar.setSubType(QContactAvatar::SubTypeImage); |
|
107 c.saveDetail(&avatar); |
126 c.saveDetail(&avatar); |
108 QVERIFY(mManager->saveContact(&c)); |
127 QVERIFY(mManager->saveContact(&c)); |
109 QTest::qWait(1000); |
128 QTest::qWait(1000); |
110 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
129 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
111 QVERIFY(ret.type() == QVariant::List); |
130 QVERIFY(ret.type() == QVariant::List); |
112 |
131 |
113 // add data to the avatar and check decoration |
132 // add data to the avatar and check decoration |
114 avatar.setAvatar("dummyimagepath"); |
133 avatar.setImageUrl(QUrl("dummyimagepath")); |
115 c.saveDetail(&avatar); |
134 c.saveDetail(&avatar); |
116 QVERIFY(mManager->saveContact(&c)); |
135 QVERIFY(mManager->saveContact(&c)); |
117 QTest::qWait(1000); |
136 QTest::qWait(1000); |
118 modelIndex = mCntModel->indexOfContact(c); |
137 modelIndex = mCntModel->indexOfContact(c); |
|
138 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
|
139 |
|
140 // wait for cache to signal that all contact info is ready |
|
141 while (!mDataReady) { QTest::qWait(200); QApplication::processEvents(); } |
|
142 mDataReady = false; |
119 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
143 ret = mCntModel->data(modelIndex, Qt::DecorationRole); |
120 QVERIFY(ret.type() == QVariant::List); |
144 QVERIFY(ret.type() == QVariant::List); |
121 |
145 |
122 // check MyCard info from the model |
146 // check MyCard info from the model |
123 modelIndex = mCntModel->index(0, 0); |
147 modelIndex = mCntModel->index(0, 0); |
138 QVERIFY(!ret.isNull()); |
162 QVERIFY(!ret.isNull()); |
139 |
163 |
140 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
164 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
141 QVERIFY(ret.type() == QVariant::StringList); |
165 QVERIFY(ret.type() == QVariant::StringList); |
142 displayContent = ret.toStringList(); |
166 displayContent = ret.toStringList(); |
143 QVERIFY(displayContent.count() == 2);// "My card" ; "Create my identity" |
167 QVERIFY(displayContent.count() == 1); // "Unnamed" |
144 |
168 |
145 // add some content to MyCard |
169 // add some content to MyCard |
146 myCard.saveDetail(&number); |
170 myCard.saveDetail(&number); |
147 QVERIFY(mManager->saveContact(&myCard)); |
171 QVERIFY(mManager->saveContact(&myCard)); |
148 QTest::qWait(1000); |
172 QTest::qWait(1000); |
149 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
173 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
|
174 // wait for cache |
|
175 QTest::qWait(1000); |
|
176 ret = mCntModel->data(modelIndex, Qt::DisplayRole); |
150 QVERIFY(ret.type() == QVariant::StringList); |
177 QVERIFY(ret.type() == QVariant::StringList); |
151 displayContent = ret.toStringList(); |
178 displayContent = ret.toStringList(); |
152 QVERIFY(displayContent.contains(myCard.displayLabel())); |
179 QVERIFY(displayContent.contains(hbTrId("txt_phob_list_unnamed"))); |
153 } |
180 } |
154 |
181 |
155 void TestMobCntModel::rowCount() |
182 void TestMobCntModel::rowCount() |
156 { |
183 { |
157 // we should have 2 contacts in the model saved from the last test case |
184 // we should have 2 contacts in the model saved from the last test case |
337 |
368 |
338 var = mCntModel->dataForDisplayRole(0); |
369 var = mCntModel->dataForDisplayRole(0); |
339 QVERIFY(var.type() == QVariant::StringList); |
370 QVERIFY(var.type() == QVariant::StringList); |
340 } |
371 } |
341 |
372 |
342 void TestMobCntModel::updateContactIcon() |
373 void TestMobCntModel::handleAdded() |
343 { |
374 { |
344 QList<QContactLocalId> ids = mManager->contactIds(); |
375 QList<QContactLocalId> ids = mManager->contactIds(); |
345 mManager->removeContacts(&ids); |
376 QMap<int, QContactManager::Error> errorMap; |
346 QTest::qWait(1000); |
377 mManager->removeContacts(ids,&errorMap); |
347 |
378 QTest::qWait(1000); |
348 QContact c; |
379 |
349 QContactName name; |
380 QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex&, int, int))); |
350 name.setFirstName("firstname"); |
381 |
351 name.setLastName("lastname"); |
382 QContact c; |
352 c.saveDetail(&name); |
383 QContactName name; |
353 QVERIFY(mManager->saveContact(&c)); |
384 name.setFirstName("firstname"); |
354 |
385 name.setLastName("lastname"); |
355 int row = mCntModel->rowId(c.localId()); |
386 c.saveDetail(&name); |
356 |
387 QVERIFY(mManager->saveContact(&c)); |
357 QSignalSpy spy(mCntModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&))); |
388 |
358 |
|
359 mCntModel->updateContactIcon(row); |
|
360 QCOMPARE(spy.count(), 1); |
389 QCOMPARE(spy.count(), 1); |
361 } |
390 } |
362 |
391 |
363 void TestMobCntModel::handleAdded() |
392 void TestMobCntModel::handleChanged() |
364 { |
393 { |
365 QList<QContactLocalId> ids = mManager->contactIds(); |
394 QList<QContactLocalId> ids = mManager->contactIds(); |
366 QMap<int, QContactManager::Error> errorMapHandleAdded; |
395 QMap<int, QContactManager::Error> errorMap; |
367 mManager->removeContacts(ids,&errorMapHandleAdded); |
396 mManager->removeContacts(ids,&errorMap); |
368 QTest::qWait(1000); |
397 QTest::qWait(1000); |
369 |
398 |
370 QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex&, int, int))); |
399 QContact c; |
371 |
400 QContactName name; |
372 QContact c; |
401 name.setFirstName("firstname"); |
373 QContactName name; |
402 name.setLastName("lastname"); |
374 name.setFirstName("firstname"); |
403 c.saveDetail(&name); |
375 name.setLastName("lastname"); |
404 QVERIFY(mManager->saveContact(&c)); |
|
405 |
|
406 QSignalSpy spy(mCntModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex&))); |
|
407 |
|
408 name.setMiddleName("mid"); |
376 c.saveDetail(&name); |
409 c.saveDetail(&name); |
377 QVERIFY(mManager->saveContact(&c)); |
410 QVERIFY(mManager->saveContact(&c)); |
378 |
411 |
379 QCOMPARE(spy.count(), 1); |
412 QCOMPARE(spy.count(), 1); |
380 } |
413 } |
381 |
414 |
382 void TestMobCntModel::handleChanged() |
415 void TestMobCntModel::handleRemoved() |
383 { |
416 { |
384 QList<QContactLocalId> ids = mManager->contactIds(); |
417 QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int))); |
385 QMap<int, QContactManager::Error> errorMapHandleChanged; |
418 |
386 mManager->removeContacts(ids,&errorMapHandleChanged); |
419 QList<QContactLocalId> ids = mManager->contactIds(); |
387 QTest::qWait(1000); |
420 QMap<int, QContactManager::Error> errorMap; |
388 |
421 mManager->removeContacts(ids,&errorMap); |
389 QContact c; |
422 QTest::qWait(1000); |
390 QContactName name; |
423 |
391 name.setFirstName("firstname"); |
|
392 name.setLastName("lastname"); |
|
393 c.saveDetail(&name); |
|
394 QVERIFY(mManager->saveContact(&c)); |
|
395 |
|
396 QSignalSpy spy(mCntModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex&))); |
|
397 |
|
398 name.setMiddleName("mid"); |
|
399 c.saveDetail(&name); |
|
400 QVERIFY(mManager->saveContact(&c)); |
|
401 |
|
402 QCOMPARE(spy.count(), 1); |
424 QCOMPARE(spy.count(), 1); |
403 } |
425 } |
404 |
426 |
405 void TestMobCntModel::handleRemoved() |
|
406 { |
|
407 QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int))); |
|
408 |
|
409 QList<QContactLocalId> ids = mManager->contactIds(); |
|
410 QMap<int, QContactManager::Error> errorMapHandle; |
|
411 mManager->removeContacts(ids,&errorMapHandle); |
|
412 QTest::qWait(1000); |
|
413 |
|
414 QCOMPARE(spy.count(), 1); |
|
415 } |
|
416 |
|
417 void TestMobCntModel::handleMyCardChanged() |
427 void TestMobCntModel::handleMyCardChanged() |
418 { |
428 { |
419 QList<QContactLocalId> ids = mManager->contactIds(); |
429 QList<QContactLocalId> ids = mManager->contactIds(); |
420 mManager->removeContacts(&ids); |
430 QMap<int, QContactManager::Error> errorMap; |
|
431 mManager->removeContacts(ids,&errorMap); |
421 QTest::qWait(1000); |
432 QTest::qWait(1000); |
422 |
433 |
423 QContact c; |
434 QContact c; |
424 QContactName name; |
435 QContactName name; |
425 name.setFirstName("firstname"); |
436 name.setFirstName("firstname"); |