void TestSymbianEngine::saveContactWithPreferredDetails() { QContactManager::Error err; //save a contact with preferred details QContact c; c.setType(QContactType::TypeContact); QContactPhoneNumber number1; number1.setNumber("123"); number1.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number1); c.setPreferredDetail("call", number1); QContactPhoneNumber number2; number2.setNumber("456"); number2.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number2); c.setPreferredDetail("videocall", number2); QContactPhoneNumber number3; number3.setNumber("789"); number3.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number3); c.setPreferredDetail("message", number3); QContactEmailAddress email; email.setEmailAddress("dummyemail"); c.saveDetail(&email); c.setPreferredDetail("email", email); QContactOnlineAccount onlineAccount; onlineAccount.setAccountUri("dummy"); onlineAccount.setSubTypes(QContactOnlineAccount::SubTypeImpp); c.saveDetail(&onlineAccount); c.setPreferredDetail("OnlineAccountActions", onlineAccount); QContactUrl url; url.setUrl("http://dummy"); c.saveDetail(&url); c.setPreferredDetail("url", url); QVERIFY(m_engine->saveContact(&c, &err)); QVERIFY(err == QContactManager::NoError); //fetch the saved contact and check preferred details QContactFetchHint hint = QContactFetchHint(); QContact fetched = m_engine->contact(c.localId(), hint, &err); QVERIFY(err == QContactManager::NoError); QContactDetail callDetail1 = fetched.preferredDetail("call"); QVERIFY(callDetail1.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber1 = static_cast<QContactPhoneNumber>(callDetail1); QVERIFY(fetchedNumber1.number() == "123"); QContactDetail callDetail2 = fetched.preferredDetail("videocall"); QVERIFY(callDetail2.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber2 = static_cast<QContactPhoneNumber>(callDetail2); QVERIFY(fetchedNumber2.number() == "456"); QContactDetail callDetail3 = fetched.preferredDetail("message"); QVERIFY(callDetail3.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber3 = static_cast<QContactPhoneNumber>(callDetail3); QVERIFY(fetchedNumber3.number() == "789"); QContactDetail emailDetail = fetched.preferredDetail("email"); QVERIFY(emailDetail.definitionName() == QContactEmailAddress::DefinitionName); QContactEmailAddress fetchedEmail = static_cast<QContactEmailAddress>(emailDetail); QVERIFY(fetchedEmail.emailAddress() == "dummyemail"); QContactDetail onlineAccountDetail = fetched.preferredDetail("OnlineAccountActions"); QVERIFY(onlineAccountDetail.definitionName() == QContactOnlineAccount::DefinitionName); QContactOnlineAccount fetchedOnlineAccount = static_cast<QContactOnlineAccount>(onlineAccountDetail); QVERIFY(fetchedOnlineAccount.accountUri() == "dummy"); QContactDetail urlDetail = fetched.preferredDetail("url"); QVERIFY(urlDetail.definitionName() == QContactUrl::DefinitionName); QContactUrl fetchedUrl = static_cast<QContactUrl>(urlDetail); QVERIFY(fetchedUrl.url() == "http://dummy"); //save a contact with one preferred details for several actions QContact c2; c2.setType(QContactType::TypeContact); c2.saveDetail(&number1); c2.setPreferredDetail("call", number1); c2.setPreferredDetail("videocall", number1); c2.setPreferredDetail("message", number1); QVERIFY(m_engine->saveContact(&c2, &err)); QVERIFY(err == QContactManager::NoError); //fetch the saved contact and check preferred details QContact fetched2 = m_engine->contact(c2.localId(), hint, &err); QVERIFY(err == QContactManager::NoError); QContactDetail callDetail4 = fetched2.preferredDetail("call"); QVERIFY(callDetail4.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber4 = static_cast<QContactPhoneNumber>(callDetail4); QVERIFY(fetchedNumber4.number() == "123"); QContactDetail callDetail5 = fetched2.preferredDetail("videocall"); QVERIFY(callDetail5.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber5 = static_cast<QContactPhoneNumber>(callDetail5); QVERIFY(fetchedNumber5.number() == "123"); QContactDetail callDetail6 = fetched2.preferredDetail("message"); QVERIFY(callDetail6.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber6 = static_cast<QContactPhoneNumber>(callDetail6); QVERIFY(fetchedNumber6.number() == "123"); }