diff -r c18f9fa7f42e -r 640d30f4fb64 phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp --- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp Fri Oct 08 11:42:51 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,601 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "ut_cntlistmodel.h" -#include "cntlistmodel.h" -#include "cntlistmodel_p.h" - -#include -#include -#include - -void TestCntListModel::initTestCase() -{ - //let's have clean database before running tests - mManager = new QContactManager("symbian"); - QList ids = mManager->contactIds(); - QMap errorMapInit; - mManager->removeContacts(ids, &errorMapInit); - mManager->removeContact(mManager->selfContactId()); -} - -void TestCntListModel::contactReady(int startRow, int endRow) -{ - QVERIFY(startRow == endRow); - mDataReady = true; -} - -void TestCntListModel::create() -{ - mCntModel = new CntListModel(); - QVERIFY(mCntModel != NULL); - QVERIFY(mCntModel->rowCount() == 1); - QVERIFY(mCntModel->d->m_cache); - QVERIFY(mCntModel->d->m_ownedContactManager); - QVERIFY(mCntModel->d->m_contactManager != NULL); - - delete mCntModel; - mCntModel = NULL; - - mCntModel = new CntListModel(mManager); - QVERIFY(mCntModel != NULL); - QCOMPARE(mCntModel->rowCount(), 1); - QVERIFY(mCntModel->rowCount() == 1); - QVERIFY(mCntModel->d->m_cache); - QVERIFY(!mCntModel->d->m_ownedContactManager); - QVERIFY(mCntModel->d->m_contactManager != NULL); -} - -void TestCntListModel::data() -{ - mModelListener = new ModelListener(this); - mDataReady = false; - - //create and save contact - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QContactPhoneNumber number; - number.setNumber("1234567"); - number.setContexts(QContactDetail::ContextHome); - number.setSubTypes(QContactPhoneNumber::SubTypeMobile); - c.saveDetail(&number); - QContactEmailAddress email; - email.setEmailAddress("dummyemail"); - c.saveDetail(&email); - QVERIFY(mManager->saveContact(&c)); - QTest::qWait(1000); - - //check invalid row and column - QVariant ret; - ret = mCntModel->data(QModelIndex(), Qt::UserRole); - QVERIFY(ret.isNull()); - - //check the saved contact's info - QModelIndex modelIndex = mCntModel->indexOfContact(c); - int row = modelIndex.row(); - QContact contactFromModel = mCntModel->contact(modelIndex); - QVERIFY(c == contactFromModel); - - ret = mCntModel->data(modelIndex, Qt::UserRole); - QVERIFY(ret.isNull()); - - ret = mCntModel->data(modelIndex, Qt::DisplayRole); - QVERIFY(ret.type() == QVariant::StringList); - QStringList displayContent; - displayContent = ret.toStringList(); - QVERIFY(displayContent.count() == 2); - QVERIFY(displayContent.at(0) == "firstname lastname"); - // second string is only an empty placeholder, e.g. " ", until cache has fetched the value - - // wait for cache to signal that all contact info is ready - while (!mDataReady) { QTest::qWait(200); QApplication::processEvents(); } - mDataReady = false; - ret = mCntModel->data(modelIndex, Qt::DisplayRole); - - QVERIFY(ret.type() == QVariant::StringList); - displayContent = ret.toStringList(); - QVERIFY(displayContent.count() == 2); - QVERIFY(displayContent.at(0) == "firstname lastname"); - QVERIFY(displayContent.at(1) == "1234567"); - - // check backgroundrole - ret = mCntModel->data(modelIndex, Qt::BackgroundRole); - QVERIFY(ret.isNull()); - - //check decoration role - ret = mCntModel->data(modelIndex, Qt::DecorationRole); - QVERIFY(ret.type() == QVariant::List); - - ret = mCntModel->data(modelIndex, Hb::IndexFeedbackRole); - QVERIFY(ret.type() == QVariant::String); - - // add empty avatar and check decoration - QContactAvatar avatar; - c.saveDetail(&avatar); - QVERIFY(mManager->saveContact(&c)); - QTest::qWait(1000); - ret = mCntModel->data(modelIndex, Qt::DecorationRole); - QVERIFY(ret.type() == QVariant::List); - - // add data to the avatar and check decoration - avatar.setImageUrl(QUrl("dummyimagepath")); - c.saveDetail(&avatar); - QVERIFY(mManager->saveContact(&c)); - QTest::qWait(1000); - modelIndex = mCntModel->indexOfContact(c); - ret = mCntModel->data(modelIndex, Qt::DecorationRole); - - // wait for cache to signal that all contact info is ready - while (!mDataReady) { QTest::qWait(200); QApplication::processEvents(); } - mDataReady = false; - ret = mCntModel->data(modelIndex, Qt::DecorationRole); - QVERIFY(ret.type() == QVariant::List); - - // check MyCard info from the model - modelIndex = mCntModel->index(0, 0); - ret = mCntModel->data(modelIndex, Qt::BackgroundRole); - QVERIFY(!ret.isNull()); - - // create and assign empty MyCard - QContact myCard; - QVERIFY(mManager->saveContact(&myCard)); - QTest::qWait(1000); - mManager->setSelfContactId(myCard.localId()); - QTest::qWait(1000); - - // check that MyCard was really saved - QCOMPARE(mCntModel->myCardId(), myCard.localId()); - - // check MyCard info from the model - myCard = mManager->contact(mManager->selfContactId()); - modelIndex = mCntModel->indexOfContact(myCard); - ret = mCntModel->data(modelIndex, Qt::BackgroundRole); - QVERIFY(!ret.isNull()); - - ret = mCntModel->data(modelIndex, Qt::DisplayRole); - QVERIFY(ret.type() == QVariant::StringList); - displayContent = ret.toStringList(); - QVERIFY(displayContent.count() == 1); // "Unnamed" - - // add some content to MyCard - myCard.saveDetail(&number); - QVERIFY(mManager->saveContact(&myCard)); - QTest::qWait(1000); - ret = mCntModel->data(modelIndex, Qt::DisplayRole); - // wait for cache - QTest::qWait(1000); - ret = mCntModel->data(modelIndex, Qt::DisplayRole); - QVERIFY(ret.type() == QVariant::StringList); - displayContent = ret.toStringList(); - QVERIFY(displayContent.contains(hbTrId("txt_phob_list_unnamed"))); - - ret = mCntModel->data(modelIndex, Hb::IndexFeedbackRole); - QVERIFY(ret.isNull()); -} - -void TestCntListModel::rowCount() -{ - // we should have 2 contacts in the model saved from the last test case - QTest::qWait(5000); - QCOMPARE(mCntModel->rowCount(), 2); -} - -void TestCntListModel::contact() -{ - QList ids = mManager->contactIds(); - QMap errorMapContact; - mManager->removeContacts(ids,&errorMapContact); - QTest::qWait(1000); - - QModelIndex modelIndex = mCntModel->index(0, 0); - QContact empty = mCntModel->contact(modelIndex); - //QVERIFY(empty.isEmpty()); - - //create and save contact - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QContactPhoneNumber number; - number.setNumber("1234567"); - number.setContexts(QContactDetail::ContextHome); - number.setSubTypes(QContactPhoneNumber::SubTypeMobile); - c.saveDetail(&number); - QContactEmailAddress email; - email.setEmailAddress("dummyemail"); - c.saveDetail(&email); - QVERIFY(mManager->saveContact(&c)); - QTest::qWait(1000); - - modelIndex = mCntModel->index(10, 0); - c = mCntModel->contact(modelIndex); - QVERIFY(c.isEmpty()); - - modelIndex = mCntModel->index(1, 0); - c = mCntModel->contact(modelIndex); - QVERIFY(!c.isEmpty()); -} - -void TestCntListModel::contactId() -{ - QModelIndex modelIndex = mCntModel->index(1, 0); - QContact c = mCntModel->contact(modelIndex); - - QVERIFY(mCntModel->contactId(modelIndex) == c.localId()); -} - -void TestCntListModel::indexOfContact() -{ - QModelIndex modelIndex = mCntModel->index(1, 0); - QContact c = mCntModel->contact(modelIndex); - - QVERIFY(mCntModel->indexOfContact(c) == modelIndex); -} - -void TestCntListModel::indexOfContactId() -{ - QModelIndex modelIndex = mCntModel->index(1, 0); - QContact c = mCntModel->contact(modelIndex); - - QVERIFY(mCntModel->indexOfContactId(c.localId()) == modelIndex); -} - -void TestCntListModel::contactManager() -{ - QVERIFY(mManager == &(mCntModel->contactManager())); -} - -void TestCntListModel::setFilter() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - QContactUnionFilter unionFilter; - - QContactDetailFilter landlineFilter; - landlineFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldSubTypes); - landlineFilter.setValue(QLatin1String(QContactPhoneNumber::SubTypeLandline)); - unionFilter << landlineFilter; - - QContactDetailFilter mobileFilter; - mobileFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldSubTypes); - mobileFilter.setValue(QLatin1String(QContactPhoneNumber::SubTypeMobile)); - unionFilter << mobileFilter; - - mCntModel->setFilter(unionFilter); - - QModelIndex modelIndex = mCntModel->indexOfContact(c); - QVERIFY(modelIndex.row() < 0); - QVERIFY(mCntModel->d->m_filter == unionFilter); - QVERIFY(mCntModel->d->m_sortOrders.count() == 2); -} - -void TestCntListModel::myCard() -{ - delete mCntModel; - mCntModel = 0; - - mCntModel = new CntListModel(mManager); - - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - QSignalSpy spy(mCntModel, SIGNAL(modelReset())); - - QVERIFY(mCntModel->myCardStatus()); - - mCntModel->showMyCard(false); - QVERIFY(!mCntModel->myCardStatus()); - QCOMPARE(spy.count(), 2); - - mCntModel->showMyCard(true); - QVERIFY(mCntModel->myCardStatus()); - QCOMPARE(spy.count(), 4); - - mManager->setSelfContactId(c.localId()); - QTest::qWait(1000); - spy.clear(); - - mCntModel->showMyCard(false); - QVERIFY(!mCntModel->myCardStatus()); - QCOMPARE(spy.count(), 2); - - mCntModel->showMyCard(true); - QVERIFY(mCntModel->myCardStatus()); - QCOMPARE(spy.count(), 4); - mCntModel->showMyCard(true); - QVERIFY(mCntModel->myCardStatus()); - QCOMPARE(spy.count(), 4); -} - -void TestCntListModel::rowId() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - int row = mCntModel->rowId(c.localId()); - QVERIFY(row > 0); - QVERIFY(mCntModel->validRowId(row)); - QVERIFY(!mCntModel->validRowId(-100)); - QVERIFY(!mCntModel->validRowId(100)); -} - -void TestCntListModel::dataForDisplayRole() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - int row = mCntModel->rowId(c.localId()); - QVariant var = mCntModel->dataForRole(row, Qt::DisplayRole); - QVERIFY(var.type() == QVariant::StringList); - - var = mCntModel->dataForRole(0, Qt::DisplayRole); - QVERIFY(var.type() == QVariant::StringList); -} - -void TestCntListModel::handleAdded() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex&, int, int))); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - QCOMPARE(spy.count(), 1); - - QList emptyList; - mCntModel->handleAdded(emptyList); - QCOMPARE(spy.count(), 1); -} - -void TestCntListModel::handleChanged() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - QSignalSpy spy(mCntModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex&))); - - name.setMiddleName("mid"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - QCOMPARE(spy.count(), 1); - - QList emptyList; - mCntModel->handleChanged(emptyList); - QCOMPARE(spy.count(), 1); -} - -void TestCntListModel::handleRemoved() -{ - QSignalSpy spy(mCntModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int))); - - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QCOMPARE(spy.count(), 1); - - QList emptyList; - mCntModel->handleRemoved(emptyList); - QCOMPARE(spy.count(), 1); -} - -void TestCntListModel::handleMyCardChanged() -{ - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - QContact c; - QContactName name; - name.setFirstName("firstname"); - name.setLastName("lastname"); - c.saveDetail(&name); - QVERIFY(mManager->saveContact(&c)); - - mCntModel->handleMyCardChanged(0, c.localId()); - QVERIFY(mCntModel->d->m_myCardId == c.localId()); -} - -void TestCntListModel::handleRelationships() -{ - // remove all contacts - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids,&errorMap); - QTest::qWait(1000); - - // create group "myGroup" - QContact group; - group.setType(QContactType::TypeGroup); - QContactName groupName; - groupName.setCustomLabel("myGroup"); - group.saveDetail(&groupName); - mManager->saveContact(&group); - - // create a relationship filter - QContactRelationshipFilter groupFilter; - groupFilter.setRelationshipType(QContactRelationship::HasMember); - groupFilter.setRelatedContactRole(QContactRelationship::First); - groupFilter.setRelatedContactId(group.id()); - - // create new listmodel - CntListModel* groupListModel = new CntListModel(mManager, groupFilter, false); - QVERIFY(groupListModel != NULL); - - QCOMPARE(groupListModel->rowCount(), 0); - - // create contacts - QList contacts; - contacts << createContact("Alfa", "One"); - contacts << createContact("Beta", "Two"); - contacts << createContact("Gamma", "Three"); - QTest::qWait(1000); - QCOMPARE(groupListModel->rowCount(), 0); - - // add contacts to group - foreach (QContact contact, contacts) { - addGroupMember(group, contact); - } - QTest::qWait(1000); - QCOMPARE(groupListModel->rowCount(), 3); - - // remove contact from group - removeGroupMember(group, contacts.at(1)); - QTest::qWait(1000); - QCOMPARE(groupListModel->rowCount(), 2); - - // add and remove empty list - QList emptyList; - emptyList << group.localId(); - mCntModel->handleAddedRelationship(emptyList); - QCOMPARE(groupListModel->rowCount(), 2); - mCntModel->handleRemovedRelationship(emptyList); - QCOMPARE(groupListModel->rowCount(), 2); - - // verify that contact on second row is "Gamma Three" (comes after "Alfa One" - // regardless of sorting type and Beta Two was removed) - QVERIFY(groupListModel->indexOfContact(contacts.at(0)).row() == 0); - QVERIFY(groupListModel->indexOfContact(contacts.at(1)).row() == -1); - QVERIFY(groupListModel->indexOfContact(contacts.at(2)).row() == 1); - - // create a contact and make sure list model count does not change - createContact("Delta", "Four"); - QTest::qWait(1000); - QCOMPARE(groupListModel->rowCount(), 2); - - delete groupListModel; -} - -QContact TestCntListModel::createContact(const QString& firstName, const QString& lastName) -{ - QContact contact; - QContactName name; - name.setFirstName(firstName); - name.setLastName(lastName); - contact.saveDetail(&name); - mManager->saveContact(&contact); - - return contact; -} - -void TestCntListModel::addGroupMember(const QContact& group, const QContact& contact) -{ - QContactRelationship relationship; - relationship.setRelationshipType(QContactRelationship::HasMember); - relationship.setFirst(group.id()); - relationship.setSecond(contact.id()); - mManager->saveRelationship(&relationship); -} - -void TestCntListModel::removeGroupMember(const QContact& group, const QContact& contact) -{ - QContactRelationship relationship; - relationship.setRelationshipType(QContactRelationship::HasMember); - relationship.setFirst(group.id()); - relationship.setSecond(contact.id()); - mManager->removeRelationship(relationship); -} - -void TestCntListModel::cleanupTestCase() -{ - mCntModel->d->m_cache->onShutdown(); - delete mCntModel; - mCntModel = 0; - - //let's have clean database after running tests - QList ids = mManager->contactIds(); - QMap errorMap; - mManager->removeContacts(ids, &errorMap); - delete mManager; - mManager = 0; - delete mModelListener; - mModelListener = 0; -} - - -ModelListener::ModelListener(TestCntListModel* parent) - : mParent(parent) -{ - connect(mParent->mCntModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(onDataChanged(QModelIndex,QModelIndex))); -} - -void ModelListener::onDataChanged(QModelIndex start, QModelIndex end) -{ - mParent->contactReady(start.row(), end.row()); -} -