--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/test/src/t_logview2.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,6916 @@
+// Copyright (c) 2003-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:
+//
+
+#include <s32file.h>
+#include <logeng.h>
+#include <tz.h>
+#include "TEST.H"
+#include <logview.h>
+
+#undef test //there is a "test" macro which hides "RTest test" declaration.
+
+RTest test(_L("Log View Test Harness Number 2"));
+
+const TInt KTestEventNum = 20;
+const TInt KTestErrorEventNum = 3;
+const TLogContactItemId KTestContact1 = 0x123;
+const TLogContactItemId KTestContact2 = 0x456;
+const TLogContactItemId KTestContact3 = 0x789;
+_LIT(KTestDirection1, "Direction Test 1");
+_LIT(KTestDirection2, "Direction Test 2");
+_LIT(KTestDirection3, "Direction Test 3");
+_LIT(KTestNumber1, "Number Test 1");
+_LIT(KTestNumber2, "Number Test 2");
+_LIT(KTestNumber3, "Number Test 3");
+_LIT(KTestRemote1, "Remote Test 1");
+_LIT(KTestRemote2, "Remote Test 2");
+_LIT(KTestRemote3, "Remote Test 3");
+_LIT(KTestStatus1, "Status Test 1");
+_LIT(KTestStatus2, "Status Test 2");
+_LIT(KTestStatus3, "Status Test 3");
+_LIT(KTestSubject, "Test Subject");
+const TLogLink KTestLink = 0x123456;
+_LIT8(KTestData, "Test data");
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0930
+@SYMTestCaseDesc Tests for the functionality of CLogViewEvent,CLogFilter classes
+@SYMTestPriority High
+@SYMTestActions Tests for event view after setting filter on the views.
+ Change the filter list configuration and test for the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestEventViewWithFilterListL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0930 "));
+ CTestActive* active = new(ELeave)CTestActive;
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetContact(KTestContact1);
+ event->SetDirection(KTestDirection1);
+ event->SetDurationType(KLogDurationNone);
+ event->SetNumber(KTestNumber1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogDataEventTypeUid);
+ event->SetContact(KTestContact2);
+ event->SetDirection(KTestDirection2);
+ event->SetDurationType(KLogDurationValid);
+ event->SetNumber(KTestNumber2);
+ event->SetRemoteParty(KTestRemote2);
+ event->SetStatus(KTestStatus2);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogFaxEventTypeUid);
+ event->SetContact(KTestContact3);
+ event->SetDirection(KTestDirection3);
+ event->SetDurationType(KLogDurationData);
+ event->SetNumber(KTestNumber3);
+ event->SetRemoteParty(KTestRemote3);
+ event->SetStatus(KTestStatus3);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(),1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+ filter->SetStatus(KTestStatus1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+ filter->SetStatus(KTestStatus2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+ filter->SetStatus(KTestStatus3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ CleanupStack::PopAndDestroy(4); // list, view, event, active
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-3432
+@SYMTestCaseDesc Test the functionality of CLogViewEvent::SetFilterL with the CLogFilterList parameter containing multiple filters with start time and end time.
+@SYMTestPriority High
+@SYMTestActions 1. Add 2 events.
+ 2. Setup a CLogFilterList with two filters targeting the first event. Both filters have start and end time. Call SetFilterL.
+ 3. Verify view has 1 event and no LogServ panic.
+ 4. Clear the filter list.
+ 5. Setup filter for first event with start and end time. Call SetFilterL.
+ 6. Verify view has one event.
+ 7. Setup second filter for second event with start and end time. Append this filter to filter list and call SetFilterL.
+ 8. Verify view has 2 events and no LogServ panic.
+@SYMTestExpectedResults Log view has expected number of events and no LogServ panic.
+@SYMDEF INC102412
+*/
+LOCAL_C void TestEventViewWithTimestampsInFilterListL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3432 "));
+ TTime testStartTime;
+ testStartTime.UniversalTime();
+ TTime tomorrow = testStartTime + (TTimeIntervalDays)1;
+ TTime twoDaysFromNow = tomorrow + (TTimeIntervalDays)1;
+
+ CTestActive* active = new(ELeave)CTestActive;
+ CleanupStack::PushL(active);
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(tomorrow, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Wait a second before adding events to log.
+ User::After(1100000);
+
+ // Add two events to log
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ // Add event 1
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetContact(KTestContact1);
+ event->SetDirection(KTestDirection1);
+ event->SetDurationType(KLogDurationNone);
+ event->SetNumber(KTestNumber1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetStatus(KTestStatus1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Add event 2
+ event->SetEventType(KLogDataEventTypeUid);
+ event->SetContact(KTestContact2);
+ event->SetDirection(KTestDirection2);
+ event->SetDurationType(KLogDurationValid);
+ event->SetNumber(KTestNumber2);
+ event->SetRemoteParty(KTestRemote2);
+ event->SetStatus(KTestStatus2);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Setup filter
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set half a filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetStartTime(testStartTime);
+ TTime t1 = filter->StartTime();
+ TEST(t1 == testStartTime);
+ filter->SetEndTime(tomorrow);
+ TTime t2 = filter->EndTime();
+ TEST(t2 == tomorrow);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // set the other half of filter for event 1
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+ filter->SetStatus(KTestStatus1);
+
+ // start time is duplicate of previous filter,
+ // end time is not duplicate
+ filter->SetStartTime(testStartTime);
+ filter->SetEndTime(twoDaysFromNow);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(),1);
+
+ list->ResetAndDestroy();
+
+ // check contents of the event.
+ TBool res = view->FirstL(active->iStatus);
+ TEST(res);
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TEST2(view->Event().Contact(), KTestContact1);
+ TEST( view->Event().Number() == KTestNumber1);
+ TEST( view->Event().Status() == KTestStatus1);
+ TEST( view->Event().RemoteParty() == KTestRemote1);
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+ filter->SetStatus(KTestStatus1);
+ filter->SetStartTime(testStartTime);
+ filter->SetEndTime(tomorrow);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+ filter->SetStatus(KTestStatus2);
+
+ // start time is duplicate,
+ // end time is not duplicate
+ filter->SetStartTime(testStartTime);
+ filter->SetEndTime(twoDaysFromNow);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active->StartL();
+ TEST(view->SetFilterL(*list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ list->ResetAndDestroy();
+
+ // check contents of event 2 (most recent)
+ res = view->FirstL(active->iStatus);
+ TEST(res);
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TEST2(view->Event().Contact(), KTestContact2);
+ TEST( view->Event().Number() == KTestNumber2);
+ TEST( view->Event().Status() == KTestStatus2);
+ TEST( view->Event().RemoteParty() == KTestRemote2);
+
+ // check contents of event 1 (older)
+ res = view->NextL(active->iStatus);
+ TEST(res);
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TEST2(view->Event().Contact(), KTestContact1);
+ TEST( view->Event().Number() == KTestNumber1);
+ TEST( view->Event().Status() == KTestStatus1);
+ TEST( view->Event().RemoteParty() == KTestRemote1);
+
+ CleanupStack::PopAndDestroy(4); // list, view, event, active
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0931
+@SYMTestCaseDesc Tests for recent view list with filters
+@SYMTestPriority High
+@SYMTestActions Tests for recent view list,with different settings of the filter.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRecentViewWithFilterL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0931 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetNumber(_L("1"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationData);
+ event->SetNumber(_L("2"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetStatus(KTestStatus1);
+ event->SetNumber(_L("3"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetContact(KTestContact1);
+ event->SetNumber(_L("4"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 4);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // This should make no difference
+ filter->SetEventType(KLogCallEventTypeUid);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 4);
+
+ // This should make no difference
+ filter->SetDirection(buf);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 4);
+
+ filter->SetDurationType(KLogDurationData);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 3);
+
+ filter->SetStatus(KTestStatus1);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 2);
+
+ filter->SetContact(KTestContact1);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter->SetStatus(_L("Dummy"));
+ TEST(!view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+
+ CleanupStack::PopAndDestroy(4); // filter, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0932
+@SYMTestCaseDesc Tests for recent view list with filter set for the view
+@SYMTestPriority High
+@SYMTestActions Tests for recent view list set by the specified set of filters.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRecentViewWithFilterListL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0932 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetDurationType(KLogDurationNone);
+ event->SetContact(KTestContact1);
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationValid);
+ event->SetContact(KTestContact2);
+ event->SetStatus(KTestStatus2);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationData);
+ event->SetContact(KTestContact3);
+ event->SetStatus(KTestStatus3);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 3);
+
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetStatus(KTestStatus1);
+ filter->SetContact(KTestContact1);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetStatus(KTestStatus2);
+ filter->SetContact(KTestContact2);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ filter->SetDurationType(KLogDurationData);
+ filter->SetStatus(KTestStatus3);
+ filter->SetContact(KTestContact3);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 3);
+
+ list->ResetAndDestroy();
+ CleanupStack::PopAndDestroy(4); // list, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0933
+@SYMTestCaseDesc Tests for duplicate event view with filter
+@SYMTestPriority High
+@SYMTestActions Tests for duplicate event view count.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestDuplicateViewWithFilterL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0933 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetContact(KTestContact1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationValid);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationNone);
+ event->SetStatus(KNullDesC);
+
+ // Add event - This will be the entry in recent list
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId logId1 = event->Id();
+
+ // Should only be one event in recent list - the rest are duplicates
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ TLogRecentList recentList = view->RecentList();
+ TEST(recentList == KLogRecentIncomingCalls);
+
+ // Check duplicate count
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 3);
+
+ TLogId logId2 = duplicate->Source();
+ TEST(logId1 == logId2);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 3);
+
+ filter->SetDurationType(KLogDurationValid);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 2);
+
+ filter->SetStatus(KTestStatus1);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ filter->SetStatus(KTestStatus2);
+ TEST(!view->DuplicatesL(*duplicate, *filter, active->iStatus));
+
+ CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0934
+@SYMTestCaseDesc Tests for duplicate event view with filter list
+@SYMTestPriority High
+@SYMTestActions Tests for duplicate event view count,set by the specified set of filters.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestDuplicateViewWithFilterListL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0934 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetContact(KTestContact1);
+
+ event->SetDurationType(KLogDurationNone);
+ event->SetStatus(KNullDesC);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationValid);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationData);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Final event will be most recent
+ event->SetDurationType(KLogDurationNone);
+ event->SetStatus(KNullDesC);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 3);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ filter->SetDurationType(KLogDurationValid);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ filter->SetDurationType(KLogDurationData);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *list, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 2);
+
+ list->ResetAndDestroy();
+ CleanupStack::PopAndDestroy(5); // list, duplicate, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0935
+@SYMTestCaseDesc Tests for null field set on filter in the event view
+ Tests for CLogFilter::SetNullFields() function
+@SYMTestPriority High
+@SYMTestActions Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestEventViewForNullFieldsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0935 "));
+ CTestActive* active = new(ELeave)CTestActive;
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+ event->SetEventType(KLogCallEventTypeUid);
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Wait a second
+ User::After(1000000);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are no events
+ TEST(!view->SetFilterL(*filter, active->iStatus));
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetContact(KTestContact1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDirection(KTestDirection1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetNumber(KTestNumber1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetRemoteParty(KTestRemote1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetStatus(KTestStatus1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetSubject(KTestSubject);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetLink(KTestLink);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDataL(KTestData);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Test for NULL fields
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 9);
+
+ filter->SetNullFields(ELogContactField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField | ELogLinkField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ CleanupStack::PopAndDestroy(4); // filter, view, event, active
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0936
+@SYMTestCaseDesc Tests for null field set on filter for the recent event view list
+@SYMTestPriority High
+@SYMTestActions Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRecentViewForNullFieldsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0936 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetNumber(_L("1"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetStatus(KTestStatus1);
+ event->SetNumber(_L("2"));
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetSubject(KTestSubject);
+ event->SetNumber(_L("3"));
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetLink(KTestLink);
+ event->SetNumber(_L("4"));
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDataL(KTestData);
+ event->SetNumber(_L("5"));
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 5);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Test for NULL fields
+
+ filter->SetNullFields(ELogStatusField);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view->CountL(), 1);
+
+ CleanupStack::PopAndDestroy(4); // filter, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0937
+@SYMTestCaseDesc Tests for null field set on filter for the duplicate event view list
+@SYMTestPriority High
+@SYMTestActions Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestDuplicateViewForNullFieldsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0937 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetContact(KTestContact1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetSubject(KTestSubject);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetLink(KTestLink);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDataL(KTestData);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetDurationType(KLogDurationNone);
+ event->SetStatus(KNullDesC);
+
+ // Add event - This will be the entry in recent list
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Should only be one event in recent list - the rest are duplicates
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 5);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ filter->SetNullFields(ELogStatusField);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0938
+@SYMTestCaseDesc Querying event view for flags test
+@SYMTestPriority High
+@SYMTestActions Clear the log events and add new events with fields set in.Define null fields and set flags in the filter and check the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestEventViewForFlagsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0938 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Wait a second
+ User::After(1000000);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are now events
+ TEST(!view->SetFilterL(*filter, active->iStatus));
+
+ // Add some events
+ event->SetEventType(KLogCallEventTypeUid);
+ TLogFlags flags = KLogFlagsMask + 1;
+ TLogFlags flags2;
+
+ while(flags--)
+ {
+ event->ClearFlags(0xF);
+ event->SetFlags(flags);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ // we use this because, since the events were all created without contact ids
+ // the log engine looked each one up in the contacts DB and set the flag so we
+ // need to set it in the flags being looked for
+ flags2 = static_cast<TLogFlags>(flags | KLogEventContactSearched);
+ filter->SetFlags(flags2);
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((view->Event().Flags() & flags2) == flags2);
+
+ while(view->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((view->Event().Flags() & flags2) == flags2);
+ }
+ }
+
+ // Now TEST we can query for the inverse
+ filter->SetNullFields(ELogFlagsField);
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ // we use this because, since the events were all created without contact ids
+ // the log engine looked each one up in the contacts DB and set the flag so we
+ // need to unset it in the flags being excluded
+ flags2 = static_cast<TLogFlags>(flags & ~KLogEventContactSearched);
+ filter->SetFlags(flags2);
+
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~view->Event().Flags() & flags2) == flags2);
+
+ while(view->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~view->Event().Flags() & flags2) == flags2);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(4); // filter, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0939
+@SYMTestCaseDesc Querying recent event view for flags test
+@SYMTestPriority High
+@SYMTestActions Change the log configuration.Clear the log for any recent list and add some events.Query for flags in the recent view list
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRecentViewForFlagsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0939 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TLogConfig config;
+
+ // Change the log engine config
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ config.iMaxRecentLogSize = KLogFlagsMask + 1;
+
+ // Change the log engine config
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are no events
+ TEST(!view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ // Add some events
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+
+ TLogFlags flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ event->ClearFlags(0xF);
+ event->SetFlags(flags);
+ event->SetContact(flags);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ filter->SetFlags(flags);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((view->Event().Flags() & flags) == flags);
+
+ while(view->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((view->Event().Flags() & flags) == flags);
+ }
+ }
+
+ // Now TEST we can query for the inverse
+ filter->SetNullFields(ELogFlagsField);
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ filter->SetFlags(flags);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~view->Event().Flags() & flags) == flags);
+
+ while(view->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~view->Event().Flags() & flags) == flags);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(4); // filter, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0940
+@SYMTestCaseDesc Querying duplicate event view for flags test
+@SYMTestPriority High
+@SYMTestActions Change the log configuration.Clear the log for any recent list and add some events.Query for flags in the duplicate view list
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestDuplicateViewForFlagsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0940 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are now events
+ TEST(!view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ // Add some events
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetDurationType(KLogDurationNone);
+ event->SetContact(KTestContact1);
+ event->SetStatus(KTestStatus1);
+
+ TLogFlags flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ event->ClearFlags(0xF);
+ event->SetFlags(flags);
+
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ // Add an extra event which will be the most recent
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ filter->SetFlags(flags);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((duplicate->Event().Flags() & flags) == flags);
+
+ while(duplicate->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((duplicate->Event().Flags() & flags) == flags);
+ }
+ }
+
+ // Now TEST we can query for the inverse
+ filter->SetNullFields(ELogFlagsField);
+
+ flags = KLogFlagsMask + 1;
+ while(flags--)
+ {
+ filter->ClearFlags(0xF);
+ filter->SetFlags(flags);
+
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~duplicate->Event().Flags() & flags) == flags);
+
+ while(duplicate->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST((~duplicate->Event().Flags() & flags) == flags);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0941
+@SYMTestCaseDesc Tests for removing recent events.Tests for CLogClient::ClearLog() function
+@SYMTestPriority High
+@SYMTestActions Clear log for any recent entries.Add events and create the view.Test for removing the recent events from the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRemovingRecentEventsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0941 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are no events
+ TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ // Add some events
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+
+ TInt count = 10;
+ while(count--)
+ {
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ // Create the view
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TLogId id = view->Event().Id();
+ while(view->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Try removing the previous event
+ view->RemoveL(id);
+ id = view->Event().Id();
+ }
+
+ // Try removing the current event
+ view->RemoveL(id);
+ TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
+
+ CleanupStack::PopAndDestroy(3); // view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0942
+@SYMTestCaseDesc Removing duplicate events from the duplicate view
+ Tests for CLogViewRecent::DuplicatesL() function
+@SYMTestPriority High
+@SYMTestActions Clear log for any recent entries.Add events and create the view and duplicate view.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestRemovingDuplicateEventsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0942 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Make sure there are no events
+ TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
+
+ // Incoming
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+
+ // Add some events
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf);
+ event->SetDurationType(KLogDurationNone);
+ event->SetContact(KTestContact1);
+ event->SetStatus(KTestStatus1);
+
+ TInt count = 10;
+ while(count--)
+ {
+ // Add event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ RDebug::Print(_L("EVENT ID: %d\n"), event->Id());
+ }
+
+ // Create the view
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Create the duplicate view
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+ count = duplicate->CountL();
+ TEST2(count, 9);
+
+ TLogId id = duplicate->Event().Id();
+ while(duplicate->NextL(active->iStatus))
+ {
+ active->StartL();
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Try removing the previous event
+ duplicate->RemoveL(id);
+ id = duplicate->Event().Id();
+ }
+
+ // Try removing the current event
+ duplicate->RemoveL(id);
+ count = duplicate->CountL();
+ TEST2(count, 0);
+ //
+ TEST(!view->DuplicatesL(*duplicate, active->iStatus));
+
+ CleanupStack::PopAndDestroy(4); // duplicate, view, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0943
+s@SYMTestCaseDesc Multiple log event views test
+@SYMTestPriority High
+@SYMTestActions Add events and set the filter with different fields.Check for log event views
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestMultipleViews1L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0943 "));
+ CTestActive* active1 = new(ELeave)CTestActive;
+ CleanupStack::PushL(active1);
+
+ // Wait a second
+ User::After(1000000);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active1->StartL();
+ aClient.ClearLog(now, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ CTestActive* active2 = new(ELeave)CTestActive;
+ CleanupStack::PushL(active2);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetContact(KTestContact1);
+ event->SetDirection(KTestDirection1);
+ event->SetDurationType(KLogDurationNone);
+ event->SetNumber(KTestNumber1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogDataEventTypeUid);
+ event->SetContact(KTestContact2);
+ event->SetDirection(KTestDirection2);
+ event->SetDurationType(KLogDurationValid);
+ event->SetNumber(KTestNumber2);
+ event->SetRemoteParty(KTestRemote2);
+ event->SetStatus(KTestStatus2);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogFaxEventTypeUid);
+ event->SetContact(KTestContact3);
+ event->SetDirection(KTestDirection3);
+ event->SetDurationType(KLogDurationData);
+ event->SetNumber(KTestNumber3);
+ event->SetRemoteParty(KTestRemote3);
+ event->SetStatus(KTestStatus3);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ CLogViewEvent* view1 = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view1);
+
+ CLogViewEvent* view2 = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view2);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test Views
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+ filter->SetStatus(KTestStatus1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+ filter->SetStatus(KTestStatus2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+ filter->SetStatus(KTestStatus3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ CleanupStack::PopAndDestroy(6); // list, view1, view2, event, active1, active2
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0944
+@SYMTestCaseDesc Multiple log event views test
+@SYMTestPriority High
+@SYMTestActions Add events and set the filter with different fields.
+ Check for log event views and the test for the count of events
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestMultipleViews2L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0944 "));
+ CTestActive* active1 = new(ELeave)CTestActive;
+ CleanupStack::PushL(active1);
+
+ // Wait a second
+ User::After(1000000);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active1->StartL();
+ aClient.ClearLog(now, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ CTestActive* active2 = new(ELeave)CTestActive;
+ CleanupStack::PushL(active2);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetContact(KTestContact1);
+ event->SetDirection(KTestDirection1);
+ event->SetDurationType(KLogDurationNone);
+ event->SetNumber(KTestNumber1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetStatus(KTestStatus1);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogDataEventTypeUid);
+ event->SetContact(KTestContact2);
+ event->SetDirection(KTestDirection2);
+ event->SetDurationType(KLogDurationValid);
+ event->SetNumber(KTestNumber2);
+ event->SetRemoteParty(KTestRemote2);
+ event->SetStatus(KTestStatus2);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogFaxEventTypeUid);
+ event->SetContact(KTestContact3);
+ event->SetDirection(KTestDirection3);
+ event->SetDurationType(KLogDurationData);
+ event->SetNumber(KTestNumber3);
+ event->SetRemoteParty(KTestRemote3);
+ event->SetStatus(KTestStatus3);
+
+ // Add event
+ active1->StartL();
+ aClient.AddEvent(*event, active1->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active1->iStatus.Int(), KErrNone);
+
+ CLogFilterList* list = new(ELeave)CLogFilterList;
+ CleanupStack::PushL(list);
+
+ CLogViewEvent* view1 = CLogViewEvent::NewL(aClient);
+ CleanupStack::PushL(view1);
+
+ CLogClient* client2 = CLogClient::NewL(theFs);
+ CleanupStack::PushL(client2);
+
+ CLogViewEvent* view2 = CLogViewEvent::NewL(*client2);
+ CleanupStack::PushL(view2);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test Views
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ /////////////////////////////////////////
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact1);
+ filter->SetDirection(KTestDirection1);
+ filter->SetDurationType(KLogDurationNone);
+ filter->SetEventType(KLogCallEventTypeUid);
+ filter->SetNumber(KTestNumber1);
+ filter->SetRemoteParty(KTestRemote1);
+ filter->SetStatus(KTestStatus1);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 1);
+ TEST2(view2->CountL(), 1);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact2);
+ filter->SetDirection(KTestDirection2);
+ filter->SetDurationType(KLogDurationValid);
+ filter->SetEventType(KLogDataEventTypeUid);
+ filter->SetNumber(KTestNumber2);
+ filter->SetRemoteParty(KTestRemote2);
+ filter->SetStatus(KTestStatus2);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 2);
+ TEST2(view2->CountL(), 2);
+
+ filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // Set filter
+ filter->SetContact(KTestContact3);
+ filter->SetDirection(KTestDirection3);
+ filter->SetDurationType(KLogDurationData);
+ filter->SetEventType(KLogFaxEventTypeUid);
+ filter->SetNumber(KTestNumber3);
+ filter->SetRemoteParty(KTestRemote3);
+ filter->SetStatus(KTestStatus3);
+
+ list->AppendL(filter);
+ CleanupStack::Pop(); // filter
+
+ // Test View
+ active1->StartL();
+ active2->StartL();
+ TEST(view1->SetFilterL(*list, active1->iStatus));
+ TEST(view2->SetFilterL(*list, active2->iStatus));
+ CActiveScheduler::Start();
+ CActiveScheduler::Start();
+ TEST2(view1->CountL(), 3);
+ TEST2(view2->CountL(), 3);
+
+ list->ResetAndDestroy();
+
+ CleanupStack::PopAndDestroy(7); // list, view1, view2, client2, event, active1, active2
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0945
+@SYMTestCaseDesc Tests for notification on changes done to the view
+ Tests for CLogViewChangeObserver::iStatus
+@SYMTestPriority High
+@SYMTestActions Tests for setting a filter on the view.Check for receiving notifications on adding events to the view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestViewChangeEventsL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0945 "));
+ TestUtils::DeleteDatabaseL();
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+ event->SetEventType(KLogCallEventTypeUid);
+
+ CTestActive* active = new(ELeave) CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewChangeObserver* changeObs = CLogViewChangeObserver::NewLC();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ TEST(!view->SetFilterL(*filter, active->iStatus));
+
+ // Add some events and check we receive change notifications
+ TInt count;
+ TLogId logId;
+ TInt viewIndex;
+ //
+ for(count = 0; count < KTestEventNum; count++)
+ {
+ aClient.AddEvent(*event, changeObs->iStatus);
+ CLogChangeDefinition* changes = changeObs->WaitForChangesLC(CLogViewChangeObserver::EStopOnBoth);
+ TEST2(changeObs->iStatus.Int(), KErrNone);
+ TEST(event->Id() == (TLogId) count);
+ //
+ User::After(1);
+ //
+ TEST2(changes->Count(), 1);
+ TEST2(changes->At(0, logId, viewIndex), ELogChangeTypeEventAdded);
+ TEST(logId == (TLogId) count);
+ TEST2(viewIndex, 0);
+ CleanupStack::PopAndDestroy(changes);
+ }
+
+ CleanupStack::PopAndDestroy(5, event); // filter, view, changeObs, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0946
+@SYMTestCaseDesc Tests for events in the recent view list
+@SYMTestPriority High
+@SYMTestActions Tests for events in the recent view list after setting the filters for incoming,outgoing and missed calls
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestAltEventsInRecentListL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0946 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Clear recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TLogString buf;
+ event->SetEventType(KLogCallEventTypeUid);
+
+ // Add Incoming events
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+ event->SetContact(1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ aClient.GetString(buf, R_LOG_DIR_IN_ALT);
+ event->SetDirection(buf);
+ event->SetContact(2);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ // Verify both events in recent list
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Add Outgoing events
+ aClient.GetString(buf, R_LOG_DIR_OUT);
+ event->SetDirection(buf);
+ event->SetContact(3);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ aClient.GetString(buf, R_LOG_DIR_OUT_ALT);
+ event->SetDirection(buf);
+ event->SetContact(4);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ // Verify both events in recent list
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Add Missed events
+ aClient.GetString(buf, R_LOG_DIR_MISSED);
+ event->SetDirection(buf);
+ event->SetContact(5);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ aClient.GetString(buf, R_LOG_DIR_MISSED_ALT);
+ event->SetDirection(buf);
+ event->SetContact(6);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ // Verify both events in recent list
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ CleanupStack::PopAndDestroy(3); // view, active, event,
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0947
+@SYMTestCaseDesc Tests for view with filter by time
+@SYMTestPriority High
+@SYMTestActions Tests for view with filters set by different time
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestFilterByTimeL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0947 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Clear recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ TLogString buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // add first event (events following are added on successive days)
+ event->SetContact(1); // ensures events are not duplicates
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TTime systemTime;
+ systemTime.UniversalTime();
+
+ // set filter startDate
+ TTime startDate = systemTime + (TTimeIntervalHours)+1;
+
+ // add event 2
+ systemTime += (TTimeIntervalDays)+1;
+ event->SetContact(2);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetTime(systemTime);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // add event 3
+ systemTime += (TTimeIntervalDays)+1;
+ event->SetContact(3);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetTime(systemTime);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // set filter endDate
+ TTime endDate = systemTime + (TTimeIntervalHours)+1;
+
+ // add event 4
+ systemTime += (TTimeIntervalDays)+1;
+ event->SetContact(4);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->SetTime(systemTime);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ // check using both start and end
+ filter->SetStartTime(startDate);
+ filter->SetEndTime(endDate);
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // only end filter
+ filter->SetStartTime(TTime(0)); // reset
+ filter->SetEndTime(endDate);
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 3);
+
+ // only start filter
+ filter->SetStartTime(startDate);
+ filter->SetEndTime(TTime(0));
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 3);
+
+ // no time filter
+ filter->SetStartTime(TTime(0));
+ filter->SetEndTime(TTime(0));
+ active->StartL();
+ TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 4);
+
+ CleanupStack::PopAndDestroy(4); // view, active, event, filter
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0948
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events for duplicates
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents1L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0948 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ // Add a new event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check change events
+ CTestTimer* timer = CTestTimer::NewL();
+ timer->After(100000);
+ CActiveScheduler::Start();
+ delete timer;
+
+ TEST2(changeObs2->Changes().Count(), 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+
+ // Check change events
+ User::After(100000);
+ TEST2(changeObs1->Changes().Count(), 1);
+ type = changeObs1->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventAdded);
+
+ CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0949
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list purged
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents2L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0949 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Get config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), config.iMaxRecentLogSize);
+
+ // Add a new event, will cause one to be purged from recent view
+ event->SetContact(1234);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check change events
+ CTestTimer *timer = CTestTimer::NewL();
+ timer->After(100000);
+ CActiveScheduler::Start();
+ delete timer;
+
+ TEST2(changeObs2->Changes().Count(), 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), config.iMaxRecentLogSize);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
+
+ // Check change events
+ User::After(100000);
+ TEST2(changeObs1->Changes().Count(), 1);
+ type = changeObs1->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventAdded);
+
+ CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0950
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list purged after changing config
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents3L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0950 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Get and set config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ config.iMaxRecentLogSize = 2;
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), config.iMaxRecentLogSize);
+
+ // Change config, will cause one event to be purged from recent view
+ config.iMaxRecentLogSize = 1;
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check change events
+ User::After(100000);
+ TEST2(changeObs2->Changes().Count(), 1);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), config.iMaxRecentLogSize);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
+
+ // Check change events
+ User::After(100000);
+ TEST(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0951
+@SYMTestCaseDesc Test for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that when deleting an event causing recent lists to be updated,views don't get unnecessary change events
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents4L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0951 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ filter->SetFlags(1); // Need to hide an event from the view
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ event->SetFlags(1);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ event->ClearFlags(0xF);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ changeObs1->StartCollectingChanges();
+ changeObs2->StartCollectingChanges();
+
+ // Delete the event in recent list
+ active->StartL();
+ aClient.DeleteEvent(event->Id(), active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check change events
+ User::After(1000000);
+ TEST2(changeObs2->Changes().Count(), 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventDeleted);
+
+ TEST(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(7); // changeObs1, changeObs2, view, filter, event, active, recent
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0952
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list cleared
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents5L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0952 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Get config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), config.iMaxRecentLogSize);
+
+ // Clear recent view
+ active->StartL();
+ aClient.ClearLog(KLogRecentIncomingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check change events
+ User::After(100000);
+
+ count = config.iMaxRecentLogSize;
+ TEST2(changeObs2->Changes().Count(), count);
+ while(count--)
+ {
+ type = changeObs2->Changes().At(count, logId, viewIndex);
+ TEST2(type, ELogChangeTypeEventDeleted);
+ }
+
+ // Check recent view
+ TEST(!recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+
+ // Check change events
+ User::After(100000);
+ TEST(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(7); // changeObs1, changeObs2, view, filter, event, active, recent
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0953
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when removing events from a recent or duplicate view
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents6L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0953 "));
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Add a duplicate
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ // Remove duplicate
+ duplicate->RemoveL(duplicate->Event().Id());
+
+ CTestTimer* timer = CTestTimer::NewL();
+ CleanupStack::PushL(timer);
+ timer->After(100000);
+ CActiveScheduler::Start();
+
+ // Check change events
+ TEST(!changeObs1->HaveChanges());
+ TEST(!changeObs2->HaveChanges());
+
+ // Remove recent
+ recent->RemoveL(recent->Event().Id());
+
+ // Check change events
+ timer->After(100000);
+ CActiveScheduler::Start();
+
+ TEST(!changeObs1->HaveChanges());
+ TEST(!changeObs2->HaveChanges()); // No event because we should know we called Remove on ourselves
+
+ CleanupStack::PopAndDestroy(9); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate, timer
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0954
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when clearing duplicates
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents7L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0954 "));
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Add a duplicate
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ TEST(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+
+ // Remove duplicate
+ recent->ClearDuplicatesL();
+
+ CTestTimer* timer = CTestTimer::NewL();
+ CleanupStack::PushL(timer);
+ timer->After(100000);
+ CActiveScheduler::Start();
+
+ // Check change events
+ TEST(!changeObs1->HaveChanges());
+ TEST(!changeObs2->HaveChanges());
+
+ CleanupStack::PopAndDestroy(9); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate, timer
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-1363
+@SYMTestCaseDesc Tests for log view change observer
+ Making a call from recent call list causes total freeze if log
+ has been cleared
+@SYMTestPriority High
+@SYMTestActions Test that editing a recent event does not cause a panic if
+ part of the log has been cleared
+@SYMTestExpectedResults Test must not fail
+@SYMDEF DEF066296
+*/
+LOCAL_C void DEF066296L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1363 "));
+ TBuf<KLogMaxDirectionLength> buf;
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ // To reproduce this defect, we need a view to be updated
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ // Set up the event and log a call from number 444
+ event->SetEventType(KLogCallEventTypeUid);
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+ event->SetNumber(_L("444"));
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Set up the view to display the recent call list
+ active->StartL();
+ test(view->SetRecentListL(-1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Get and print current UTC time
+ TTime now;
+ now.UniversalTime();
+ TBuf<0x80> testString;
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Current UTC time - %S\n"), &testString);
+
+ // Move the UTC time forward by one day
+ now += TTimeIntervalDays(1);
+ User::SetUTCTime(now);
+
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Changed UTC time to - %S\n"), &testString);
+
+ // Set up the event and log a call from number 555
+ event->SetNumber(_L("555"));
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Set up the event and log a call from number 611
+ event->SetNumber(_L("611"));
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ //remember this Id - we will try to change this log event later
+ TInt logId = event->Id();
+
+ // Set up the event and log a call from number 777
+ event->SetNumber(_L("777"));
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Delete all events occurring before today
+ // this should remove only the first call to number 444
+ TDateTime midnight = now.DateTime();
+ midnight.SetHour(0);
+ midnight.SetMinute(0);
+ midnight.SetSecond(0);
+ midnight.SetMicroSecond(0);
+
+ active->StartL();
+ aClient.ClearLog(midnight, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Attempt to change an entry from the recent list - that for the call to number 611
+ // without this defect fix, the call to ChangeEvent() will panic with EBadArrayPosition
+ event->SetNumber(_L("555"));
+ event->SetId(logId);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Restore and print UTC time
+ now.UniversalTime();
+ now -= TTimeIntervalDays(1);
+ User::SetUTCTime(now);
+
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Restored UTC time to - %S\n"), &testString);
+
+ CleanupStack::PopAndDestroy(3, event); //event, active, view
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-1807
+@SYMTestCaseDesc Tests that DEF087459 works between 00:00 and 01:00am hometime
+@SYMTestPriority Medium
+@SYMTestActions Change the home time to 00:30 and run DEF066296 test
+@SYMTestExpectedResults Test must not fail
+@SYMDEF DEF087459
+*/
+LOCAL_C void DEF087459L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1807 "));
+ RTz tz;
+ TInt err = tz.Connect();
+ TEST2(err, KErrNone);
+ CleanupClosePushL(tz);
+ TTime now, saveNow;
+
+ // Get and print current home time and save it
+ now.HomeTime();
+ saveNow=now;
+
+ TBuf<0x80> testString;
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Current home time - %S\n"), &testString);
+
+ // Problem occurred between midnight and 01:00am hometime, so change home time to
+ // be 00:30am
+ TDateTime midnight = now.DateTime();
+ midnight.SetHour(0);
+ midnight.SetMinute(30);
+ midnight.SetSecond(0);
+ midnight.SetMicroSecond(0);
+
+ TTime newTime=midnight;
+
+ err = tz.SetHomeTime(midnight);
+ TEST2(err, KErrNone);
+
+ // Get and print new home time
+ now.HomeTime();
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Changed home time to - %S\n"), &testString);
+ RDebug::Print(_L("Re-running DEF066296 test\n"));
+
+ DEF066296L(aClient);
+
+ // Restore and print hometime
+ err = tz.SetHomeTime(saveNow);
+ TEST2(err, KErrNone);
+ now.HomeTime();
+ now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
+ RDebug::Print(_L("Restored home time to - %S\n"), &testString);
+
+ CleanupStack::PopAndDestroy(); //tz
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0955
+@SYMTestCaseDesc Tests that events can be changed to move them between recent lists
+@SYMTestPriority High
+@SYMTestActions Add the events to the view.Move most recent event to another recent list
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestChangeEventRecentView1L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0955 "));
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent1);
+
+ CLogViewDuplicate* duplicate1 = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate1);
+
+ CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent2);
+
+ CLogViewDuplicate* duplicate2 = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate2);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ TBuf<KLogMaxDirectionLength> incoming;
+ aClient.GetString(incoming, R_LOG_DIR_IN);
+
+ // Missed call event
+ TBuf<KLogMaxDirectionLength> missed;
+ aClient.GetString(missed, R_LOG_DIR_MISSED);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(missed);
+ event->SetContact(1);
+
+ // Add some events
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id1 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id2 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id3 = event->Id();
+
+ User::After(1000000);
+
+ // Most recent
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id4 = event->Id();
+
+ // Check there's a recent event in the list
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id4);
+
+ // Check it has duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 3);
+ TEST2(duplicate1->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id1);
+
+ // Other recent list should be empty
+ TEST(!recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should now be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id3);
+ event->CopyL(recent1->Event()); // for later
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 2);
+ TEST2(duplicate1->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id1);
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id4);
+
+ // No duplicates yet
+ TEST(!recent2->DuplicatesL(*duplicate2, active->iStatus));
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should now be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id2);
+ event->CopyL(recent1->Event()); // for later
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 1);
+ TEST2(duplicate1->Event().Id(), id1);
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 1);
+ TEST2(duplicate2->Event().Id(), id3);
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should now be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id1);
+ event->CopyL(recent1->Event()); // for later
+
+ // Should be no more duplicates
+ TEST(!recent1->DuplicatesL(*duplicate1, active->iStatus));
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 2);
+ TEST2(duplicate2->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id2);
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // No more recent events
+ TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 3);
+ TEST2(duplicate2->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id1);
+
+ CleanupStack::PopAndDestroy(6); // active, event, recent1, duplicate1, recent2, duplicate2
+ }
+
+/**
+Test that events can be changed to move them between recent lists
+The same as TestChangeEventRecentView1L, but the events are transferred in reverse order
+
+@SYMTestCaseID SYSLIB-LOGENG-CT-0956
+@SYMTestCaseDesc Tests that events can be changed to move them between recent lists
+@SYMTestPriority High
+@SYMTestActions Add the events to the view.Move most recent event to another recent list in reverse order
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestChangeEventRecentView2L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0956 "));
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent1);
+
+ CLogViewDuplicate* duplicate1 = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate1);
+
+ CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent2);
+
+ CLogViewDuplicate* duplicate2 = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate2);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ TBuf<KLogMaxDirectionLength> incoming;
+ aClient.GetString(incoming, R_LOG_DIR_IN);
+
+ // Missed call event
+ TBuf<KLogMaxDirectionLength> missed;
+ aClient.GetString(missed, R_LOG_DIR_MISSED);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(missed);
+ event->SetContact(1);
+
+ // Add some events
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id1 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id2 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id3 = event->Id();
+
+ User::After(1000000);
+
+ // Most recent
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id4 = event->Id();
+
+ // Check there's a recent event in the list
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id4);
+
+ // Check it has duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 3);
+ TEST2(duplicate1->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id1);
+ event->CopyL(duplicate1->Event()); // for later
+
+ // Other recent list should be empty
+ TEST(!recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+
+ // Now move latest recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should still be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 2);
+ TEST2(duplicate1->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate1->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->Event().Id(), id2);
+ event->CopyL(duplicate1->Event()); // for later
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id1);
+
+ // No duplicates yet
+ TEST(!recent2->DuplicatesL(*duplicate2, active->iStatus));
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should still be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate1->CountL(), 1);
+ TEST2(duplicate1->Event().Id(), id3);
+ event->CopyL(duplicate1->Event()); // for later
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id2);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 1);
+ TEST2(duplicate2->Event().Id(), id1);
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Most recent duplicate should still be the latest
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+ TEST2(recent1->Event().Id(), id4);
+ event->CopyL(recent1->Event()); // for later
+
+ // Should be no more duplicates
+ TEST(!recent1->DuplicatesL(*duplicate1, active->iStatus));
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id3);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 2);
+ TEST2(duplicate2->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id1);
+
+ // Now move most recent event to another recent list
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // No more recent events
+ TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+
+ // Now the event should have moved to another recent list
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 1);
+ TEST2(recent2->Event().Id(), id4);
+
+ // There should still be some duplicates
+ active->StartL();
+ TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->CountL(), 3);
+ TEST2(duplicate2->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate2->Event().Id(), id1);
+
+ CleanupStack::PopAndDestroy(6); // active, event, recent1, duplicate1, recent2, duplicate2
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0957
+@SYMTestCaseDesc Tests that change in log view after moving an event
+@SYMTestPriority High
+@SYMTestActions Check recent views are purged if necessary after moving an event
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestChangeEventRecentViewAndPurgeL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0957 "));
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent1);
+
+ CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent2);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogNullRecentList, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Get log config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Set the max recent list size to something small
+ config.iMaxRecentLogSize = 3;
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming call event
+ TBuf<KLogMaxDirectionLength> incoming;
+ aClient.GetString(incoming, R_LOG_DIR_IN);
+
+ // Missed call event
+ TBuf<KLogMaxDirectionLength> missed;
+ aClient.GetString(missed, R_LOG_DIR_MISSED);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(missed);
+
+ // Add an event
+ event->SetContact(1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id1 = event->Id();
+
+ User::After(1000000);
+ event->SetDirection(incoming);
+
+ // Add an event
+ event->SetContact(2);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id2 = event->Id();
+
+ User::After(1000000);
+
+ // Add an event
+ event->SetContact(3);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id3 = event->Id();
+
+ User::After(1000000);
+
+ // Add an event
+ event->SetContact(4);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id4 = event->Id();
+
+ // Check the views
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 3);
+
+ // Retrieve event
+ event->SetId(id1);
+ active->StartL();
+ aClient.GetEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Now move the oldest event to another recent list - it should be purged
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Missed call list now empty
+ TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+
+ // Incoming view should be unchanged
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 3);
+ TEST2(recent2->Event().Id(), id4);
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id2);
+
+ TTime now;
+ now.UniversalTime();
+
+ // This should have no effect
+ event->SetTime(now);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Incoming view should be unchanged
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 3);
+ TEST2(recent2->Event().Id(), id4);
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id2);
+
+ // Now add a new event to missed view (the latest)
+ User::After(1000000);
+ event->SetDirection(missed);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ User::After(1000000);
+ now.UniversalTime();
+
+ // This should have no effect
+ event->SetTime(now);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check the views
+ active->StartL();
+ TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent1->CountL(), 1);
+
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 3);
+
+ // Now move the latest event to another recent list - oldest should be purged
+ event->SetDirection(incoming);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+
+ active->StartL();
+ TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->CountL(), 3);
+ TEST2(recent2->Event().Id(), event->Id());
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id4);
+
+ // Check id
+ active->StartL();
+ TEST(recent2->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent2->Event().Id(), id3);
+
+ CleanupStack::PopAndDestroy(4); // active, event, recent1, recent2
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0958
+@SYMTestCaseDesc Tests for the log view,on changing an event
+@SYMTestPriority High
+@SYMTestActions Check an event can be removed from recent lists by changing it
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestChangeEventRecentViewRemoveL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0958 "));
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(recent);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Missed call event
+ TBuf<KLogMaxDirectionLength> missed;
+ aClient.GetString(missed, R_LOG_DIR_MISSED);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(missed);
+
+ // Add an event
+ event->SetContact(1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id1 = event->Id();
+
+ User::After(1000000);
+
+ // Add some duplicates
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id2 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id3 = event->Id();
+
+ User::After(1000000);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TLogId id4 = event->Id();
+
+ // Check views
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+ TEST2(recent->Event().Id(), id4);
+
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 3);
+ TEST2(duplicate->Event().Id(), id3);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->Event().Id(), id2);
+
+ // Check id
+ active->StartL();
+ TEST(duplicate->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->Event().Id(), id1);
+
+ // Fetched call event
+ TBuf<KLogMaxDirectionLength> fetched;
+ aClient.GetString(missed, R_LOG_DIR_FETCHED);
+
+ // Now change the event to remove it from recent lists
+ event->SetDirection(fetched);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check views
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+ TEST2(recent->Event().Id(), id3);
+
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 2);
+ TEST2(duplicate->Event().Id(), id2);
+ event->CopyL(duplicate->Event()); // For later
+
+ // Check id
+ active->StartL();
+ TEST(duplicate->NextL(active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->Event().Id(), id1);
+
+ // Now change the event to remove it from recent lists
+ event->SetDirection(fetched);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check views
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+ TEST2(recent->Event().Id(), id3);
+
+ active->StartL();
+ TEST(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(duplicate->CountL(), 1);
+ TEST2(duplicate->Event().Id(), id1);
+ event->CopyL(duplicate->Event()); // For later
+
+ // Now change the event to remove it from recent lists
+ event->SetDirection(fetched);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ // Check views
+ active->StartL();
+ TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(recent->CountL(), 1);
+ TEST2(recent->Event().Id(), id3);
+ event->CopyL(recent->Event()); // For later
+
+ // No more duplicates
+ TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
+
+ // Now change the event to remove it from recent lists
+ event->SetDirection(fetched);
+ active->StartL();
+ aClient.ChangeEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TEST(!recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
+
+ CleanupStack::PopAndDestroy(4); // active, event, recent, duplicate
+ }
+
+CBaBackupSessionWrapper* theBackup = NULL;
+
+LOCAL_C TBool IsLogOpenL()
+ {
+ return TestUtils::IsDatabaseOpenL();
+ }
+
+LOCAL_C void TestLogOpenL()
+ {
+ test(IsLogOpenL());
+ }
+
+LOCAL_C void TestLogClosedL()
+ {
+ test(!IsLogOpenL());
+ }
+
+LOCAL_C void StartBackupL()
+ {
+ User::InfoPrint(_L("Backup"));
+
+ TDriveUnit driveUnit(EDriveC);
+ TDriveName name = driveUnit.Name();
+
+ TParse parse;
+ LEAVE_IF_ERROR(parse.Set(KLogDatabaseName, &name, NULL));
+
+ delete theBackup;
+ theBackup = NULL;
+ theBackup = CBaBackupSessionWrapper::NewL();
+
+ theBackup->CloseFileL(parse.FullName(), MBackupObserver::EReleaseLockNoAccess);
+ User::After(1000000);
+ }
+
+LOCAL_C void EndBackupL()
+ {
+ delete theBackup;
+ theBackup = NULL;
+ User::After(1000000);
+ }
+
+LOCAL_C void DelayL(TInt aDelay)
+ {
+ CTestTimer* timer = CTestTimer::NewL();
+ timer->After(aDelay);
+ CActiveScheduler::Start();
+ delete timer;
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0959
+@SYMTestCaseDesc Tests for log view change observer
+ Test change stuff with backup
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when clearing duplicates even after backup
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents1aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0959 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ // Add a new event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ DelayL(1000000);
+ TestLogOpenL();
+
+ test(changeObs2->Changes().Count() == 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ test(type == ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ test(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+ test(duplicate->CountL() == 1);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ User::After(100000);
+ test(changeObs1->Changes().Count() == 1);
+ type = changeObs1->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventAdded);
+
+ CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+Check that a view doesn't get change events when recent list purged
+
+@SYMTestCaseID SYSLIB-LOGENG-CT-0960
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list purged,even after backup
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents2aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0960 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Get config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == config.iMaxRecentLogSize);
+
+ // Add a new event, will cause one to be purged from recent view
+ event->SetContact(1234);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+ DelayL(1000000);
+
+ test(changeObs2->Changes().Count() == 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ test(type == ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == config.iMaxRecentLogSize);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ test(!recent->DuplicatesL(*duplicate, active->iStatus));
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ User::After(100000);
+ test(changeObs1->Changes().Count() == 1);
+ type = changeObs1->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventAdded);
+
+ CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+Check that a view doesn't get change events when recent list purged after changing config
+
+@SYMTestCaseID SYSLIB-LOGENG-CT-0961
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list purged after changing config,even after backup
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents3aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0961 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Get and set config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ config.iMaxRecentLogSize = 2;
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == config.iMaxRecentLogSize);
+
+ // Change config, will cause one event to be purged from recent view
+ config.iMaxRecentLogSize = 1;
+ active->StartL();
+ aClient.ChangeConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+ DelayL(1000000);
+
+ // Check change events
+ User::After(100000);
+ test(changeObs2->Changes().Count() == 1);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventDeleted);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == config.iMaxRecentLogSize);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ test(!recent->DuplicatesL(*duplicate, active->iStatus));
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ User::After(100000);
+ test(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+Check that when deleting an event causing recent lists to be updated, views don't get unnecessary change events
+
+@SYMTestCaseID SYSLIB-LOGENG-CT-0962
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that when deleting an event causing recent lists to be updated,views don't get unnecessary change events.
+ Check the test work even after backup operations
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents4aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0962 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ filter->SetFlags(1); // Need to hide an event from the view
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ event->SetFlags(1);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ event->ClearFlags(0xF);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(view->CountL() == 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ changeObs1->StartCollectingChanges();
+ changeObs2->StartCollectingChanges();
+
+ // Delete the event in recent list
+ active->StartL();
+ aClient.DeleteEvent(event->Id(), active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ test(changeObs2->Changes().Count() == 2);
+ type = changeObs2->Changes().At(0, logId, viewIndex);
+ test(type == ELogChangeTypeEventAdded);
+ type = changeObs2->Changes().At(1, logId, viewIndex);
+ test(type == ELogChangeTypeEventDeleted);
+
+ test(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(7, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0963
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when recent list cleared
+ Check the test work even after backup operations
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents5aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0963 "));
+ TLogId logId;
+ TInt viewIndex;
+ TLogDatabaseChangeType type;
+
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Get config
+ TLogConfig config;
+ active->StartL();
+ aClient.GetConfig(config, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add max allowed events
+ TInt count = config.iMaxRecentLogSize;
+ while(count--)
+ {
+ event->SetContact(count+1);
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ }
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == config.iMaxRecentLogSize);
+
+ // Clear recent view
+ active->StartL();
+ aClient.ClearLog(KLogRecentIncomingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ count = config.iMaxRecentLogSize;
+ test(changeObs2->Changes().Count() == count);
+ while(count--)
+ {
+ type = changeObs2->Changes().At(count, logId, viewIndex);
+ test(type == ELogChangeTypeEventDeleted);
+ }
+
+ // Check recent view
+ test(!recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ User::After(100000);
+ test(!changeObs1->HaveChanges());
+
+ CleanupStack::PopAndDestroy(7, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0964
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when removing events from a recent or duplicate view
+ Check the test work even after backup operations
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents6aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0964 "));
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Add a duplicate
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(view->CountL() == 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ test(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ // Remove duplicate
+ duplicate->RemoveL(duplicate->Event().Id());
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ test(!changeObs1->HaveChanges());
+ test(!changeObs2->HaveChanges());
+
+ // Remove recent
+ recent->RemoveL(recent->Event().Id());
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ test(!changeObs1->HaveChanges());
+ test(!changeObs2->HaveChanges()); // No event because we should know we called Remove on ourselves
+
+ CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-0965
+@SYMTestCaseDesc Tests for log view change observer
+@SYMTestPriority High
+@SYMTestActions Check that a view doesn't get change events when clearing duplicates
+ Check the test work even after backup operations
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+LOCAL_C void TestHiddenChangeEvents7aL(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0965 "));
+ CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
+ changeObs1->StartCollectingChanges();
+
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
+ CleanupStack::PushL(view);
+
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ TTime now;
+ now.UniversalTime();
+ now += (TTimeIntervalDays)+1;
+
+ // Get rid of all the events in the log
+ active->StartL();
+ aClient.ClearLog(now, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus.Int() == KErrNone);
+
+ // Incoming call event
+ event->SetEventType(KLogCallEventTypeUid);
+ TBuf<KLogMaxDirectionLength> buf;
+ aClient.GetString(buf, R_LOG_DIR_IN);
+ event->SetDirection(buf);
+
+ // Add an event
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Add a duplicate
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+
+ // Setup normal event view
+ active->StartL();
+ test(view->SetFilterL(*filter, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(view->CountL() == 2);
+
+ CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
+ changeObs2->StartCollectingChanges();
+
+ CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
+ CleanupStack::PushL(recent);
+
+ // Check recent view
+ active->StartL();
+ test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Check duplicate count
+ active->StartL();
+ test(recent->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ test(active->iStatus == KErrNone);
+ test(recent->CountL() == 1);
+
+ // Remove duplicate
+ recent->ClearDuplicatesL();
+
+ // Check that changes work after a backup
+ StartBackupL();
+ DelayL(1000000);
+ TestLogClosedL();
+ EndBackupL();
+ TestLogOpenL();
+
+ // Check change events
+ test(!changeObs1->HaveChanges());
+ test(!changeObs2->HaveChanges());
+
+ CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-3511
+@SYMTestCaseDesc Tests an error condition for adding an event.
+@SYMTestPriority High
+@SYMTestActions A leave will be caused in an observer when a specific event is added. This test
+ ensures by successful test completion that there are no panics in this
+ situation.
+@SYMTestExpectedResults Test must not fail
+@SYMDEF DEF108741
+*/
+LOCAL_C void DEF108741L(CLogClient& aClient)
+ {
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3511 "));
+ // Perform clean up
+ TestUtils::DeleteDatabaseL();
+
+ // Create a new event
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+ event->SetEventType(KLogCallEventTypeUid);
+
+ CTestActive* active = new(ELeave) CTestActive();
+ CleanupStack::PushL(active);
+
+ // Create a change observer. This observer will cause errors in order to verify that
+ // the system handles them properly.
+ CLogViewChangeObserverErrorTest* changeObs = CLogViewChangeObserverErrorTest::NewLC();
+
+ // Create a view for the event log
+ CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs);
+ CleanupStack::PushL(view);
+
+ // Create a filter to specify what events appear in the view
+ CLogFilter* filter = CLogFilter::NewL();
+ CleanupStack::PushL(filter);
+ TEST(!view->SetFilterL(*filter, active->iStatus));
+
+ TInt count;
+ TLogId logId;
+ TInt viewIndex;
+
+ // This code adds 3 events with ids 0,1 and 2.
+ // The observer add event handler :
+ // CLogViewChangeObserverErrorTest::HandleLogViewChangeEventAddedL
+ // has been written so that it will leave if an event with log id 1 is added.
+ // The test completion proves that the leave is dealt with gracefully without
+ // any panics.
+ for(count = 0; count < KTestErrorEventNum; count++)
+ {
+ // Add an event to the log database
+ aClient.AddEvent(*event, changeObs->iStatus);
+ CLogChangeDefinition* changes = changeObs->WaitForChangesLC(CLogViewChangeObserver::EStopOnBoth);
+
+ // Check the results/notifications are as expected
+ TEST2(changeObs->iStatus.Int(), KErrNone);
+ TEST(event->Id() == (TLogId) count);
+ User::After(1);
+ TEST2(changes->Count(), 1);
+ TEST2(changes->At(0, logId, viewIndex), ELogChangeTypeEventAdded);
+ TEST(logId == (TLogId) count);
+ TEST2(viewIndex, 0);
+ CleanupStack::PopAndDestroy(changes);
+ }
+
+ CleanupStack::PopAndDestroy(5, event); // filter, view, changeObs, active, event
+ }
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-3716
+@SYMTestCaseDesc Tests for the defect INC108225
+@SYMTestPriority High
+@SYMTestActions Tests for the count of out call list & the duplicates for CS & PS calls
+ The fields to be considered while finding duplicates records are set in the resource file named LOGWRAP.RSS
+ i.e. duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+ Considering this duplicate value, the where clause in the query is made to find duplicate records.
+@SYMTestExpectedResults Test must not fail
+@SYMDEF INC108225
+*/
+LOCAL_C void TestNumberFieldINC108225L(CLogClient& aClient)
+{
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3716 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CLogEvent* event1 = CLogEvent::NewL();
+ CleanupStack::PushL(event1);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogRecentOutgoingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TLogString buf1;
+ aClient.GetString(buf1, R_LOG_DIR_OUT);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf1);
+ event->SetDurationType(KLogDurationNone);
+ event->SetContact(KTestContact1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetNumber(KTestNumber1);
+
+ // Add event 1st CS Call with contact as KTestContact & number as KTestNumber1
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TBool res = view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Set new event with the same contact details (i.e. KTestContact) and
+ //...event type as KLogCallEventTypeUid & no number field
+ event1->SetEventType(KLogCallEventTypeUid);
+ event1->SetDirection(buf1);
+ event1->SetDurationType(KLogDurationNone);
+ event1->SetContact(KTestContact1);
+ event1->SetRemoteParty(KTestRemote1);
+
+ // Add event 1st PS Call with contact as KTestContact1 & Number as Null
+ active->StartL();
+ aClient.AddEvent(*event1, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Add event 2nd CS Call
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Check duplicate count for the last call made i.e. CS call
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 1);
+
+ // Add event 2nd PS Call
+ active->StartL();
+ aClient.AddEvent(*event1, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Check duplicate count for the last call made i.e. PS call
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 1);
+
+ // Add event 3rd CS Call
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Check duplicate count for the last call made i.e. CS call
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 2);
+
+ // Add event 3rd PS Call
+ active->StartL();
+ aClient.AddEvent(*event1, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 2);
+
+ // Check duplicate count for the last call made i.e. PS call
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 2);
+
+ CleanupStack::PopAndDestroy(5);
+}
+
+/**
+@SYMTestCaseID SYSLIB-LOGENG-CT-3755
+@SYMTestCaseDesc Tests for the changes made in defect INC108225 for other fields
+@SYMTestPriority High
+@SYMTestActions Tests for the count of out call list & the duplicates for CS calls referring other fields
+ The fields to be considered while finding duplicates records are set in the resource file named LOGWRAP.RSS
+ i.e. duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+ Considering this duplicate value, the where clause in the query is made to find duplicate records.
+@SYMTestExpectedResults Test must not fail
+@SYMDEF INC108225
+*/
+LOCAL_C void TestOtherFieldsINC108225L(CLogClient& aClient)
+{
+ test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3755 "));
+ CLogEvent* event = CLogEvent::NewL();
+ CleanupStack::PushL(event);
+
+ CTestActive* active = new(ELeave)CTestActive();
+ CleanupStack::PushL(active);
+
+ CLogViewRecent* view = CLogViewRecent::NewL(aClient);
+ CleanupStack::PushL(view);
+
+ CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
+ CleanupStack::PushL(duplicate);
+
+ // Make sure there are no entries in any recent lists
+ active->StartL();
+ aClient.ClearLog(KLogRecentOutgoingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ TLogString buf1;
+ aClient.GetString(buf1, R_LOG_DIR_OUT);
+
+ event->SetEventType(KLogCallEventTypeUid);
+ event->SetDirection(buf1);
+ event->SetContact(KTestContact1);
+ event->SetRemoteParty(KTestRemote1);
+ event->SetNumber(KTestNumber1);
+ event->SetDurationType(KLogDurationNone);
+
+ // Add event 1st CS Call with contact as KTestContact & number as KTestNumber1 &
+ //.. durationtype as KLogDurationNone
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TBool res = view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Add event 2nd CS Call with duration type as KLogDurationValid
+ event->SetDurationType(KLogDurationValid);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count for the last call made
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 1);
+
+ // Add event 3rd CS Call with Flag as KLogNullFlags
+ event->SetFlags(KLogNullFlags);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count for the last call made
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 2);
+
+ // Add event 4th CS Call with Flag as KLogFlagsMask
+ event->SetFlags(KLogFlagsMask);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count for the last call made
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 3);
+
+ // Add event 5th CS Call with Status as KNullDesC
+ event->SetStatus(KNullDesC);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count for the last call made
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 4);
+
+ // Add event 6th CS Call with Status as KTestStatus1
+ event->SetStatus(KTestStatus1);
+
+ active->StartL();
+ aClient.AddEvent(*event, active->iStatus);
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+
+ active->StartL();
+ TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(active->iStatus.Int(), KErrNone);
+ TEST2(view->CountL(), 1);
+
+ // Check duplicate count for the last call made
+ active->StartL();
+ TEST(view->DuplicatesL(*duplicate, active->iStatus));
+ CActiveScheduler::Start();
+ TEST2(duplicate->CountL(), 5);
+
+ CleanupStack::PopAndDestroy(4);
+}
+
+void doTestsL()
+ {
+ TestUtils::Initialize(_L("T_LOGVIEW2"));
+ TestUtils::DeleteDatabaseL();
+
+ CLogClient* client = CLogClient::NewL(theFs);
+ CleanupStack::PushL(client);
+
+ CLogChangeNotifier* notifier = CLogChangeNotifier::NewL();
+ CleanupStack::PushL(notifier);
+
+ test.Start(_L("Event View With Filter List"));
+ TestEventViewWithFilterListL(*client);
+ theLog.Write(_L8("Test 1 OK\n"));
+
+ test.Next(_L("View change observer"));
+ TestViewChangeEventsL(*client);
+ theLog.Write(_L8("Test 2 OK\n"));
+
+ test.Next(_L("Recent View With Filter"));
+ TestRecentViewWithFilterL(*client);
+ theLog.Write(_L8("Test 3 OK\n"));
+
+ test.Next(_L("Recent View With Filter List"));
+ TestRecentViewWithFilterListL(*client);
+ theLog.Write(_L8("Test 4 OK\n"));
+
+ test.Next(_L("Duplicate View With Filter"));
+ TestDuplicateViewWithFilterL(*client);
+ theLog.Write(_L8("Test 5 OK\n"));
+
+ test.Next(_L("Duplicate View With Filter List"));
+ TestDuplicateViewWithFilterListL(*client);
+ theLog.Write(_L8("Test 6 OK\n"));
+
+ test.Next(_L("Querying Event View For Null Fields"));
+ TestEventViewForNullFieldsL(*client);
+ theLog.Write(_L8("Test 7 OK\n"));
+
+ test.Next(_L("Querying Recent View For Null Fields"));
+ TestRecentViewForNullFieldsL(*client);
+ theLog.Write(_L8("Test 8 OK\n"));
+
+ test.Next(_L("Querying Duplicate View For Null Fields"));
+ TestDuplicateViewForNullFieldsL(*client);
+ theLog.Write(_L8("Test 9 OK\n"));
+
+ test.Next(_L("Querying Event View For Flags"));
+ TestEventViewForFlagsL(*client);
+ theLog.Write(_L8("Test 10 OK\n"));
+
+ test.Next(_L("Querying Recent View For Flags"));
+ TestRecentViewForFlagsL(*client);
+ theLog.Write(_L8("Test 11 OK\n"));
+
+ test.Next(_L("Querying Duplicate View For Flags"));
+ TestDuplicateViewForFlagsL(*client);
+ theLog.Write(_L8("Test 12 OK\n"));
+
+ test.Next(_L("Removing Recent Events"));
+ TestRemovingRecentEventsL(*client);
+ theLog.Write(_L8("Test 13 OK\n"));
+
+ test.Next(_L("Removing Duplicate Events"));
+ TestRemovingDuplicateEventsL(*client);
+ theLog.Write(_L8("Test 14 OK\n"));
+
+ test.Next(_L("Multiple Views"));
+ TestMultipleViews1L(*client);
+ TestMultipleViews2L(*client);
+ theLog.Write(_L8("Test 15 OK\n"));
+
+ test.Next(_L("Test _ALT Events In Recent List"));
+ TestAltEventsInRecentListL(*client);
+ theLog.Write(_L8("Test 16 OK\n"));
+
+ test.Next(_L("Test filtering Events by time"));
+ // This TEST sets system's 'Home Time'
+ TestFilterByTimeL(*client);
+ theLog.Write(_L8("Test 17 OK\n"));
+
+ test.Next(_L("Test hidden change events"));
+ TestUtils::DeleteDatabaseL();
+ TestHiddenChangeEvents1L(*client);
+ TestHiddenChangeEvents1aL(*client);
+ TestHiddenChangeEvents2L(*client);
+ TestHiddenChangeEvents2aL(*client);
+ TestHiddenChangeEvents3L(*client);
+ TestHiddenChangeEvents3aL(*client);
+ TestHiddenChangeEvents4L(*client);
+ TestHiddenChangeEvents4aL(*client);
+ TestHiddenChangeEvents5L(*client);
+ TestHiddenChangeEvents5aL(*client);
+ TestHiddenChangeEvents6L(*client);
+ TestHiddenChangeEvents6aL(*client);
+ TestHiddenChangeEvents7L(*client);
+ TestHiddenChangeEvents7aL(*client);
+ theLog.Write(_L8("Test 18 OK\n"));
+
+ test.Next(_L("Changing events and recent views"));
+ TestChangeEventRecentView1L(*client);
+ TestChangeEventRecentView2L(*client);
+ TestChangeEventRecentViewAndPurgeL(*client);
+ TestChangeEventRecentViewRemoveL(*client);
+ theLog.Write(_L8("Test 19 OK\n"));
+
+ test.Next(_L("Test for DEF066296"));
+ DEF066296L(*client);
+ test.Next(_L("Test for DEF087459"));
+ DEF087459L(*client);
+ theLog.Write(_L8("Test 20 OK\n"));
+
+ test.Next(_L("Event View With Filter List containing StartTime and EndTime"));
+ TestEventViewWithTimestampsInFilterListL(*client);
+ theLog.Write(_L8("Test 21 OK\n"));
+
+ test.Next(_L("Test for DEF108741 - View change observer, error condition"));
+ DEF108741L(*client);
+ theLog.Write(_L8("Test 22 OK\n"));
+
+ test.Next(_L("Test Defect INC108225: Call history check for the CS & PS(VOIP) calls "));
+ TestNumberFieldINC108225L(*client);
+ TestOtherFieldsINC108225L(*client);
+ theLog.Write(_L8("Test 23 OK\n"));
+
+ CleanupStack::PopAndDestroy(2); // client, notifier
+ }