diff -r 000000000000 -r 08ec8eefde2f loggingservices/eventlogger/test/src/t_logcntmatch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loggingservices/eventlogger/test/src/t_logcntmatch.cpp Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,383 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// The "contacts matching" part of the test will work only if r_log_contact_match_count +// resource value is not 0. See LogServ.rss file. +// +// + +#include +#include +#include +#include "TEST.H" + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//The test uses a test contact database (SQLite__Contacts.cdb), part of LogEng data files. +//The test contact database contains the follwing contacts: +//{1, KPhoneNumber, KGivenName, KFamilyName} +//{2, KNumber1, KFirstName1, KLastName1} +//{3, KNumber2, KFirstName2, KLastName2} +//{4, KNumber3, KFirstName3, KLastName3} +//{5, KNumber4, KFirstName4, KLastName4} +//{6, KNumber4, KFirstName5, KLastName5} +//{7, KTestNum, KFirstName6, KLastName6} + +//The records data +_LIT(KFirstName1, "Barney"); +_LIT(KFirstName2, "Elma"); +_LIT(KFirstName3, "Peter"); +_LIT(KLastName1, "Rubble"); +_LIT(KLastName2, "Fudd"); +_LIT(KLastName3, "Harper"); +_LIT(KNumber1, "447700900000"); +_LIT(KNumber2, "+441632960000"); +_LIT(KNumber3, "07700 900001"); +//_LIT(KFirstName4, "Abc"); +_LIT(KFirstName5, "Rtyu"); +_LIT(KFirstName6, "Zxcvb"); +//_LIT(KLastName4, "Lkjhgf"); +//_LIT(KLastName5, "Poiuytqwe"); +_LIT(KLastName6, "Mnbvcxz"); +_LIT(KNumber4, "447756900111"); +//_LIT(KNumber5, "+441987960222"); +//_LIT(KNumber6, "07700 608101"); +_LIT(KGivenName, "AAA"); +_LIT(KFamilyName, "BBB"); +_LIT(KPhoneNumber, "0123456789"); +_LIT(KTestNum, "1234567890"); + +#undef test //there is a "test" macro which hides "RTest test" declaration. + +RTest test(_L("Contact Matching Test Harness")); +TBool TheMatchingIsEnabled = EFalse; +//TheContactNameFmt variable must be initialized before tests. +//It gives an information what is the contact name format in the logs. +TLogContactNameFormat TheContactNameFmt = ELogWesternFormat; + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//The function opens the LogEng server resource file (logserv.rsc) and gets the value of +//R_LOG_CONTACT_NAME_FORMAT resource. This value will be retured as a result of the call. +//It gives an information what is the contact name format in the logs. +static TLogContactNameFormat GetContactNameFormatL() + { + // Get language of resource file + _LIT(KLogResourceFile,"z:\\private\\101f401d\\logserv.rsc"); + TFileName fileName(KLogResourceFile); + BaflUtils::NearestLanguageFile(theFs, fileName); + + // Open resource file + RResourceFile rscFile; + CleanupClosePushL(rscFile); + rscFile.OpenL(theFs, fileName); + HBufC8* buf = rscFile.AllocReadLC(R_LOG_CONTACT_NAME_FORMAT); + + TResourceReader reader; + reader.SetBuffer(buf); + + TLogContactNameFormat contactNameFmt = static_cast (reader.ReadInt16()); + CleanupStack::PopAndDestroy(2, &rscFile); + return contactNameFmt; + } + +//This function checks the logged name is the same as the event name. +//Contact name logging format is taken into account. +static void CheckContactName(CLogEvent& aEvent, const TDesC& aGivenName, const TDesC& aFamilyName) + { + TBuf<128> fullname; + if(TheContactNameFmt == ELogWesternFormat) + { + fullname.Format(_L("%S %S"), &aGivenName, &aFamilyName); + } + else //ELogChineseFormat + { + fullname.Format(_L("%S %S"), &aFamilyName, &aGivenName); + } + TEST(aEvent.RemoteParty() == fullname); + } + +/** +Check normal operation + +@SYMTestCaseID SYSLIB-LOGENG-CT-1016 +@SYMTestCaseDesc Tests for normal operations of CContactItem class +@SYMTestPriority High +@SYMTestActions The test adds 3 events and checks that the retrieved contact details are correct. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +static void TestContactMatch1L(CLogClient& aClient) + { + CTestActive* active = new(ELeave)CTestActive(); + CleanupStack::PushL(active); + + CLogEvent* event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KNumber1); + + // Add event. Expected contact to be found: {KFirstName1, KLastName1}. + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result + TLogContactItemId id1 = event->Contact(); + TEST(id1 != KLogNullContactId); + ::CheckContactName(*event, KFirstName1, KLastName1); + TEST(event->Flags() & KLogEventContactSearched); + + // Create new event + CleanupStack::PopAndDestroy(event); + event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KNumber2); + + // Add event. Expected contact to be found: {KFirstName2, KLastName2}. + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result + TLogContactItemId id2 = event->Contact(); + TEST(id2 != KLogNullContactId && id2 != id1); + ::CheckContactName(*event, KFirstName2, KLastName2); + TEST(event->Flags() & KLogEventContactSearched); + + // Create new event + CleanupStack::PopAndDestroy(event); + event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KNumber3); + + // Add event. Expected contact to be found: {KFirstName3, KLastName3}. + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result + TLogContactItemId id3 = event->Contact(); + TEST(id3 != KLogNullContactId && id3 != id2); + ::CheckContactName(*event, KFirstName3, KLastName3); + TEST(event->Flags() & KLogEventContactSearched); + + CleanupStack::PopAndDestroy(2); // event, active + } + +/** +Check special cases + +@SYMTestCaseID SYSLIB-LOGENG-CT-1017 +@SYMTestCaseDesc Tests for special cases on CContactItem class +@SYMTestPriority High +@SYMTestActions The test adds couple events and checks that the retrieved contact details are correct. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +static void TestContactMatch2L(CLogClient& aClient) + { + CTestActive* active = new(ELeave)CTestActive(); + CleanupStack::PushL(active); + + CLogEvent* event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + + const TLogContactItemId KIdInvalid = 77711; + event->SetNumber(KNumber3); + event->SetContact(KIdInvalid); + + // Add event. There is a contacts record with phone number KNumber3, but the contact id is not KIdInvalid. + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result - details should be unchanged + TLogContactItemId id1 = event->Contact(); + TEST(id1 == KIdInvalid); + TEST(event->RemoteParty().Length() == 0); + TEST(!(event->Flags() & KLogEventContactSearched)); + + // Set remote party. The contact id is still KIdInvalid. + // The remote part of the contacts record with phone number KNumber3 is KFirstName3. + event->SetRemoteParty(KFirstName5); + + // Add event + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result - details should be unchanged + id1 = event->Contact(); + TEST(id1 == KIdInvalid); + TEST(event->RemoteParty() == KFirstName5); + TEST(!(event->Flags() & KLogEventContactSearched)); + + // Create new event. The contact id is not set. + // The phone number is set to be the same as the phone number of the contacts record. + // The remote party is set but is different in the contacts record. + CleanupStack::PopAndDestroy(event); + event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KNumber3); + event->SetRemoteParty(KFirstName5); + + // Add event + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result - Remote party should be unchanged. But the contact id should be set and valid. + TLogContactItemId id2 = event->Contact(); + TEST(id2 != KLogNullContactId && id2 != id1); + TEST(event->RemoteParty() == KFirstName5); + TEST(event->Flags() & KLogEventContactSearched); + + // Create new event + CleanupStack::PopAndDestroy(event); + event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KNumber4);//There are 2 contacts records with phone number = KNumber4. + + // Add event + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + // Check result - Details should not be set, because more than one contact found + TEST(event->Contact() == KLogNullContactId); + TEST(event->RemoteParty().Length() == 0); + TEST(event->Flags() & KLogEventContactSearched); + + // Create new event + CleanupStack::PopAndDestroy(event); + event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + + TInt count = KTestNum().Length(); + while(count--) + { + TPtrC num = KTestNum().Right(KTestNum().Length() - count); + event->SetNumber(num); + + // Add event + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + + TLogContactItemId id3 = event->Contact(); + + // Shouldn't perform a contacts match if number isn't big enough + if (num.Length() < 7) + { + // Check result - contact should not be set + TEST(id3 == KLogNullContactId); + TEST(event->RemoteParty().Length() == 0); + } + else + { + // Check result - Details should be set now + TEST(id3 != KLogNullContactId); + ::CheckContactName(*event, KFirstName6, KLastName6); + } + TEST(event->Flags() & KLogEventContactSearched); + } + + CleanupStack::PopAndDestroy(2); // event, active + } + +/** +@SYMTestCaseID SYSLIB-LOGENG-CT-1392 +@SYMTestCaseDesc Test for DEF068087 fix - "Chinese names don't display in Chinese name format." +@SYMTestPriority Medium +@SYMTestActions Checks that added {given_name,family_name} strings pair + is stored in the logs using the correct order (degtermined + by r_log_contact_name_format resource value). +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void DEF068087L(CLogClient& aClient) + { + CTestActive* active = new (ELeave) CTestActive(); + CleanupStack::PushL(active); + + //Add "phone call" event using one of the existing contacts + CLogEvent* event = CLogEvent::NewL(); + CleanupStack::PushL(event); + event->SetEventType(KLogCallEventTypeUid); + event->SetNumber(KPhoneNumber); + active->StartL(); + aClient.AddEvent(*event, active->iStatus); + CActiveScheduler::Start(); + TEST2(active->iStatus.Int(), KErrNone); + TInt eventId = event->Id(); + TEST(eventId != KLogNullId); + + //Check result + TEST(event->Contact() != KLogNullContactId); + ::CheckContactName(*event, KGivenName, KFamilyName); + TEST(event->Flags() & KLogEventContactSearched); + + //Cleanup + CleanupStack::PopAndDestroy(event); + CleanupStack::PopAndDestroy(active); + } + +void doTestsL() + { + TestUtils::Initialize(_L("T_LOGCONTACT")); + + test.Start(_L("Prepare the test environment")); + + TheMatchingIsEnabled = TestUtils::MatchingEnabledL(); + + if (!TheMatchingIsEnabled) + { + test.Printf(_L("Contacts matching not enabled. Contacts matching tests NOT run\n")); + return; + } + + TheContactNameFmt = ::GetContactNameFormatL(); + + TestUtils::DeleteDatabaseL(); + + CLogClient* client = CLogClient::NewL(theFs); + CleanupStack::PushL(client); + + test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1392: DEF068087: Chinese names don't display in Chinese name format")); + ::DEF068087L(*client); + test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1016: Contacts matching - test1")); + TestContactMatch1L(*client); + test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1017: Contacts matching - test2")); + TestContactMatch2L(*client); + + TestUtils::DeleteDatabaseL(); + + CleanupStack::PopAndDestroy(client); + }