void RemoveSpeedDialWhenOpenL(TInt aContact, TInt aSpeedDialID, CContactDatabase& aDatabase) { CContactItem* card1 = 0; TInt error = KErrNone; // First open the contact, which locks it: card1 = aDatabase.OpenContactL(aContact); CleanupStack::PushL(card1); // Now attempt to open the contact (must fail with in use): error = KErrNone; TRAP(error, aDatabase.OpenContactL(aContact)); g_test(error == KErrInUse); // Now remove the speed dial on that contact (must fail with in use): error = KErrNone; TRAP(error, aDatabase.RemoveSpeedDialFieldL(aContact, aSpeedDialID)); g_test(error == KErrInUse); // Now remove the speed dial on that contact again (must fail with in use): // Defect was application crash. error = KErrNone; TRAP(error, aDatabase.RemoveSpeedDialFieldL(aContact, aSpeedDialID)); g_test(error == KErrInUse); // Now attempt to open the contact (must fail with in use): // Defect was fails with wrong error/no error. error = KErrNone; TRAP(error, aDatabase.OpenContactL(aContact)); g_test(error == KErrInUse); // Cleanup and close: CleanupStack::PopAndDestroy(card1); TRAP(error, aDatabase.CloseContactL(aContact)); g_test(error == KErrNone); }
void AssignSpeedDialL( TInt aContact, TInt aSpeedDialID, CContactDatabase& database ) { CContactItem* item = NULL; item = database.OpenContactL( aContact ); CleanupStack::PushL( item ); if ( ContactIsASpeedDial( *item ) ) { g_test.Printf( _L("Contact is a speed dial !!! \n") ); } else { g_test.Printf( _L("Contact is NOT A SPEED DIAL \n") ); } CContactItemFieldSet &fieldSet = item->CardFields(); for(TInt index = fieldSet.Count() - 1; index > 0; --index) { if(fieldSet[index].StorageType() == KStorageTypeText) { //set the last text field from the fieldset as speeddial field. database.SetFieldAsSpeedDialL(*item, index, aSpeedDialID ); break; } } g_test.Next( _L("Contact changed to speed dial") ); g_test(ContactIsASpeedDial( *item )); CleanupStack::PopAndDestroy( item ); }
/** * Unsuccessful edit. Fail the edit validation request * @param aDb Contact database * @param aId Item Id to edit */ void FailEditValidationL(CContactDatabase& aDb, TContactItemId aId) { syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); syncChecker->SetValidateResponseL(MContactSynchroniser::EEdit, KErrAccessDenied); syncChecker->ResetMethodCallCountsL(); test(syncChecker->ValidateMethodCallCountL() == 0); TRAPD(err, aDb.OpenContactL(aId)); test(syncChecker->ValidateMethodCallCountL() == 2); test(err==KErrAccessDenied); }
/** Delete the surname field of the contact indicated by the index. Will Leave if the contact has no surname @leave KErrNotFound contact has no surname @param aDb The contact database @param aIndex The index of the contact whose surname will be removed */ LOCAL_C void TestDeleteNameL(CContactDatabase& aDb, TInt aIndex) { CContactItem* item=aDb.OpenContactL(aIndex); CleanupStack::PushL(item); CContactItemFieldSet& fields=item->CardFields(); TInt i = fields.Find(KUidContactFieldFamilyName); User::LeaveIfError(i); fields[i].TextStorage()->SetTextL(KNullDesC); aDb.CommitContactL(*item); CleanupStack::PopAndDestroy(item); }
LOCAL_C void LongNumSpeedDialTestsL() { _LIT(KLongNumSpeedDialTest, "Long Phone Number Speed Dial Test"); g_test.Start(KLongNumSpeedDialTest); // create default, empty database CContactDatabase* db = CContactDatabase::ReplaceL(KLongNumSpeedDialDbName); CleanupStack::PushL(db); // create a contact and add it to the db CContactItem* contact = CContactCard::NewLC(); CContactItemField* fname = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName); _LIT(KFname, "James"); fname->TextStorage()->SetTextL(KFname() ); contact->AddFieldL(*fname); CleanupStack::Pop(fname); CContactItemField* phone = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPhoneNumber); _LIT(KPhoneNum, "01234567890123456789012345678901234567890123456789012345678901234567890123456789"); // 80 chars phone->TextStorage()->SetTextL(KPhoneNum() ); contact->AddFieldL(*phone); CleanupStack::Pop(phone); const TContactItemId KContactId = db->AddNewContactL(*contact); CleanupStack::PopAndDestroy(contact); contact = NULL; // retrieve contact and assign its number to speed dial #1 contact = db->OpenContactL(KContactId); CleanupStack::PushL(contact); const TInt KSpeedDial1(1); const TInt KPhoneNumIndex = contact->CardFields().Find(KUidContactFieldPhoneNumber); db->SetFieldAsSpeedDialL(*contact, KPhoneNumIndex, KSpeedDial1); TBuf<100> speedDialNumberText; TContactItemId speedDialId = db->GetSpeedDialFieldL(KSpeedDial1, speedDialNumberText); _LIT(KOutputFormat, "retrieved speed dial id: %d;\nretrieved speed dial phone number: ...\n%S\n"); g_test.Printf(KOutputFormat, speedDialId, &speedDialNumberText); db->CloseContactL(KContactId); // cleanup CleanupStack::PopAndDestroy(2, db); // and contact CContactDatabase::DeleteDatabaseL(KLongNumSpeedDialDbName); // Since PDEF121954, long phone numbers set as speed dial are truncated to // the length of KSpeedDialPhoneLength. So, we need to get the truncated // version of the phone number for comparison with the speed dial value. TPtrC phoneNum(KPhoneNum().Mid(0, KSpeedDialPhoneLength)); g_test(speedDialId == KContactId && speedDialNumberText.CompareC(phoneNum) == 0); g_test.End(); g_test.Close(); }
void CPbTester::EditEntryL(TContactItemId itemId) { _LIT(KEmailAddress,"*****@*****.**"); CContactItem *item = ipbDb->OpenContactL(itemId); CContactCard* card = NULL; CleanupStack::PushL(item); card = (CContactCard*)item; // Create the emailAddress field and add the data to it CContactItemField* emailAddr = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); emailAddr->SetMapping(KUidContactFieldVCardMapEMAILINTERNET); emailAddr ->TextStorage()->SetTextL(KEmailAddress); card->AddFieldL(*emailAddr); CleanupStack::Pop(emailAddr); ipbDb->CommitContactL(*item); CleanupStack::PopAndDestroy(item); }
void UpdateSpeedDialL(TInt aContact, TInt aSpeedDialID, CContactDatabase& database ) { CContactItem* item = NULL; item = database.OpenContactL( aContact ); CleanupStack::PushL( item ); if ( ContactIsASpeedDial( *item ) ) { g_test.Printf( _L("Contact is a speed dial !!! \n") ); database.SetFieldAsSpeedDialL(*item, item->Id(), aSpeedDialID ); } else { g_test.Printf( _L("Contact is NOT A SPEED DIAL \n") ); } CleanupStack::PopAndDestroy( item ); }
TBool ContactIsASpeedDialL(TInt aContactId, CContactDatabase& aDatabase) { CContactItem* item = NULL; TBool result = EFalse; item = aDatabase.OpenContactL(aContactId); CleanupStack::PushL(item); const CContactItemFieldSet& fields = item->CardFields(); const TInt count = fields.Count(); for (TInt index = 0; index < count; ++index) { if (fields[index].IsSpeedDial()) { result = ETrue; break; } } aDatabase.CloseContactL(aContactId); CleanupStack::PopAndDestroy(item); return result; }
void CRemoteViewTestResources::CreateTestGroupsL() { test.Next(_L("Test for creating a remote view and validating that queued events are received in the correct order.")); TContactViewEvent event; // Create A then "unnanmed", then rename "unnamed" to B test.Next(_L("Test for Create group A, then create group B")); CContactItem* group1 = iDb->CreateContactGroupLC(_L("A")); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 0, group1->Id()); CContactItem* group0 = iDb->CreateContactGroupLC(_L("")); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 1, group0->Id()); CContactItem *group00 = iDb->OpenContactL(group0->Id()); static_cast<CContactGroup*> (group00)->SetGroupLabelL(_L("B")); iDb->CommitContactL(*group00); // Received 3 events, grp changed, removed and added iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EGroupChanged, 0, group00->Id()); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemRemoved, 1, group00->Id()); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 1, group00->Id()); // Create D then "unnamed", then rename "unnamed" to C test.Next(_L("Test for Create group D, then create group C")); CContactItem* group2 = iDb->CreateContactGroupLC(_L("D")); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 2, group2->Id()); CContactItem* group3 = iDb->CreateContactGroupLC(_L("")); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 3, group3->Id()); CContactItem *group4 = iDb->OpenContactL(group3->Id()); static_cast<CContactGroup*> (group4)->SetGroupLabelL(_L("C")); iDb->CommitContactL(*group4); // Received 3 events, grp changed, removed and added iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EGroupChanged, 0, group4->Id()); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemRemoved, 3, group4->Id()); iViewEventQueue->ListenForEvent(2,event); CheckEvent(event, TContactViewEvent::EItemAdded, 2, group4->Id()); // More complex set of add and deletes. test.Next(_L("Test-Addgroup E, Addgroup F, Addgroup G , RemoveGroup G Addgroup H RenameGroup H as EA")); CContactItem* group5 = iDb->CreateContactGroupLC(_L("E")); CContactItem* group6 = iDb->CreateContactGroupLC(_L("F")); CContactItem* group7 = iDb->CreateContactGroupLC(_L("G")); iDb->DeleteContactL(group7->Id()); CContactItem* group8 = iDb->CreateContactGroupLC(_L("H")); CContactItem *group01 = iDb->OpenContactL(group8->Id()); static_cast<CContactGroup*> (group01)->SetGroupLabelL(_L("EA")); iDb->CommitContactL(*group01); // Should receive events for operations above, order is not important // Should receive events as add for E F EA(H) - In the order E EA(H) F // (none for G as add, then remove) iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EItemAdded, 4, group5->Id() ); iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EItemAdded, 5, group6->Id() ); iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EItemAdded, 6, group8->Id() ); iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EItemAdded, 7, group7->Id() ); iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EItemRemoved, 7, group7->Id() ); iViewEventQueue->ListenForEvent( 2, event ); CheckEvent( event, TContactViewEvent::EGroupChanged, 0, group8->Id() ); // Cleanup delete group01; delete group00; delete group4; CleanupStack::PopAndDestroy(group8); CleanupStack::PopAndDestroy(group7); CleanupStack::PopAndDestroy(group6); CleanupStack::PopAndDestroy(group5); CleanupStack::PopAndDestroy(group3); CleanupStack::PopAndDestroy(group2); CleanupStack::PopAndDestroy(group0); CleanupStack::PopAndDestroy(group1); }