LOCAL_D void TestFirstL(RTest& aTest) { aTest.Next(_L("@SYMTestCaseID:PIM-T-OWNCARDDELETE-0001 -- First Owncard Test --")); aTest.Printf(_L("Replacing database \n")); CContactDatabase* db = CContactDatabase::ReplaceL(KDatabaseFileName); CleanupStack::PushL(db); CContactDatabase* dbAnother = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(dbAnother); PopulateDatabaseL(db, KTotalContacts); WaitForNotificationsL(db); TestSetOwnCardL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking the count value \n")); TInt count = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == KTotalContacts, __LINE__); aTest.Printf(_L("Checking the id \n")); TContactItemId id = dbAnother->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id != KNullContactId, __LINE__); TContactIter iter(*db); //Test that the iterator is updated TContactItemId firstContactId; firstContactId = iter.FirstL(); //should be own contactId DeleteOwnContactL(dbAnother); WaitForNotificationsL(dbAnother); TContactItemId secondContactId; TRAPD (err, secondContactId = iter.FirstL()); aTest(err == KErrNone && firstContactId != secondContactId, __LINE__); DeleteMultipleContactsL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking the deleted count value \n")); count = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == 0, __LINE__); aTest.Printf(_L("Checking the deleted id \n")); id = dbAnother->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id == KNullContactId, __LINE__); aTest(gEventCounter == KMaxNumOfEvents, __LINE__); aTest(gUnknownEventCounter == KMaxUnknownEvents, __LINE__); CleanupStack::PopAndDestroy(2,db); }
LOCAL_D void TestSecondL(RTest& aTest) { aTest.Next(_L("-- Second Owncard Test --")); RMutex mtx; TInt errMutex = mtx.CreateGlobal(KOwnCardMutex); User::LeaveIfError(errMutex); CleanupClosePushL(mtx); RThread thd; aTest.Printf(_L("Creating worker thread \n")); TInt errThread = thd.Create(KThreadFunc, ThreadFunction, KDefaultStackSize, KDefaultStackSize*20, KDefaultStackSize*40, NULL); User::LeaveIfError(errThread); CleanupClosePushL(thd); thd.Resume(); SwitchToWorkerThread(mtx, thd, EFalse, ETrue); // a) Run: WT-start to WT-1 /////////////////////////////////////////////// // Worker thread has now replaced the database /////////////////////////////////////////////// aTest.Printf(_L("Open existing database \n")); CContactDatabase* db = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(db); SwitchToWorkerThread(mtx, thd, ETrue, ETrue); // b) Run: WT-1 to WT-2 /////////////////////////////////////////////// // Worker thread has now added the contacts /////////////////////////////////////////////// WaitForNotificationsL(db); aTest.Printf(_L("Checking db count \n")); TInt count = db->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == KTotalContacts, __LINE__); aTest.Printf(_L("Checking owncard id \n")); TContactItemId id = db->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id != KNullContactId, __LINE__); SwitchToWorkerThread(mtx, thd, ETrue, ETrue); // c) Run: WT-2 to WT-3 /////////////////////////////////////////////// // Worker thread has now deleted the contacts /////////////////////////////////////////////// aTest.Printf(_L("Checking deleted db count \n")); WaitForNotificationsL(db); count = db->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == 0, __LINE__); aTest.Printf(_L("Checking deleted owncard id \n")); id = db->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id == KNullContactId, __LINE__); CleanupStack::PopAndDestroy(db); SwitchToWorkerThread(mtx, thd, ETrue, EFalse); // d) Run: WT-3 to end CleanupStack::PopAndDestroy(); // close thd handle CleanupStack::PopAndDestroy(); // close mtx handle }
LOCAL_D void ThreadFirstTestL(RTest& aTest) { aTest.Next(_L("-- Running worker thread --")); RMutex mutex; TInt errMutex = mutex.OpenGlobal(KOwnCardMutex); User::LeaveIfError(errMutex); CleanupClosePushL(mutex); aTest.Printf(_L("Replacing the database \n")); CContactDatabase* db = CContactDatabase::ReplaceL(KDatabaseFileName); CleanupStack::PushL(db); // get a second database object CContactDatabase* dbAnother = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(dbAnother); SwitchToMainThread(mutex); // 1) Back to MT-a /////////////////////////////////////////////// // Main thread has now opened the database /////////////////////////////////////////////// aTest.Printf(_L("Populating the database \n")); PopulateDatabaseL(db, KTotalContacts); WaitForNotificationsL(db); aTest.Printf(_L("Set the Own card id \n")); TestSetOwnCardL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking count value \n")); TInt count = db->CountL(); TInt countAnother = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count ); aTest(count == KTotalContacts && countAnother == KTotalContacts, __LINE__); aTest.Printf(_L("Checking the id \n")); TContactItemId id = db->OwnCardId(); TContactItemId idCopy = dbAnother->OwnCardId(); aTest.Printf(_L("Id: %d \n"), id); aTest(id != KNullContactId && idCopy != KNullContactId, __LINE__); SwitchToMainThread(mutex); // 2) Back to MT-b /////////////////////////////////////////////// // Main thread has now checked the added values /////////////////////////////////////////////// DeleteMultipleContactsL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking deleted count value \n")); count = db->CountL(); countAnother = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count ); aTest(count == 0 && countAnother == 0, __LINE__); aTest.Printf(_L("Checking the deleted id \n")); id = db->OwnCardId(); idCopy = dbAnother->OwnCardId(); aTest.Printf(_L("Id: %d \n"), id); aTest(id == KNullContactId && idCopy == KNullContactId, __LINE__); SwitchToMainThread(mutex); // 3) Back to MT-c /////////////////////////////////////////////// // Main thread has now checked the deleted values /////////////////////////////////////////////// CleanupStack::PopAndDestroy(dbAnother); CleanupStack::PopAndDestroy(db); CleanupStack::PopAndDestroy(); // close mutex handle RThread::Rendezvous(KErrNone); // Finish) back to MT-d }