qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntsymbianengine.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    55 void TestSymbianEngine::initTestCase()
    55 void TestSymbianEngine::initTestCase()
    56 {
    56 {
    57     QContactManager::Error error;
    57     QContactManager::Error error;
    58     QMap<QString, QString> emptyParameters;
    58     QMap<QString, QString> emptyParameters;
    59 
    59 
    60     m_engine = new CntSymbianEngine(emptyParameters, error);
    60     m_engine = new CntSymbianEngine(emptyParameters, &error);
    61     if (error == QContactManager::NoError)
    61     if (error == QContactManager::NoError)
    62         removeAllContacts();
    62         removeAllContacts();
    63     else
    63     else
    64         QSKIP("Error creating manager", SkipAll);
    64         QSKIP("Error creating manager", SkipAll);
    65 }
    65 }
    81 
    81 
    82 void TestSymbianEngine::removeAllContacts()
    82 void TestSymbianEngine::removeAllContacts()
    83 {
    83 {
    84     if(m_engine) {
    84     if(m_engine) {
    85         // Empty cnt database
    85         // Empty cnt database
    86         QContactManager::Error err;
    86         QContactManager::Error err(QContactManager::NoError);
    87         QList<QContactSortOrder> sortOrders;
    87         QList<QContactSortOrder> sortOrders;
    88         QList<QContactLocalId> cnts_ids = m_engine->contactIds(sortOrders, err);
    88         QContactFilter defaultFilter = QContactFilter();
       
    89         QList<QContactLocalId> cnts_ids = m_engine->contactIds(defaultFilter, sortOrders, &err);
    89         QVERIFY(err == QContactManager::NoError);
    90         QVERIFY(err == QContactManager::NoError);
    90 
    91 
    91         for(int i=0; i<cnts_ids.count(); i++) {
    92         for(int i=0; i<cnts_ids.count(); i++) {
    92             QVERIFY(m_engine->removeContact(cnts_ids[i], err));
    93             QVERIFY(m_engine->removeContact(cnts_ids[i], &err));
    93         }
    94         }
    94     }
    95     }
    95 }
    96 }
    96 
    97 
    97 void TestSymbianEngine::ctors()
    98 void TestSymbianEngine::ctors()
    99     QContactManager::Error error;
   100     QContactManager::Error error;
   100     QMap<QString, QString> params;
   101     QMap<QString, QString> params;
   101 
   102 
   102     // Ctor
   103     // Ctor
   103     CntSymbianEngine *ce;
   104     CntSymbianEngine *ce;
   104     ce = new CntSymbianEngine(params, error);
   105     ce = new CntSymbianEngine(params, &error);
   105     QVERIFY(ce != NULL);
   106     QVERIFY(ce != NULL);
   106     QVERIFY(error == QContactManager::NoError);
   107     QVERIFY(error == QContactManager::NoError);
   107     if (error == QContactManager::NoError) {
   108     if (error == QContactManager::NoError) {
   108         QVERIFY(ce->managerName() == CNT_SYMBIAN_MANAGER_NAME);
   109         QVERIFY(ce->managerName() == CNT_SYMBIAN_MANAGER_NAME);
   109         QVERIFY(ce->m_contactFilter != 0);
   110         QVERIFY(ce->m_contactFilter != 0);
   121     QVERIFY(ce->m_contactSorter == ce1->m_contactSorter);
   122     QVERIFY(ce->m_contactSorter == ce1->m_contactSorter);
   122     QVERIFY(ce->m_dataBase == ce1->m_dataBase);
   123     QVERIFY(ce->m_dataBase == ce1->m_dataBase);
   123     QVERIFY(ce->m_relationship == ce1->m_relationship);
   124     QVERIFY(ce->m_relationship == ce1->m_relationship);
   124     QVERIFY(ce->m_transformContact == ce1->m_transformContact);
   125     QVERIFY(ce->m_transformContact == ce1->m_transformContact);
   125 
   126 
   126     // dref
   127     delete ce;
   127     ce->deref();
       
   128     /*
   128     /*
   129     QVERIFY(ce->m_contactFilter == 0xDEDEDEDE);
   129     QVERIFY(ce->m_contactFilter == 0xDEDEDEDE);
   130     QVERIFY(ce->m_contactSorter == 0xDEDEDEDE);
   130     QVERIFY(ce->m_contactSorter == 0xDEDEDEDE);
   131     QVERIFY(ce->m_dataBase == 0xDEDEDEDE);
   131     QVERIFY(ce->m_dataBase == 0xDEDEDEDE);
   132     QVERIFY(ce->m_relationship == 0xDEDEDEDE);
   132     QVERIFY(ce->m_relationship == 0xDEDEDEDE);
   137 void TestSymbianEngine::saveContact()
   137 void TestSymbianEngine::saveContact()
   138 {
   138 {
   139     QContactManager::Error err;
   139     QContactManager::Error err;
   140     QList<QContactSortOrder> sortOrders;
   140     QList<QContactSortOrder> sortOrders;
   141     QContactId empty;
   141     QContactId empty;
   142 
   142     QContactFilter defaultFilter = QContactFilter();
   143     int init_count = m_engine->contactIds(sortOrders, err).count();
   143 
       
   144     int init_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   144     QVERIFY(err == QContactManager::NoError);
   145     QVERIFY(err == QContactManager::NoError);
   145 
   146 
   146     // Save a "NULL" contact
   147     // Save a "NULL" contact
   147     QVERIFY(!m_engine->saveContact(NULL, err));
   148     QVERIFY(!m_engine->saveContact(NULL, &err));
   148     QVERIFY(err == QContactManager::BadArgumentError);
   149     QVERIFY(err == QContactManager::BadArgumentError);
   149     int current_count = m_engine->contactIds(sortOrders, err).count();
   150     int current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   150     QVERIFY(err == QContactManager::NoError);
   151     QVERIFY(err == QContactManager::NoError);
   151     QVERIFY(init_count == current_count);
   152     QVERIFY(init_count == current_count);
   152 
   153 
   153     // Save a contact that is not in database
   154     // Save a contact that is not in database
   154     QContact invaId;
   155     QContact invaId;
   155     QVERIFY(m_engine->saveContact(&invaId, err));   // Add to db
   156     QVERIFY(m_engine->saveContact(&invaId, &err));   // Add to db
   156     QVERIFY(err == QContactManager::NoError);
   157     QVERIFY(err == QContactManager::NoError);
   157     QContactId cId = invaId.id();
   158     QContactId cId = invaId.id();
   158     m_engine->removeContact(invaId.localId(), err);   // Ensure not in db
   159     m_engine->removeContact(invaId.localId(), &err);   // Ensure not in db
   159     QVERIFY(err == QContactManager::NoError);
   160     QVERIFY(err == QContactManager::NoError);
   160     invaId.setId(cId);
   161     invaId.setId(cId);
   161     QVERIFY(!m_engine->saveContact(&invaId, err));   // Update non existent contact
   162     QVERIFY(!m_engine->saveContact(&invaId, &err));   // Update non existent contact
   162     QVERIFY(err == QContactManager::DoesNotExistError);
   163     QVERIFY(err == QContactManager::DoesNotExistError);
   163     current_count = m_engine->contactIds(sortOrders, err).count();
   164     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   164     QVERIFY(err == QContactManager::NoError);
   165     QVERIFY(err == QContactManager::NoError);
   165     QVERIFY(init_count == current_count);
   166     QVERIFY(init_count == current_count);
   166 
   167 
   167     QContact alice;
   168     QContact alice;
   168     alice.setType("Jargon");
   169     alice.setType("Jargon");
   169 
   170 
   170     // Save a "non contact(Jargon) type" contact
   171     // Save a "non contact(Jargon) type" contact
   171     QVERIFY(!m_engine->saveContact(&alice, err));
   172     QVERIFY(!m_engine->saveContact(&alice, &err));
   172     QVERIFY(err == QContactManager::InvalidDetailError);
   173     QVERIFY(err == QContactManager::InvalidDetailError);
   173     QVERIFY(alice.id() == empty);
   174     QVERIFY(alice.id() == empty);
   174     QVERIFY(alice.localId() == 0);
   175     QVERIFY(alice.localId() == 0);
   175     current_count = m_engine->contactIds(sortOrders, err).count();
   176     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   176     QVERIFY(err == QContactManager::NoError);
   177     QVERIFY(err == QContactManager::NoError);
   177     QVERIFY(init_count == current_count);
   178     QVERIFY(init_count == current_count);
   178 
   179 
   179     // Save a valid contact
   180     // Save a valid contact
   180     alice.setType(QContactType::TypeContact);
   181     alice.setType(QContactType::TypeContact);
   181     QVERIFY(m_engine->saveContact(&alice, err));
   182     QVERIFY(m_engine->saveContact(&alice, &err));
   182     QVERIFY(err == QContactManager::NoError);
   183     QVERIFY(err == QContactManager::NoError);
   183     QVERIFY(alice.id() != empty);
   184     QVERIFY(alice.id() != empty);
   184     QVERIFY(alice.localId() != 0);
   185     QVERIFY(alice.localId() != 0);
   185     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   186     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   186     QVERIFY(alice.id().managerUri().contains(uri, Qt::CaseInsensitive));
   187     QVERIFY(alice.id().managerUri().contains(uri, Qt::CaseInsensitive));
   187     current_count = m_engine->contactIds(sortOrders, err).count();
   188     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   188     QVERIFY(err == QContactManager::NoError);
   189     QVERIFY(err == QContactManager::NoError);
   189     QVERIFY(init_count + 1 == current_count);
   190     QVERIFY(init_count + 1 == current_count);
   190     
   191     
   191     // Save a valid contact
   192     // Save a valid contact
   192     QContact g;
   193     QContact g;
   193     g.setType(QContactType::TypeGroup);
   194     g.setType(QContactType::TypeGroup);
   194     QContactName en;
   195     QContactName en;
   195     en.setCustomLabel("ccc");
   196     en.setCustomLabel("ccc");
   196     QVERIFY(g.saveDetail(&en));
   197     QVERIFY(g.saveDetail(&en));
   197     QVERIFY(m_engine->saveContact(&g, err));
   198     QVERIFY(m_engine->saveContact(&g, &err));
   198     QVERIFY(err == QContactManager::NoError);
   199     QVERIFY(err == QContactManager::NoError);
   199     QVERIFY(g.id() != empty);
   200     QVERIFY(g.id() != empty);
   200     QVERIFY(g.localId() != 0);
   201     QVERIFY(g.localId() != 0);
   201     QVERIFY(g.id().managerUri().contains(uri, Qt::CaseInsensitive));
   202     QVERIFY(g.id().managerUri().contains(uri, Qt::CaseInsensitive));
   202 }
   203 }
   230     QContactEmailAddress email;
   231     QContactEmailAddress email;
   231     email.setEmailAddress("dummyemail");
   232     email.setEmailAddress("dummyemail");
   232     c.saveDetail(&email);
   233     c.saveDetail(&email);
   233     c.setPreferredDetail("email", email);
   234     c.setPreferredDetail("email", email);
   234 
   235 
   235     QVERIFY(m_engine->saveContact(&c, err));
   236     QVERIFY(m_engine->saveContact(&c, &err));
   236     QVERIFY(err == QContactManager::NoError);
   237     QVERIFY(err == QContactManager::NoError);
   237 
   238 
   238     //fetch the saved contact and check preferred details
   239     //fetch the saved contact and check preferred details
   239     QContact fetched = m_engine->contact(c.localId(), QStringList(), err);
   240     QContactFetchHint hint = QContactFetchHint();
       
   241     QContact fetched = m_engine->contact(c.localId(), hint, &err);
   240     QVERIFY(err == QContactManager::NoError);
   242     QVERIFY(err == QContactManager::NoError);
   241 
   243 
   242     QContactDetail callDetail1 = fetched.preferredDetail("call");
   244     QContactDetail callDetail1 = fetched.preferredDetail("call");
   243     QVERIFY(callDetail1.definitionName() == QContactPhoneNumber::DefinitionName);
   245     QVERIFY(callDetail1.definitionName() == QContactPhoneNumber::DefinitionName);
   244     QContactPhoneNumber fetchedNumber1 = static_cast<QContactPhoneNumber>(callDetail1);
   246     QContactPhoneNumber fetchedNumber1 = static_cast<QContactPhoneNumber>(callDetail1);
   265     c2.saveDetail(&number1);
   267     c2.saveDetail(&number1);
   266     c2.setPreferredDetail("call", number1);
   268     c2.setPreferredDetail("call", number1);
   267     c2.setPreferredDetail("videocall", number1);
   269     c2.setPreferredDetail("videocall", number1);
   268     c2.setPreferredDetail("message", number1);
   270     c2.setPreferredDetail("message", number1);
   269 
   271 
   270     QVERIFY(m_engine->saveContact(&c2, err));
   272     QVERIFY(m_engine->saveContact(&c2, &err));
   271     QVERIFY(err == QContactManager::NoError);
   273     QVERIFY(err == QContactManager::NoError);
   272 
   274 
   273     //fetch the saved contact and check preferred details
   275     //fetch the saved contact and check preferred details
   274     QContact fetched2 = m_engine->contact(c2.localId(), QStringList(), err);
   276     QContact fetched2 = m_engine->contact(c2.localId(), hint, &err);
   275     QVERIFY(err == QContactManager::NoError);
   277     QVERIFY(err == QContactManager::NoError);
   276 
   278 
   277     QContactDetail callDetail4 = fetched2.preferredDetail("call");
   279     QContactDetail callDetail4 = fetched2.preferredDetail("call");
   278     QVERIFY(callDetail4.definitionName() == QContactPhoneNumber::DefinitionName);
   280     QVERIFY(callDetail4.definitionName() == QContactPhoneNumber::DefinitionName);
   279     QContactPhoneNumber fetchedNumber4 = static_cast<QContactPhoneNumber>(callDetail4);
   281     QContactPhoneNumber fetchedNumber4 = static_cast<QContactPhoneNumber>(callDetail4);
   291 }
   293 }
   292 
   294 
   293 void TestSymbianEngine::saveContacts()
   295 void TestSymbianEngine::saveContacts()
   294 {
   296 {
   295     QContactManager::Error err;
   297     QContactManager::Error err;
       
   298     QContactFilter defaultFilter = QContactFilter();
   296     QList<QContactSortOrder> sortOrders;
   299     QList<QContactSortOrder> sortOrders;
   297     QList<QContact> contacts;
   300     QList<QContact> contacts;
   298     QContactId empty;
   301     QContactId empty;
   299     int count = 5;
   302     int count = 5;
   300 
   303 
   301     int init_count = m_engine->contactIds(sortOrders, err).count();
   304     int init_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   302     QVERIFY(err == QContactManager::NoError);
   305     QVERIFY(err == QContactManager::NoError);
   303 
   306 
   304     // NULL
   307     // NULL
   305     QMap<int, QContactManager::Error> errorMap;
   308     QMap<int, QContactManager::Error> errorMap;
   306     QVERIFY(!m_engine->saveContacts(NULL, &errorMap, err));
   309     QVERIFY(!m_engine->saveContacts(NULL, &errorMap, &err));
   307     QVERIFY(errorMap.count() == 0);
   310     QVERIFY(errorMap.count() == 0);
   308     QVERIFY(err == QContactManager::BadArgumentError);
   311     QVERIFY(err == QContactManager::BadArgumentError);
   309     int current_count = m_engine->contactIds(sortOrders, err).count();
   312     int current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   310     QVERIFY(err == QContactManager::NoError);
   313     QVERIFY(err == QContactManager::NoError);
   311     QVERIFY(init_count == current_count);
   314     QVERIFY(init_count == current_count);
   312 
   315 
   313     // Save a "non contact(Jargon) type" contacts
   316     // Save a "non contact(Jargon) type" contacts
   314     for(int i=0; i<count; i++) {
   317     for(int i=0; i<count; i++) {
   315         QContact alice;
   318         QContact alice;
   316         alice.setType("Jargon");
   319         alice.setType("Jargon");
   317         contacts.append(alice);
   320         contacts.append(alice);
   318     }
   321     }
   319     QVERIFY(!m_engine->saveContacts(&contacts, &errorMap, err));
   322     QVERIFY(!m_engine->saveContacts(&contacts, &errorMap, &err));
   320     QVERIFY(err == QContactManager::InvalidDetailError);
   323     QVERIFY(err == QContactManager::InvalidDetailError);
   321     foreach(QContactManager::Error err, errorMap) {
   324     foreach(QContactManager::Error err, errorMap) {
   322         QVERIFY(err == QContactManager::InvalidDetailError);
   325         QVERIFY(err == QContactManager::InvalidDetailError);
   323     }
   326     }
   324     foreach(QContact c, contacts) {
   327     foreach(const QContact& c, contacts) {
   325         QVERIFY(c.id() == empty);
   328         QVERIFY(c.id() == empty);
   326         QVERIFY(c.localId() == 0);
   329         QVERIFY(c.localId() == 0);
   327     }
   330     }
   328     current_count = m_engine->contactIds(sortOrders, err).count();
   331     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   329     QVERIFY(err == QContactManager::NoError);
   332     QVERIFY(err == QContactManager::NoError);
   330     QVERIFY(init_count == current_count);
   333     QVERIFY(init_count == current_count);
   331     contacts.clear();
   334     contacts.clear();
   332 
   335 
   333     // Save valid contacts
   336     // Save valid contacts
   334     for(int i=0; i<count; i++) {
   337     for(int i=0; i<count; i++) {
   335         QContact alice;
   338         QContact alice;
   336         alice.setType(QContactType::TypeContact);
   339         alice.setType(QContactType::TypeContact);
   337         contacts.append(alice);
   340         contacts.append(alice);
   338     }
   341     }
   339     QVERIFY(m_engine->saveContacts(&contacts, &errorMap, err));
   342     QVERIFY(m_engine->saveContacts(&contacts, &errorMap, &err));
   340     QVERIFY(err == QContactManager::NoError);
   343     QVERIFY(err == QContactManager::NoError);
   341     foreach(QContactManager::Error err, errorMap) {
   344     foreach(QContactManager::Error err, errorMap) {
   342         QVERIFY(err == QContactManager::NoError);
   345         QVERIFY(err == QContactManager::NoError);
   343     }
   346     }
   344     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   347     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   345     foreach(QContact c, contacts) {
   348     foreach(const QContact& c, contacts) {
   346         QVERIFY(c.id() != empty);
   349         QVERIFY(c.id() != empty);
   347         QVERIFY(c.localId() != 0);
   350         QVERIFY(c.localId() != 0);
   348         QVERIFY(c.id().managerUri().contains(uri, Qt::CaseInsensitive));
   351         QVERIFY(c.id().managerUri().contains(uri, Qt::CaseInsensitive));
   349     }
   352     }
   350     current_count = m_engine->contactIds(sortOrders, err).count();
   353     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   351     QVERIFY(err == QContactManager::NoError);
   354     QVERIFY(err == QContactManager::NoError);
   352     QVERIFY(init_count + count == current_count);
   355     QVERIFY(init_count + count == current_count);
   353     contacts.clear();
   356     contacts.clear();
   354 
   357 
   355     // Save with one invalid contact in list
   358     // Save with one invalid contact in list
   356     init_count = m_engine->contactIds(sortOrders, err).count();
   359     init_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   357     for(int i=0; i<count; i++) {
   360     for(int i=0; i<count; i++) {
   358         QContact alice;
   361         QContact alice;
   359         alice.setType(QContactType::TypeContact);
   362         alice.setType(QContactType::TypeContact);
   360         contacts.append(alice);
   363         contacts.append(alice);
   361     }
   364     }
   362     QContact invalid;
   365     QContact invalid;
   363     invalid.setType("Jasdfasd");
   366     invalid.setType("Jasdfasd");
   364     contacts.insert(3, invalid);
   367     contacts.insert(3, invalid);
   365 
   368 
   366     QVERIFY(!m_engine->saveContacts(&contacts, &errorMap, err));
   369     QVERIFY(!m_engine->saveContacts(&contacts, &errorMap, &err));
   367     QVERIFY(err == QContactManager::InvalidDetailError);
   370     QVERIFY(err == QContactManager::InvalidDetailError);
   368     foreach(QContactManager::Error err, errorMap) {
   371     foreach(QContactManager::Error err, errorMap) {
   369         QVERIFY(err == QContactManager::InvalidDetailError);
   372         QVERIFY(err == QContactManager::InvalidDetailError);
   370     }
   373     }
   371 
   374 
   378             QVERIFY(c.id() != empty);
   381             QVERIFY(c.id() != empty);
   379             QVERIFY(c.localId() != 0);
   382             QVERIFY(c.localId() != 0);
   380             QVERIFY(c.id().managerUri().contains(uri, Qt::CaseInsensitive));
   383             QVERIFY(c.id().managerUri().contains(uri, Qt::CaseInsensitive));
   381         }
   384         }
   382     }
   385     }
   383     current_count = m_engine->contactIds(sortOrders, err).count();
   386     current_count = m_engine->contactIds(defaultFilter, sortOrders, &err).count();
   384     QVERIFY(err == QContactManager::NoError);
   387     QVERIFY(err == QContactManager::NoError);
   385     QVERIFY(init_count + count == current_count);
   388     QVERIFY(init_count + count == current_count);
   386     contacts.clear();
   389     contacts.clear();
   387 }
   390 }
   388 
   391 
   389 void TestSymbianEngine::retrieveContact()
   392 void TestSymbianEngine::retrieveContact()
   390 {
   393 {
   391     QContactManager::Error err;
   394     QContactManager::Error err;
       
   395     QContactFetchHint hint = QContactFetchHint();
   392 
   396 
   393     QContact alice;
   397     QContact alice;
   394     alice.setType(QContactType::TypeContact);
   398     alice.setType(QContactType::TypeContact);
   395     QVERIFY(m_engine->saveContact(&alice, err));
   399     QVERIFY(m_engine->saveContact(&alice, &err));
   396     QVERIFY(err == QContactManager::NoError);
   400     QVERIFY(err == QContactManager::NoError);
   397 
   401 
   398     // Retrieve "non contact"
   402     // Retrieve "non contact"
   399     QContact c = m_engine->contact(0, QStringList(), err);
   403     QContact c = m_engine->contact(0, hint, &err);
   400     QVERIFY(&c != NULL);
   404     QVERIFY(&c != NULL);
   401     QVERIFY(c.localId() == 0);
   405     QVERIFY(c.localId() == 0);
   402     QVERIFY(err == QContactManager::DoesNotExistError);
   406     QVERIFY(err == QContactManager::DoesNotExistError);
   403 
   407 
   404     // Retrieve valid existing contact
   408     // Retrieve valid existing contact
   405     QContactLocalId aid = alice.localId();
   409     QContactLocalId aid = alice.localId();
   406     c = m_engine->contact(aid, QStringList(), err);
   410     c = m_engine->contact(aid, hint, &err);
   407     QVERIFY(&c != NULL);
   411     QVERIFY(&c != NULL);
   408     QVERIFY(c.localId() == aid);
   412     QVERIFY(c.localId() == aid);
   409     QVERIFY(err == QContactManager::NoError);
   413     QVERIFY(err == QContactManager::NoError);
   410 }
   414 }
   411 
   415 
   412 void TestSymbianEngine::retrieveContacts()
   416 void TestSymbianEngine::retrieveContacts()
   413 {
   417 {
   414     QContactManager::Error err;
   418     QContactManager::Error err;
   415     QContactFilter f;
   419     QContactFilter f;
       
   420     QContactFilter defaultFilter = QContactFilter();
       
   421     QContactFetchHint hint = QContactFetchHint();
   416     QList<QContactSortOrder> s;
   422     QList<QContactSortOrder> s;
   417     QList<QContactLocalId> cnt_ids;
   423     QList<QContactLocalId> cnt_ids;
   418 
   424 
   419     QContact c;
   425     QContact c;
   420     c.setType(QContactType::TypeContact);
   426     c.setType(QContactType::TypeContact);
   425     QContactPhoneNumber number;
   431     QContactPhoneNumber number;
   426     number.setContexts("Home");
   432     number.setContexts("Home");
   427     number.setSubTypes("Mobile");
   433     number.setSubTypes("Mobile");
   428     number.setNumber("12345678");
   434     number.setNumber("12345678");
   429     QVERIFY(c.saveDetail(&number));
   435     QVERIFY(c.saveDetail(&number));
   430     QVERIFY(m_engine->saveContact(&c, err));
   436     QVERIFY(m_engine->saveContact(&c, &err));
   431     QVERIFY(err == QContactManager::NoError);
   437     QVERIFY(err == QContactManager::NoError);
   432 
   438 
   433     QContact d;
   439     QContact d;
   434     d.setType(QContactType::TypeContact);
   440     d.setType(QContactType::TypeContact);
   435     QContactName dn;
   441     QContactName dn;
   436     dn.setFirstName("bbb");
   442     dn.setFirstName("bbb");
   437     QVERIFY(d.saveDetail(&dn));
   443     QVERIFY(d.saveDetail(&dn));
   438     QVERIFY(m_engine->saveContact(&d, err));
   444     QVERIFY(m_engine->saveContact(&d, &err));
   439     QVERIFY(err == QContactManager::NoError);
   445     QVERIFY(err == QContactManager::NoError);
   440 
   446 
   441     QContact e;
   447     QContact e;
   442     e.setType(QContactType::TypeGroup);
   448     e.setType(QContactType::TypeGroup);
   443     QContactName en;
   449     QContactName en;
   444     en.setCustomLabel("ccc");
   450     en.setCustomLabel("ccc");
   445     QVERIFY(e.saveDetail(&en));
   451     QVERIFY(e.saveDetail(&en));
   446     QVERIFY(m_engine->saveContact(&e, err));
   452     QVERIFY(m_engine->saveContact(&e, &err));
   447     QVERIFY(err == QContactManager::NoError);
   453     QVERIFY(err == QContactManager::NoError);
   448 
   454 
   449     // Retrieve all contacts
   455     // Retrieve all contacts
   450     cnt_ids = m_engine->contactIds(f, s, err);
   456     cnt_ids = m_engine->contactIds(f, s, &err);
   451     QVERIFY(err == QContactManager::NoError);
   457     QVERIFY(err == QContactManager::NoError);
       
   458     QVERIFY(cnt_ids.count() > 0);
   452 
   459 
   453     QContactDetailFilter mobileFilter;
   460     QContactDetailFilter mobileFilter;
   454     mobileFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldSubTypes);
   461     mobileFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldSubTypes);
   455     mobileFilter.setValue(QLatin1String(QContactPhoneNumber::SubTypeMobile));
   462     mobileFilter.setValue(QLatin1String(QContactPhoneNumber::SubTypeMobile));
   456 
   463 
   457     // Retrieve contacts with mobile number
   464     // Retrieve contacts with mobile number
   458     cnt_ids = m_engine->contactIds(mobileFilter, s, err);
   465     cnt_ids = m_engine->contactIds(mobileFilter, s, &err);
   459     QVERIFY(err == QContactManager::NoError);
   466     QVERIFY(err == QContactManager::NoError);
       
   467     QVERIFY(cnt_ids.count() > 0);
       
   468     
       
   469     // Slow filter
       
   470     QList<QContactLocalId> fast_ids = m_engine->contactIds(mobileFilter, s, &err);
       
   471     QList<QContactLocalId> all_ids = m_engine->contactIds(f, s, &err);
       
   472     QList<QContactLocalId> slow_ids = m_engine->slowFilter(mobileFilter, all_ids, &err);
       
   473     QVERIFY(err == QContactManager::NoError);
       
   474     QVERIFY(slow_ids.count() == fast_ids.count());
   460 
   475 
   461     QContactDetailFilter invalidFilter;
   476     QContactDetailFilter invalidFilter;
   462     mobileFilter.setDetailDefinitionName("asfdasdf", "asdfasdf");
   477     mobileFilter.setDetailDefinitionName("asfdasdf", "asdfasdf");
   463 
   478 
   464     // Retrieve contacts with invalid filter
   479     // Retrieve contacts with invalid filter
   465     cnt_ids = m_engine->contactIds(invalidFilter, s, err);
   480     cnt_ids = m_engine->contactIds(invalidFilter, s, &err);
   466     QVERIFY(err == QContactManager::NotSupportedError);
   481     QVERIFY(err == QContactManager::NotSupportedError);
   467 
   482 
   468     // Retrieve sorted contacts
   483     // Retrieve sorted contacts
   469     QContactSortOrder sortOrder;
   484     QContactSortOrder sortOrder;
   470     QList<QContactSortOrder> s1;
   485     QList<QContactSortOrder> s1;
   471     sortOrder.setDetailDefinitionName(QContactName::DefinitionName,  QContactName::FieldFirst);
   486     sortOrder.setDetailDefinitionName(QContactName::DefinitionName,  QContactName::FieldFirstName);
   472     sortOrder.setBlankPolicy(QContactSortOrder::BlanksLast);
   487     sortOrder.setBlankPolicy(QContactSortOrder::BlanksLast);
   473     sortOrder.setDirection(Qt::AscendingOrder);
   488     sortOrder.setDirection(Qt::AscendingOrder);
   474     sortOrder.setCaseSensitivity(Qt::CaseInsensitive);
   489     sortOrder.setCaseSensitivity(Qt::CaseInsensitive);
   475     s1.append(sortOrder);
   490     s1.append(sortOrder);
   476 
   491 
   477     cnt_ids = m_engine->contactIds(s1, err);
   492     cnt_ids = m_engine->contactIds(defaultFilter, s1, &err);
   478     QVERIFY(err == QContactManager::NoError);
   493     QVERIFY(err == QContactManager::NoError);
   479 
   494 
   480     // Retrieve with invalid sort order
   495     // Retrieve with invalid sort order
   481     QContactSortOrder sortOrder1;
   496     QContactSortOrder sortOrder1;
   482     QList<QContactSortOrder> s2;
   497     QList<QContactSortOrder> s2;
   483     sortOrder1.setDetailDefinitionName("asdfasdf", "asdfasd");
   498     sortOrder1.setDetailDefinitionName("asdfasdf", "asdfasd");
   484 
   499 
   485     cnt_ids = m_engine->contactIds(s2, err);
   500     cnt_ids = m_engine->contactIds(defaultFilter, s2, &err);
       
   501     QVERIFY(err == QContactManager::NoError);
       
   502     
       
   503     // Retrieve full contacts (with all details)
       
   504     QList<QContact> contactList;
       
   505     QList<QContactSortOrder> sortOrders;
       
   506     QStringList definitionRestrictions;
       
   507     contactList = m_engine->contacts(defaultFilter, sortOrders, hint, &err);
       
   508     QVERIFY(err == QContactManager::NoError);
       
   509     QContactFilter filter;
       
   510     contactList = m_engine->contacts(filter, sortOrders, hint, &err);
   486     QVERIFY(err == QContactManager::NoError);
   511     QVERIFY(err == QContactManager::NoError);
   487 }
   512 }
   488 
   513 
   489 void TestSymbianEngine::updateContact()
   514 void TestSymbianEngine::updateContact()
   490 {
   515 {
   491     QContactManager::Error err;
   516     QContactManager::Error err;
       
   517     QContactFetchHint hint = QContactFetchHint();
   492     QContact c;
   518     QContact c;
   493 
   519 
   494     QVERIFY(m_engine->saveContact(&c, err));
   520     QVERIFY(m_engine->saveContact(&c, &err));
   495     QVERIFY(err == QContactManager::NoError);
   521     QVERIFY(err == QContactManager::NoError);
   496 
   522 
   497     int details_before = c.details().count();
   523     int details_before = c.details().count();
   498 
   524 
   499     QContactName aliceName;
   525     QContactName aliceName;
   506     number.setNumber("12345678");
   532     number.setNumber("12345678");
   507     c.saveDetail(&number);
   533     c.saveDetail(&number);
   508 
   534 
   509     // update the contact
   535     // update the contact
   510     QContactLocalId id = c.localId();
   536     QContactLocalId id = c.localId();
   511     QVERIFY(m_engine->saveContact(&c, err));
   537     QVERIFY(m_engine->saveContact(&c, &err));
   512     QVERIFY(err == QContactManager::NoError);
   538     QVERIFY(err == QContactManager::NoError);
   513 
   539 
   514     // Verify that contact has been updated
   540     // Verify that contact has been updated
   515     QContact d = m_engine->contact(id, QStringList(), err);
   541     QContact d = m_engine->contact(id, hint, &err);
   516     QVERIFY(err == QContactManager::NoError);
   542     QVERIFY(err == QContactManager::NoError);
   517     QVERIFY(d.localId() == id);
   543     QVERIFY(d.localId() == id);
   518     QVERIFY(d.details().count() > details_before);
   544     QVERIFY(d.details().count() > details_before);
   519     QString str = d.detail(QContactPhoneNumber::DefinitionName).definitionName();
   545     QString str = d.detail(QContactPhoneNumber::DefinitionName).definitionName();
   520     QVERIFY(str == QContactPhoneNumber::DefinitionName);
   546     QVERIFY(str == QContactPhoneNumber::DefinitionName);
   523 void TestSymbianEngine::updateContactByUid()
   549 void TestSymbianEngine::updateContactByUid()
   524 {
   550 {
   525     QContactManager::Error err;
   551     QContactManager::Error err;
   526     QContact c;
   552     QContact c;
   527 
   553 
   528     QVERIFY(m_engine->saveContact(&c, err));
   554     QVERIFY(m_engine->saveContact(&c, &err));
   529     QVERIFY(err == QContactManager::NoError);
   555     QVERIFY(err == QContactManager::NoError);
   530     QContactLocalId initialId = c.localId();
   556     QContactLocalId initialId = c.localId();
   531     
   557     
   532     QContactGuid guidDetail = static_cast<QContactGuid>(c.details(QContactGuid::DefinitionName).at(0));
   558     QContactGuid guidDetail = static_cast<QContactGuid>(c.details(QContactGuid::DefinitionName).at(0));
   533     QString uid = guidDetail.guid();
   559     QString uid = guidDetail.guid();
   547     number.setSubTypes("Mobile");
   573     number.setSubTypes("Mobile");
   548     number.setNumber("12345678");
   574     number.setNumber("12345678");
   549     c.saveDetail(&number);
   575     c.saveDetail(&number);
   550 
   576 
   551     //verify that the same contact was updated
   577     //verify that the same contact was updated
   552     QVERIFY(m_engine->saveContact(&c, err));
   578     QVERIFY(m_engine->saveContact(&c, &err));
   553     QContactLocalId id = c.localId();
   579     QContactLocalId id = c.localId();
   554     QVERIFY(err == QContactManager::NoError);
   580     QVERIFY(err == QContactManager::NoError);
   555     QVERIFY(initialId == id);
   581     QVERIFY(initialId == id);
   556 }
   582 }
   557 
   583 
   558 void TestSymbianEngine::removeContact()
   584 void TestSymbianEngine::removeContact()
   559 {
   585 {
   560     QContactManager::Error err;
   586     QContactManager::Error err;
       
   587     QContactFetchHint hint = QContactFetchHint();
   561 
   588 
   562     QContact c;
   589     QContact c;
   563     c.setType(QContactType::TypeContact);
   590     c.setType(QContactType::TypeContact);
   564     QVERIFY(m_engine->saveContact(&c, err));
   591     QVERIFY(m_engine->saveContact(&c, &err));
   565     QVERIFY(err == QContactManager::NoError);
   592     QVERIFY(err == QContactManager::NoError);
   566 
   593 
   567     // Remove existing contact
   594     // Remove existing contact
   568     QContactLocalId id = c.localId();
   595     QContactLocalId id = c.localId();
   569     QVERIFY(m_engine->removeContact(id, err));
   596     QVERIFY(m_engine->removeContact(id, &err));
   570     QVERIFY(err == QContactManager::NoError);
   597     QVERIFY(err == QContactManager::NoError);
   571 
   598 
   572     // Verify that contact has been removed
   599     // Verify that contact has been removed
   573     QContact f = m_engine->contact(id, QStringList(), err);
   600     QContact f = m_engine->contact(id, hint, &err);
   574     QVERIFY(f.localId() == 0);
   601     QVERIFY(f.localId() == 0);
   575     QVERIFY(err == QContactManager::DoesNotExistError);
   602     QVERIFY(err == QContactManager::DoesNotExistError);
   576 
   603 
   577     // Remove non existent contact
   604     // Remove non existent contact
   578     QVERIFY(!m_engine->removeContact(0, err));
   605     QVERIFY(!m_engine->removeContact(0, &err));
   579     QVERIFY(err == QContactManager::DoesNotExistError);
   606     QVERIFY(err == QContactManager::DoesNotExistError);
   580 }
   607 }
   581 
   608 
   582 void TestSymbianEngine::removeContacts()
   609 void TestSymbianEngine::removeContacts()
   583 {
   610 {
   584     QContactManager::Error err;
   611     QContactManager::Error err;
       
   612     QContactFetchHint hint = QContactFetchHint();
   585     QList<QContactLocalId> contacts;
   613     QList<QContactLocalId> contacts;
   586     int count = 5;
   614     int count = 5;
   587 
   615 
   588     // Remove non existent contacts
   616     // Remove non existent contacts
   589     QMap<int, QContactManager::Error> errorMap;
   617     QMap<int, QContactManager::Error> errorMap;
   590     QVERIFY(m_engine->removeContacts(&contacts, &errorMap, err));
   618     QVERIFY(m_engine->removeContacts(contacts, &errorMap, &err));
   591     QVERIFY(err == QContactManager::NoError);
   619     QVERIFY(err == QContactManager::NoError);
   592     QVERIFY(errorMap.count() == 0);
   620     QVERIFY(errorMap.count() == 0);
   593 
       
   594     // NULL argument
       
   595     QVERIFY(!m_engine->removeContacts(NULL, &errorMap, err));
       
   596     QVERIFY(errorMap.count() == 0);
       
   597     QVERIFY(err == QContactManager::BadArgumentError);
       
   598 
   621 
   599     // Remove existing contacts
   622     // Remove existing contacts
   600     for(int i=0; i<count; i++) {
   623     for(int i=0; i<count; i++) {
   601         QContact c;
   624         QContact c;
   602         c.setType(QContactType::TypeContact);
   625         c.setType(QContactType::TypeContact);
   603         QVERIFY(m_engine->saveContact(&c, err));
   626         QVERIFY(m_engine->saveContact(&c, &err));
   604         QVERIFY(err == QContactManager::NoError);
   627         QVERIFY(err == QContactManager::NoError);
   605         contacts.append(c.localId());
   628         contacts.append(c.localId());
   606     }
   629     }
   607     QVERIFY(m_engine->removeContacts(&contacts, &errorMap, err));
   630     QVERIFY(m_engine->removeContacts(contacts, &errorMap, &err));
   608     QVERIFY(err == QContactManager::NoError);
   631     QVERIFY(err == QContactManager::NoError);
   609     foreach(QContactManager::Error e, errorMap) {
   632     foreach(QContactManager::Error e, errorMap) {
   610         QVERIFY(e == QContactManager::NoError);
   633         QVERIFY(e == QContactManager::NoError);
   611     }
   634     }
   612 
   635 
   613     // Verify that contacts have been removed
   636     // Verify that contacts have been removed
   614     for(int i=0; i<contacts.count(); i++) {
   637     for(int i=0; i<contacts.count(); i++) {
   615         QContact f = m_engine->contact(contacts[i], QStringList(), err);
   638         QContact f = m_engine->contact(contacts[i], hint, &err);
   616         QVERIFY(f.localId() == 0);
   639         QVERIFY(f.localId() == 0);
   617         QVERIFY(err == QContactManager::DoesNotExistError);
   640         QVERIFY(err == QContactManager::DoesNotExistError);
   618     }
   641     }
   619 
   642 
   620     // Remove a list with one non existent contact
   643     // Remove a list with one non existent contact
   621     contacts.clear();
   644     contacts.clear();
   622     for(int i=0; i<count; i++) {
   645     for(int i=0; i<count; i++) {
   623         QContact c;
   646         QContact c;
   624         c.setType(QContactType::TypeContact);
   647         c.setType(QContactType::TypeContact);
   625         QVERIFY(m_engine->saveContact(&c, err));
   648         QVERIFY(m_engine->saveContact(&c, &err));
   626         QVERIFY(err == QContactManager::NoError);
   649         QVERIFY(err == QContactManager::NoError);
   627         contacts.append(c.localId());
   650         contacts.append(c.localId());
   628     }
   651     }
   629     contacts.insert(3, 0);
   652     contacts.insert(3, 0);
   630 
   653 
   631     QVERIFY(!m_engine->removeContacts(&contacts, &errorMap, err));
   654     QVERIFY(!m_engine->removeContacts(contacts, &errorMap, &err));
   632     QVERIFY(err == QContactManager::DoesNotExistError);
   655     QVERIFY(err == QContactManager::DoesNotExistError);
   633     foreach(QContactManager::Error e, errorMap) {
   656     foreach(QContactManager::Error e, errorMap) {
   634         QVERIFY(e == QContactManager::DoesNotExistError);
   657         QVERIFY(e == QContactManager::DoesNotExistError);
   635     }
   658     }
   636 
   659 
   637     for(int i=0; i<contacts.count(); i++) {
   660     for(int i=0; i<contacts.count(); i++) {
   638         QContact f = m_engine->contact(contacts[i], QStringList(), err);
   661         QContact f = m_engine->contact(contacts[i], hint, &err);
   639         QVERIFY(f.localId() == 0);
   662         QVERIFY(f.localId() == 0);
   640         QVERIFY(err == QContactManager::DoesNotExistError);
   663         QVERIFY(err == QContactManager::DoesNotExistError);
   641     }
   664     }
   642 }
   665 }
   643 
   666 
   648     // Create a new contact own card
   671     // Create a new contact own card
   649     QContact own;
   672     QContact own;
   650     QContactName ownName;
   673     QContactName ownName;
   651     ownName.setFirstName("Own");
   674     ownName.setFirstName("Own");
   652     own.saveDetail(&ownName);
   675     own.saveDetail(&ownName);
   653     QVERIFY(m_engine->saveContact(&own, err));
   676     QVERIFY(m_engine->saveContact(&own, &err));
   654     QVERIFY(err == QContactManager::NoError);
   677     QVERIFY(err == QContactManager::NoError);
   655 
   678 
   656     // Set a non existent contact as own card and verify
   679     // Set a non existent contact as own card and verify
   657     // ensure this contact does not exist in dbase
   680     // ensure this contact does not exist in dbase
   658     QContactLocalId id(12);
   681     QContactLocalId id(12);
   659     m_engine->removeContact(id, err);   // Dont test err. May or may not be in dbase
   682     m_engine->removeContact(id, &err);   // Don't test err. May or may not be in dbase
   660     QVERIFY(!m_engine->setSelfContactId(id, err)); // does not exist
   683     QVERIFY(!m_engine->setSelfContactId(id, &err)); // does not exist
   661     QVERIFY(err == QContactManager::DoesNotExistError);
   684     QVERIFY(err == QContactManager::DoesNotExistError);
   662 
   685 
   663     // Test a "0" contact id
   686     // Test a "0" contact id
   664     QVERIFY(!m_engine->setSelfContactId(0, err)); // Bad argument
   687     QVERIFY(!m_engine->setSelfContactId(0, &err)); // Bad argument
   665     QVERIFY(err == QContactManager::BadArgumentError);
   688     QVERIFY(err == QContactManager::BadArgumentError);
   666 
   689 
   667     // Set an existent contact as own card
   690     // Set an existent contact as own card
   668     QVERIFY(m_engine->setSelfContactId(own.localId(), err));
   691     QVERIFY(m_engine->setSelfContactId(own.localId(), &err));
   669     QVERIFY(err == QContactManager::NoError);
   692     QVERIFY(err == QContactManager::NoError);
   670 }
   693 }
   671 
   694 
   672 void TestSymbianEngine::retrieveOwnCard()
   695 void TestSymbianEngine::retrieveOwnCard()
   673 {
   696 {
   676     // Create a new contact own card
   699     // Create a new contact own card
   677     QContact own;
   700     QContact own;
   678     QContactName ownName;
   701     QContactName ownName;
   679     ownName.setFirstName("Own");
   702     ownName.setFirstName("Own");
   680     own.saveDetail(&ownName);
   703     own.saveDetail(&ownName);
   681     QVERIFY(m_engine->saveContact(&own, err));
   704     QVERIFY(m_engine->saveContact(&own, &err));
   682     QVERIFY(err == QContactManager::NoError);
   705     QVERIFY(err == QContactManager::NoError);
   683     QVERIFY(m_engine->setSelfContactId(own.localId(), err));
   706     QVERIFY(m_engine->setSelfContactId(own.localId(), &err));
   684     QVERIFY(err == QContactManager::NoError);
   707     QVERIFY(err == QContactManager::NoError);
   685 
   708 
   686     // Fetch existing self contact
   709     // Fetch existing self contact
   687     QContactLocalId own_id = m_engine->selfContactId(err);
   710     QContactLocalId own_id = m_engine->selfContactId(&err);
   688     QVERIFY(err == QContactManager::NoError);
   711     QVERIFY(err == QContactManager::NoError);
   689     QVERIFY(own_id == own.localId());
   712     QVERIFY(own_id == own.localId());
   690 
   713 
   691     // Remove self contact and verify
   714     // Remove self contact and verify
   692     QVERIFY(m_engine->removeContact(own.localId(), err));
   715     QVERIFY(m_engine->removeContact(own.localId(), &err));
   693     QContactLocalId idr = m_engine->selfContactId(err);
   716     QContactLocalId idr = m_engine->selfContactId(&err);
   694     QVERIFY(err == QContactManager::DoesNotExistError);
   717     QVERIFY(err == QContactManager::DoesNotExistError);
   695     QVERIFY(idr == 0);
   718     QVERIFY(idr == 0);
   696 }
   719 }
   697 
   720 
   698 void TestSymbianEngine::filterSupport()
   721 void TestSymbianEngine::filterSupport()
   763 
   786 
   764     // Add valid group contact
   787     // Add valid group contact
   765     QContact g;
   788     QContact g;
   766     g.setType(QContactType::TypeGroup);
   789     g.setType(QContactType::TypeGroup);
   767 
   790 
   768     QVERIFY(m_engine->saveContact(&g, err));
   791     QVERIFY(m_engine->saveContact(&g, &err));
   769     QVERIFY(err == QContactManager::NoError);
   792     QVERIFY(err == QContactManager::NoError);
   770     QVERIFY(g.id() != empty);
   793     QVERIFY(g.id() != empty);
   771     QVERIFY(g.localId() != 0);
   794     QVERIFY(g.localId() != 0);
   772     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   795     QString uri = QString(QLatin1String(CNT_SYMBIAN_MANAGER_NAME));
   773     QVERIFY(g.id().managerUri().contains(uri, Qt::CaseInsensitive));
   796     QVERIFY(g.id().managerUri().contains(uri, Qt::CaseInsensitive));
   774 
   797 
   775     // Add invalid group contact
   798     // Add invalid group contact
   776     QContact g1;
   799     QContact g1;
   777     g1.setType("Jargon");
   800     g1.setType("Jargon");
   778 
   801 
   779     QVERIFY(!m_engine->saveContact(&g1, err));
   802     QVERIFY(!m_engine->saveContact(&g1, &err));
   780     QVERIFY(err == QContactManager::InvalidDetailError);
   803     QVERIFY(err == QContactManager::InvalidDetailError);
   781     QVERIFY(g1.id() == empty);
   804     QVERIFY(g1.id() == empty);
   782     QVERIFY(g1.localId() == 0);
   805     QVERIFY(g1.localId() == 0);
   783 }
   806 }
   784 
   807 
   790     // retrieve group contacts
   813     // retrieve group contacts
   791     QContactDetailFilter filter;
   814     QContactDetailFilter filter;
   792     filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
   815     filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
   793     filter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
   816     filter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
   794     
   817     
   795     QList<QContactLocalId> grp_ids = m_engine->contactIds(filter, s, err);
   818     QList<QContactLocalId> grp_ids = m_engine->contactIds(filter, s, &err);
   796     QVERIFY(err == QContactManager::NoError);
   819     QVERIFY(err == QContactManager::NoError);
   797     QVERIFY(err == QContactManager::NoError);
   820     QVERIFY(err == QContactManager::NoError);
   798 
   821 
   799     QContact g;
   822     QContact g;
   800     g.setType(QContactType::TypeGroup);
   823     g.setType(QContactType::TypeGroup);
   801     QVERIFY(m_engine->saveContact(&g, err));
   824     QVERIFY(m_engine->saveContact(&g, &err));
   802     QVERIFY(err == QContactManager::NoError);
   825     QVERIFY(err == QContactManager::NoError);
   803 
   826 
   804     QList<QContactLocalId> grp_ids1 = m_engine->contactIds(filter, s, err);
   827     QList<QContactLocalId> grp_ids1 = m_engine->contactIds(filter, s, &err);
   805     QVERIFY(err == QContactManager::NoError);
   828     QVERIFY(err == QContactManager::NoError);
   806     QVERIFY(grp_ids.count() + 1 == grp_ids1.count());
   829     QVERIFY(grp_ids.count() + 1 == grp_ids1.count());
   807 
   830 
   808 }
   831 }
   809 
   832 
   812     // More relationships logic is tested in relationship unit tests.
   835     // More relationships logic is tested in relationship unit tests.
   813     // We do simple tests here
   836     // We do simple tests here
   814     QContactManager::Error error;
   837     QContactManager::Error error;
   815 
   838 
   816     QContact a;
   839     QContact a;
   817     QVERIFY(m_engine->saveContact(&a, error));
   840     QVERIFY(m_engine->saveContact(&a, &error));
   818     QContact b;
   841     QContact b;
   819     QVERIFY(m_engine->saveContact(&b, error));
   842     QVERIFY(m_engine->saveContact(&b, &error));
   820 
   843 
   821     QContactRelationship rel;
   844     QContactRelationship rel;
   822     rel.setFirst(a.id());
   845     rel.setFirst(a.id());
   823     rel.setSecond(b.id());
   846     rel.setSecond(b.id());
   824     rel.setRelationshipType(QContactRelationship::HasSpouse);
   847     rel.setRelationshipType(QContactRelationship::HasSpouse);
   825 
   848 
   826     // Add relationship
   849     // Add relationship
   827     m_engine->saveRelationship(&rel, error);
   850     m_engine->saveRelationship(&rel, &error);
   828     bool isValid(false);
   851     bool isValid(false);
   829     if (error == QContactManager::NoError ||
   852     if (error == QContactManager::NoError ||
   830         error == QContactManager::NotSupportedError)
   853         error == QContactManager::NotSupportedError)
   831         isValid = true;
   854         isValid = true;
   832 
   855 
   833     QVERIFY(isValid);
   856     QVERIFY(isValid);
   834 
   857 
   835     // Remove relationship
   858     // Remove relationship
   836     m_engine->removeRelationship(rel, error);
   859     m_engine->removeRelationship(rel, &error);
   837     if (error == QContactManager::NoError ||
   860     if (error == QContactManager::NoError ||
   838         error == QContactManager::NotSupportedError)
   861         error == QContactManager::NotSupportedError)
   839         isValid = true;
   862         isValid = true;
   840     else
   863     else
   841         isValid = false;
   864         isValid = false;
   842     QVERIFY(isValid);
   865     QVERIFY(isValid);
   843     
   866 
   844     QStringList supportedRelationships =
   867     // TODO: replacement?
       
   868     /*QStringList supportedRelationships =
   845         m_engine->supportedRelationshipTypes(QContactType::TypeGroup);
   869         m_engine->supportedRelationshipTypes(QContactType::TypeGroup);
   846     QVERIFY(supportedRelationships.contains(QContactRelationship::HasMember));
   870     QVERIFY(supportedRelationships.contains(QContactRelationship::HasMember));
       
   871     */
   847 }
   872 }
   848 
   873 
   849 void TestSymbianEngine::batchRelationships()
   874 void TestSymbianEngine::batchRelationships()
   850 {
   875 {
   851     // More relationships logic is tested somewhere else.
   876     // More relationships logic is tested somewhere else.
   852     // We do simple tests here
   877     // We do simple tests here
   853     QContactManager::Error error;
   878     QContactManager::Error error;
   854 
   879 
   855     QContact a;
   880     QContact a;
   856     QVERIFY(m_engine->saveContact(&a, error));
   881     QVERIFY(m_engine->saveContact(&a, &error));
   857     QContact b;
   882     QContact b;
   858     QVERIFY(m_engine->saveContact(&b, error));
   883     QVERIFY(m_engine->saveContact(&b, &error));
   859 
   884 
   860     QContactRelationship rel;
   885     QContactRelationship rel;
   861     rel.setFirst(a.id());
   886     rel.setFirst(a.id());
   862     rel.setSecond(b.id());
   887     rel.setSecond(b.id());
   863     rel.setRelationshipType(QContactRelationship::HasSpouse);
   888     rel.setRelationshipType(QContactRelationship::HasSpouse);
   865     QList<QContactRelationship> list;
   890     QList<QContactRelationship> list;
   866     list.append(rel);
   891     list.append(rel);
   867     bool isValid(false);
   892     bool isValid(false);
   868 
   893 
   869     // Add relationships
   894     // Add relationships
   870     QList<QContactManager::Error> errors = m_engine->saveRelationships(&list, error);
   895     QMap<int, QContactManager::Error> errorMap;
   871     QVERIFY(&errors != NULL);
   896     QVERIFY(m_engine->saveRelationships(&list, &errorMap, &error));
   872     foreach(QContactManager::Error err, errors) {
   897     foreach(QContactManager::Error err, errorMap) {
   873         if (err == QContactManager::NoError ||
   898         if (err == QContactManager::NoError ||
   874                 err == QContactManager::NotSupportedError)
   899                 err == QContactManager::NotSupportedError)
   875             isValid = true;
   900             isValid = true;
   876         else
   901         else
   877             isValid = false;
   902             isValid = false;
   878         QVERIFY(isValid);
   903         QVERIFY(isValid);
   879     }
   904     }
   880 
   905 
   881     // fetch relationships
   906     // fetch relationships
   882     QContactRelationshipFilter::Role role;
   907     QContactRelationship::Role role;
   883     role = QContactRelationshipFilter::First;
   908     role = QContactRelationship::First;
   884     list.clear();
   909     list.clear();
   885     list = m_engine->relationships(QContactRelationship::HasSpouse, a.id(), role, error);
   910     list = m_engine->relationships(QContactRelationship::HasSpouse, a.id(), role, &error);
   886     QVERIFY(&list != NULL);
   911     QVERIFY(&list != NULL);
   887     if (error == QContactManager::NoError ||
   912     if (error == QContactManager::NoError ||
   888         error == QContactManager::NotSupportedError)
   913         error == QContactManager::NotSupportedError)
   889         isValid = true;
   914         isValid = true;
   890     else
   915     else
   891         isValid = false;
   916         isValid = false;
   892     QVERIFY(isValid);
   917     QVERIFY(isValid);
   893 
   918 
   894     // Remove relationships
   919     // Remove relationships
   895     errors = m_engine->removeRelationships(list, error);
   920     QVERIFY(m_engine->removeRelationships(list, &errorMap, &error));
   896     QVERIFY(&errors != NULL);
   921     foreach(QContactManager::Error err, errorMap) {
   897     foreach(QContactManager::Error err, errors) {
       
   898         if (err == QContactManager::NoError ||
   922         if (err == QContactManager::NoError ||
   899                 err == QContactManager::NotSupportedError)
   923                 err == QContactManager::NotSupportedError)
   900             isValid = true;
   924             isValid = true;
   901         else
   925         else
   902             isValid = false;
   926             isValid = false;
   913 void TestSymbianEngine::synthesizeDisplaylable()
   937 void TestSymbianEngine::synthesizeDisplaylable()
   914 {
   938 {
   915     QContactManager::Error err = QContactManager::NoError;
   939     QContactManager::Error err = QContactManager::NoError;
   916 
   940 
   917     QContact empty;
   941     QContact empty;
   918     QString label = m_engine->synthesizedDisplayLabel(empty, err);
   942     QString label = m_engine->synthesizedDisplayLabel(empty, &err);
   919     QVERIFY(err == QContactManager::NoError);
   943     QVERIFY(err == QContactManager::NoError);
   920     QVERIFY(label == QString("Unnamed"));
   944     QVERIFY(label == QString("Unnamed"));
   921 
   945 
   922     QContact first;
   946     QContact first;
   923     QContactName fn;
   947     QContactName fn;
   924     fn.setFirstName("Alice");
   948     fn.setFirstName("Alice");
   925     first.saveDetail(&fn);
   949     first.saveDetail(&fn);
   926     label = m_engine->synthesizedDisplayLabel(first, err);
   950     label = m_engine->synthesizedDisplayLabel(first, &err);
   927     QVERIFY(err == QContactManager::NoError);
   951     QVERIFY(err == QContactManager::NoError);
   928     QVERIFY(label == QString("Alice"));
   952     QVERIFY(label == QString("Alice"));
   929 
   953 
   930     QContact last;
   954     QContact last;
   931     QContactName ln;
   955     QContactName ln;
   932     ln.setLastName("Jones");
   956     ln.setLastName("Jones");
   933     last.saveDetail(&ln);
   957     last.saveDetail(&ln);
   934     label = m_engine->synthesizedDisplayLabel(last, err);
   958     label = m_engine->synthesizedDisplayLabel(last, &err);
   935     QVERIFY(err == QContactManager::NoError);
   959     QVERIFY(err == QContactManager::NoError);
   936     QVERIFY(label == QString("Jones"));
   960     QVERIFY(label == QString("Jones"));
   937 
   961 
   938     QContact orgContact;
   962     QContact orgContact;
   939     QContactOrganization org;
   963     QContactOrganization org;
   940     org.setName("Nokia");
   964     org.setName("Nokia");
   941     org.setDepartment(QStringList("Services"));
   965     org.setDepartment(QStringList("Services"));
   942     org.setTitle("Assistant Manager");
   966     org.setTitle("Assistant Manager");
   943     org.setLocation("Nokia Cyber Park");
   967     org.setLocation("Nokia Cyber Park");
   944     orgContact.saveDetail(&org);
   968     orgContact.saveDetail(&org);
   945     label = m_engine->synthesizedDisplayLabel(orgContact, err);
   969     label = m_engine->synthesizedDisplayLabel(orgContact, &err);
   946     QVERIFY(err == QContactManager::NoError);
   970     QVERIFY(err == QContactManager::NoError);
   947     QVERIFY(label == QString("Nokia"));
   971     QVERIFY(label == QString("Nokia"));
   948 
   972 
   949     QContact jargon;
   973     QContact jargon;
   950     jargon.setType("jargon");
   974     jargon.setType("jargon");
   951     label = m_engine->synthesizedDisplayLabel(jargon, err);
   975     label = m_engine->synthesizedDisplayLabel(jargon, &err);
   952     QVERIFY(err == QContactManager::InvalidContactTypeError);
   976     QVERIFY(err == QContactManager::InvalidContactTypeError);
   953     QVERIFY(label.isEmpty());
   977     QVERIFY(label.isEmpty());
   954 
   978 
   955     QContact group;
   979     QContact group;
   956     group.setType(QContactType::TypeGroup);
   980     group.setType(QContactType::TypeGroup);
   957     QContactName gn;
   981     QContactName gn;
   958     gn.setCustomLabel("grouplable");
   982     gn.setCustomLabel("grouplable");
   959     group.saveDetail(&gn);
   983     group.saveDetail(&gn);
   960     label = m_engine->synthesizedDisplayLabel(group, err);
   984     label = m_engine->synthesizedDisplayLabel(group, &err);
   961     QVERIFY(err == QContactManager::NoError);
   985     QVERIFY(err == QContactManager::NoError);
   962     QVERIFY(label == QString("grouplable"));
   986     QVERIFY(label == QString("grouplable"));
   963 }
   987 }
   964 
   988 
   965 void TestSymbianEngine::definitionDetails()
   989 void TestSymbianEngine::definitionDetails()
   966 {
   990 {
   967     QMap<QString, QContactDetailDefinition> defs;
   991     QMap<QString, QContactDetailDefinition> defs;
   968     QContactManager::Error err;
   992     QContactManager::Error err;
   969 
   993 
   970     // Wrong contact type
   994     // Wrong contact type
   971     defs = m_engine->detailDefinitions("aerafa", err);
   995     defs = m_engine->detailDefinitions("aerafa", &err);
   972     QVERIFY(err = QContactManager::InvalidContactTypeError);
   996     QVERIFY(err = QContactManager::InvalidContactTypeError);
   973     QVERIFY(defs.count() == 0);
   997     QVERIFY(defs.count() == 0);
   974 
   998 
   975     // Valid defs
   999     // Valid defs
   976     defs = m_engine->detailDefinitions(QContactType::TypeContact, err);
  1000     defs = m_engine->detailDefinitions(QContactType::TypeContact, &err);
   977     QVERIFY(err == QContactManager::NoError);
  1001     QVERIFY(err == QContactManager::NoError);
   978     defs = m_engine->detailDefinitions(QContactType::TypeGroup, err);
  1002     defs = m_engine->detailDefinitions(QContactType::TypeGroup, &err);
   979     QVERIFY(err == QContactManager::NoError);
  1003     QVERIFY(err == QContactManager::NoError);
   980 }
  1004 }
       
  1005 
       
  1006 void TestSymbianEngine::asyncRequests()
       
  1007 {
       
  1008     //create a contact
       
  1009     QContactManager::Error err;
       
  1010     QContact dummy;
       
  1011     dummy.setType(QContactType::TypeContact);
       
  1012     QContactName name;
       
  1013     name.setFirstName("dummy");
       
  1014     dummy.saveDetail(&name);
       
  1015     QVERIFY(m_engine->saveContact(&dummy, &err));
       
  1016     QVERIFY(err == QContactManager::NoError);
       
  1017     
       
  1018     //create a group with members 
       
  1019     QContact groupContact;
       
  1020     groupContact.setType(QContactType::TypeGroup);
       
  1021     m_engine->saveContact(&groupContact, &err);
       
  1022     QVERIFY(err == QContactManager::NoError);
       
  1023     QContactRelationship relationship;
       
  1024     relationship.setRelationshipType(QContactRelationship::HasMember);
       
  1025     relationship.setFirst(groupContact.id());
       
  1026     relationship.setSecond(dummy.id());
       
  1027     bool returnValue(false);
       
  1028     returnValue = m_engine->saveRelationship(&relationship, &err);
       
  1029     QVERIFY(returnValue == true);
       
  1030     QVERIFY(err == QContactManager::NoError);
       
  1031     
       
  1032     //fetch request
       
  1033     QContactFetchRequest fetch;
       
  1034     QVERIFY(m_engine->startRequest(&fetch));
       
  1035     QTest::qWait(1000); //1sec
       
  1036     QVERIFY(fetch.error() == QContactManager::NoError);
       
  1037     QVERIFY(fetch.state() == QContactFetchRequest::FinishedState);
       
  1038     QVERIFY(fetch.contacts().count() > 0);
       
  1039     
       
  1040     //fetch ids request
       
  1041     QContactLocalIdFetchRequest fetchIds;
       
  1042     QVERIFY(m_engine->startRequest(&fetchIds));
       
  1043     QTest::qWait(1000); //1sec
       
  1044     QVERIFY(fetchIds.error() == QContactManager::NoError);
       
  1045     QVERIFY(fetchIds.state() == QContactFetchRequest::FinishedState);
       
  1046     QVERIFY(fetchIds.ids().count() > 0);
       
  1047     
       
  1048     //save request
       
  1049     QContactSaveRequest saveReq;
       
  1050     QContact c;
       
  1051     c.setType(QContactType::TypeContact);
       
  1052     QList<QContact> contactList;
       
  1053     contactList += c;
       
  1054     saveReq.setContacts(contactList);
       
  1055     QVERIFY(m_engine->startRequest(&saveReq));
       
  1056     QTest::qWait(1000); //1sec
       
  1057     QVERIFY(saveReq.error() == QContactManager::NoError);
       
  1058     QVERIFY(saveReq.state() == QContactFetchRequest::FinishedState);
       
  1059     QVERIFY(saveReq.contacts().count() > 0);
       
  1060     
       
  1061     //remove request
       
  1062     QContactRemoveRequest removeReq;
       
  1063     QList<QContactLocalId> idList;
       
  1064     idList += saveReq.contacts().at(0).localId();
       
  1065     removeReq.setContactIds(idList);
       
  1066     QVERIFY(m_engine->startRequest(&removeReq));
       
  1067     QTest::qWait(1000); //1sec
       
  1068     int err_temp = removeReq.error();
       
  1069     QVERIFY(removeReq.error() == QContactManager::NoError);
       
  1070     QVERIFY(removeReq.state() == QContactFetchRequest::FinishedState);
       
  1071     
       
  1072     //detail definition request
       
  1073     QContactDetailDefinitionFetchRequest detDefReq;
       
  1074     detDefReq.setContactType(QContactType::TypeContact);
       
  1075     QStringList defList;
       
  1076     defList += QContactName::DefinitionName;
       
  1077     detDefReq.setDefinitionNames(defList);
       
  1078     QVERIFY(m_engine->startRequest(&detDefReq));
       
  1079     QTest::qWait(1000); //1sec
       
  1080     QVERIFY(detDefReq.error() == QContactManager::NoError);
       
  1081     QVERIFY(detDefReq.state() == QContactFetchRequest::FinishedState);
       
  1082     
       
  1083     //relationship fetch request
       
  1084     QContactRelationshipFetchRequest relFetchReq;
       
  1085     relFetchReq.setFirst(groupContact.id());
       
  1086     relFetchReq.setSecond(dummy.id());
       
  1087     relFetchReq.setRelationshipType(QContactRelationship::HasMember);
       
  1088     QVERIFY(m_engine->startRequest(&relFetchReq));
       
  1089     QTest::qWait(1000); //1sec
       
  1090     QVERIFY(relFetchReq.error() == QContactManager::NoError);
       
  1091     QVERIFY(relFetchReq.state() == QContactFetchRequest::FinishedState);
       
  1092     QVERIFY(relFetchReq.relationships().count() > 0);
       
  1093     
       
  1094     //relationship remove request
       
  1095     QContactRelationshipRemoveRequest relRemoveReq;
       
  1096     QList<QContactRelationship> relList;
       
  1097     relList += relationship;
       
  1098     relRemoveReq.setRelationships(relList);
       
  1099     QVERIFY(m_engine->startRequest(&relRemoveReq));
       
  1100     QTest::qWait(1000); //1sec
       
  1101     QVERIFY(relRemoveReq.error() == QContactManager::NoError);
       
  1102     QVERIFY(relRemoveReq.state() == QContactFetchRequest::FinishedState);
       
  1103 
       
  1104     //relationship save request
       
  1105     QContactRelationshipSaveRequest relSaveReq;
       
  1106     relSaveReq.setRelationships(relList);
       
  1107     QVERIFY(m_engine->startRequest(&relSaveReq));
       
  1108     QTest::qWait(1000); //1sec
       
  1109     QVERIFY(relSaveReq.error() == QContactManager::NoError);
       
  1110     QVERIFY(relSaveReq.state() == QContactFetchRequest::FinishedState);
       
  1111     
       
  1112     //cancel request
       
  1113     QVERIFY(m_engine->startRequest(&relRemoveReq));
       
  1114     m_engine->cancelRequest(&relRemoveReq);
       
  1115     QTest::qWait(1000); //1sec
       
  1116     QVERIFY(relRemoveReq.error() == QContactManager::NoError);
       
  1117     QVERIFY(relRemoveReq.state() == QContactFetchRequest::CanceledState);
       
  1118     
       
  1119     //wait for a request finish
       
  1120     QVERIFY(!m_engine->waitForRequestFinished(&relSaveReq, 1000));
       
  1121     QVERIFY(m_engine->startRequest(&relRemoveReq));
       
  1122     QVERIFY(m_engine->waitForRequestFinished(&relRemoveReq, 1000));
       
  1123     QTest::qWait(1000); //1sec
       
  1124     QVERIFY(relRemoveReq.error() == QContactManager::NoError);
       
  1125     QVERIFY(relRemoveReq.state() == QContactFetchRequest::FinishedState);
       
  1126     
       
  1127     //destroy request
       
  1128     QVERIFY(m_engine->startRequest(&relRemoveReq));
       
  1129     m_engine->requestDestroyed(&relRemoveReq);
       
  1130     QVERIFY(!m_engine->m_asynchronousOperations.contains(&relRemoveReq));
       
  1131 }