--- /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 <bautils.h>
+#include <logserv.rsg>
+#include <barsc.h>
+#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 <TLogContactNameFormat> (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);
+ }