/** * Create an entry based on the template for this specific phonebook, and add * the entry to the contact database * @param aDb Contact database * @param aPhonebookUid The phonebook uid * @return TContactItemId Id of the newly created icc entry */ TContactItemId doAddIccEntryL(CContactDatabase& aDb,TUid aPhonebookUid) { syncChecker->ResetMethodCallCountsL(); TContactItemId templateId = aDb.ICCTemplateIdL(aPhonebookUid); test(syncChecker->ValidateMethodCallCountL() == 1); CContactItem* iccTemplate = aDb.ReadContactLC(templateId); CContactICCEntry* entry = CContactICCEntry::NewL(*iccTemplate); CleanupStack::PopAndDestroy(iccTemplate); CleanupStack::PushL(entry); // Add to the database CheckPhonebookField(*entry,aPhonebookUid, EFalse); syncChecker->ResetMethodCallCountsL(); TContactItemId id = aDb.AddNewContactL(*entry); test(syncChecker->ValidateMethodCallCountL() == 3); CleanupStack::PopAndDestroy(entry); test(id!=KNullContactId); // Check group membership syncChecker->ResetMethodCallCountsL(); CContactICCEntry* fetchedItem = static_cast<CContactICCEntry*>(aDb.ReadContactL(id)); test(syncChecker->ValidateMethodCallCountL() == 1); CleanupStack::PushL(fetchedItem); const CContactIdArray* owned = fetchedItem->GroupsJoined(); test(owned!=NULL && owned->Count() == 1); test((*owned)[0]==syncChecker->GroupIdL(aPhonebookUid)); test(fetchedItem->Type() == KUidContactICCEntry); // Verify that the phonebook field has been set CheckPhonebookField(*fetchedItem,aPhonebookUid, ETrue); CleanupStack::PopAndDestroy(fetchedItem); return id; }
/** * Test addition to database without adding to a group * @param aDb Contact database */ void TestAddingWithoutGroupL(CContactDatabase& aDb) { TContactItemId templateId = aDb.ICCTemplateIdL(KUidIccGlobalAdnPhonebook); CContactItem* iccTemplate = aDb.ReadContactLC(templateId); CContactICCEntry* entry = CContactICCEntry::NewL(*iccTemplate); CleanupStack::PopAndDestroy(iccTemplate); CleanupStack::PushL(entry); SetNameL(*entry,KUidContactFieldFamilyName,KUidContactFieldVCardMapUnusedN,KGivenName,EFalse); SetNameL(*entry,KUidContactFieldPhoneNumber,KUidContactFieldVCardMapTEL,KTelephoneNum,EFalse); syncChecker->ResetMethodCallCountsL(); syncChecker->SetValidateWriteResponseL(KErrNone); TInt oldGroupId = syncChecker->GroupIdL(KUidIccGlobalAdnPhonebook); test(KErrNone == syncChecker->UpdatePhonebookGroupIdL(KUidIccGlobalAdnPhonebook, KNullContactId)); TContactItemId id = aDb.AddNewContactL(*entry); test(syncChecker->ValidateMethodCallCountL() == 3); CleanupStack::PopAndDestroy(entry); CContactICCEntry* fetchedItem = static_cast<CContactICCEntry*>(aDb.ReadContactL(id)); CleanupStack::PushL(fetchedItem); //Check group membership const CContactIdArray* owned = fetchedItem->GroupsJoined(); test(owned==NULL || owned->Count() == 0); CleanupStack::PopAndDestroy(fetchedItem); test(KErrNone == syncChecker->UpdatePhonebookGroupIdL(KUidIccGlobalAdnPhonebook, oldGroupId)); }
/** * Test successful addition to database. * @param aDb Contact database */ void TestSuccessfulAddL(CContactDatabase& aDb) { //Create group TContactItemId groupId = CreatePhonebookGroupL(aDb); test(KErrNone == syncChecker->UpdatePhonebookGroupIdL(KUidIccGlobalAdnPhonebook, groupId)); //Create item and add fields TContactItemId templateId = aDb.ICCTemplateIdL(KUidIccGlobalAdnPhonebook); CContactItem* iccTemplate = aDb.ReadContactLC(templateId); CContactICCEntry* entry = CContactICCEntry::NewL(*iccTemplate); CleanupStack::PopAndDestroy(iccTemplate); CleanupStack::PushL(entry); SetNameL(*entry,KUidContactFieldFamilyName,KUidContactFieldVCardMapUnusedN,KGivenName,EFalse); SetNameL(*entry,KUidContactFieldPhoneNumber,KUidContactFieldVCardMapTEL,KTelephoneNum,EFalse); //Add to database syncChecker->ResetMethodCallCountsL(); syncChecker->SetValidateWriteResponseL(KErrNone); syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); test(syncChecker->ValidateMethodCallCountL() == 0); TContactItemId id = aDb.AddNewContactL(*entry); CleanupStack::PopAndDestroy(entry); test(syncChecker->ValidateMethodCallCountL() == 3); test(id!=KNullContactId); CContactICCEntry* fetchedItem = static_cast<CContactICCEntry*>(aDb.ReadContactL(id)); CleanupStack::PushL(fetchedItem); //Check group membership const CContactIdArray* owned = fetchedItem->GroupsJoined(); test(owned!=NULL && owned->Count() == 1); test((*owned)[0]==groupId); //Check number of fields and content CContactItemFieldSet& fieldset = fetchedItem->CardFields(); TInt pos = fieldset.Find(KUidContactFieldTemplateLabel); test(pos==KErrNotFound); // test(fieldset.Count() == 3); /* for (TInt i=0; i<fieldset.Count(); i++) { CContactItemField& field = fieldset[i]; TInt count = field.ContentType().FieldTypeCount(); for (TInt j=0; j<count; j++) { TFieldType ft= field.ContentType().FieldType(j); } TUid mapping = field.ContentType().Mapping(); } */ CheckFieldContentL(fieldset,KUidContactFieldFamilyName,KGivenName); // CheckFieldContentL(fieldset,KUidContactFieldPhoneNumber,KTelephoneNum); CleanupStack::PopAndDestroy(fetchedItem); }
TInt CContactTestSynchroniser::ValidateWriteContact(CContactICCEntry& aContactItem) { TRAPD(err, iContactSyncChecker->ValidateMethodCalledL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); TBool verboseLoggingEnabled(EFalse); TRAP(err, verboseLoggingEnabled = iContactSyncChecker->VerboseLoggingEnabledL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); if (verboseLoggingEnabled) { User::InfoPrint(_L("ValidateWriteContact")); } // Set the phonebook field, if the field doesn't exist, it should be added CContactItemFieldSet& fieldset = aContactItem.CardFields(); TInt n = fieldset.Find(KUidContactFieldICCPhonebook); if(n == KErrNotFound) { CContactItemField* field(NULL); TRAP_IGNORE(field = CContactItemField::NewL(KStorageTypeText, KUidContactFieldICCPhonebook) ); TRAP(err, aContactItem.AddFieldL(*field) ); CContactItemFieldSet& fieldset = aContactItem.CardFields(); n = fieldset.Find(KUidContactFieldICCPhonebook); __ASSERT_ALWAYS(err == KErrNone && n != KErrNotFound, User::Invariant() ); } CContactItemField& field = fieldset[n]; CContactTextField* textField = field.TextStorage(); TUid phonebookUid(TUid::Null() ); TRAP(err, phonebookUid = iContactSyncChecker->PhonebookUidL(aContactItem.TemplateRefId() ) ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); TBuf<128> buf; if(phonebookUid != KUidIccPhonebookNotFound) { TInt phonebookUidNum = phonebookUid.iUid; buf.AppendNum(phonebookUidNum); TRAP(err, textField->SetTextL(buf)); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); } TBool validateWriteResponse(EFalse); TRAP(err, validateWriteResponse = iContactSyncChecker->ValidateWriteResponseL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); return validateWriteResponse; }
/** * Test SetDbViewContactType can be used for KUidContactICCEntry items. * @param aDb Contact database */ void TestDatabaseViewL(CContactDatabase& /*aDb*/) { syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); syncChecker->SetValidateWriteResponseL(KErrNone); CntTest->CloseDatabase(); CntTest->DeleteDatabaseL(); // re-initialise the TLS syncChecker->EnableVerboseLoggingL(); CntTest->CreateDatabaseL(); CntTest->OpenDatabaseL(); CContactDatabase& db= *CntTest->Db(); delete synchroniser; synchroniser = CContactTestSynchroniser::NewL(); // test with GSM ADN phonebook only //test(KErrNone == syncChecker->SetGsmPhonebook()); // Start from clean CContactItem* card = CContactCard::NewLC(); db.AddNewContactL(*card); db.CreateContactGroupLC(); db.CreateOwnCardLC(); TContactItemId id=CreateICCTemplateL(db); test(KErrNone == syncChecker->UpdatePhonebookEntryL(KUidIccGlobalAdnPhonebook, id, KNullContactId)); TContactItemId templateId = db.ICCTemplateIdL(KUidIccGlobalAdnPhonebook); CContactItem* iccTemplate = db.ReadContactLC(templateId); CContactICCEntry* iccentry = CContactICCEntry::NewL(*iccTemplate); CleanupStack::PopAndDestroy(iccTemplate); CleanupStack::PushL(iccentry); db.AddNewContactL(*iccentry); TContactItemId iccId = iccentry->Id(); CleanupStack::PopAndDestroy(4); //card,group,owncard,iccentry test(db.SortedItemsL()->Count() == 5); //default view includes ALL contact types CntTest->CloseDatabase(); delete synchroniser; synchroniser = NULL; CntTest->OpenDatabaseL(); CContactDatabase& db1= *CntTest->Db(); db1.SetDbViewContactType(KUidContactICCEntry); TInt some = db1.SortedItemsL()->Count(); test(db1.SortedItemsL()->Count() == 1); test((*db1.SortedItemsL())[0]==iccId); }
void TestCreationL(CContactDatabase& aDb) { _LIT(KTestCreation,"Create CContactICCEntry item"); test.Start(_L("@SYMTESTCaseID:PIM-T-ICCENTRY-0001 Create CContactICCEntry item")); //System Template TContactItemId systemTemplateId = aDb.TemplateId(); CContactItem* systemTemplate = aDb.ReadContactLC(systemTemplateId); CContactICCEntry* entry = CContactICCEntry::NewL(*systemTemplate); CleanupStack::PopAndDestroy(systemTemplate); CleanupStack::PushL(entry); //Test CContactICCEntry items can be identified from normal contact cards test(entry->Type() == KUidContactICCEntry); test(entry->TemplateRefId() == systemTemplateId); CleanupStack::PopAndDestroy(entry); //Create user defined template for ICC contacts test.Next(_L("CContactDatabase::ICCTemplateL()")); TContactItemId templateId = CreateICCTemplateL(aDb); test(KErrNone == syncChecker->UpdatePhonebookEntryL(KUidIccGlobalAdnPhonebook, templateId, KNullContactId)); //Check that contacts model calls the plug-in when asked for the //template ID. TInt callCount = syncChecker->ValidateMethodCallCountL(); test(callCount==0); TContactItemId templateIdFromCntmodel; templateIdFromCntmodel = aDb.ICCTemplateIdL(KUidIccGlobalAdnPhonebook); test(syncChecker->ValidateMethodCallCountL() == 1); test(templateId == templateIdFromCntmodel); CContactItem* iccTemplate = aDb.ReadContactLC(templateId); CheckTemplateL(*iccTemplate); //create ICC contact CContactICCEntry* iccentry = CContactICCEntry::NewL(*iccTemplate); CleanupStack::PopAndDestroy(iccTemplate); CleanupStack::PushL(iccentry); test(iccentry->Type() == KUidContactICCEntry); test(iccentry->TemplateRefId() == templateId); CleanupStack::PopAndDestroy(iccentry); test.End(); }