loggingservices/eventlogger/test/src/t_logview1.cpp
branchRCL_3
changeset 9 667e88a979d7
parent 6 5ffdb8f2067f
equal deleted inserted replaced
8:fa9941cf3867 9:667e88a979d7
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    20 //
    20 //
    21 
    21 
    22 #include <s32file.h>
    22 #include <s32file.h>
    23 #include <s32mem.h>
    23 #include <s32mem.h>
    24 #include <e32math.h>
    24 #include <e32math.h>
    25 
    25 #include "t_logutil2.h"
    26 #include "TEST.H"
       
    27 #include <logview.h>
    26 #include <logview.h>
    28 
    27 
    29 #undef test  //there is a "test" macro which hides "RTest test" declaration.
       
    30 
       
    31 #define UNUSED_VAR(a) a = a
    28 #define UNUSED_VAR(a) a = a
    32 
    29 
    33 RTest test(_L("Log View Test Harness Number 1"));
    30 RTest TheTest(_L("t_logview1"));
    34 
    31 
    35 const TInt KTestLogNumberCharsToMatch = 9; // should be the same as KLogNumberCharsToMatch defined in LogServ\src\LOGFILTQ.CPP
    32 const TInt KTestLogNumberCharsToMatch = 9; // should be the same as KLogNumberCharsToMatch defined in LogServ\src\LOGFILTQ.CPP
    36 const TInt KTestEventNum = 10;
    33 const TInt KTestEventNum = 10;
    37 const TUid KTestEventUid = {0x10005393};
    34 const TUid KTestEventUid = {0x10005393};
    38 const TLogDurationType KTestDurationType = 0x12;
    35 const TLogDurationType KTestDurationType = 0x12;
   105 @SYMTestExpectedResults Test must not fail
   102 @SYMTestExpectedResults Test must not fail
   106 @SYMREQ                 REQ0000
   103 @SYMREQ                 REQ0000
   107 */
   104 */
   108 LOCAL_C void TestEventViewL(CLogClient& aClient)
   105 LOCAL_C void TestEventViewL(CLogClient& aClient)
   109 	{
   106 	{
   110 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0851 "));
   107 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0851 "));
   111 	CLogEvent* event = CLogEvent::NewL();
   108 	CLogEvent* event = CLogEvent::NewL();
   112 	CleanupStack::PushL(event);
   109 	CleanupStack::PushL(event);
   113 	event->SetEventType(KLogCallEventTypeUid);
   110 	event->SetEventType(KLogCallEventTypeUid);
   114 
   111 
   115 	CTestActive* active = new(ELeave)CTestActive();
   112 	CTestActive* active = new(ELeave)CTestActive();
   163 
   160 
   164 		TEST2(view->CountL(), KTestEventNum);
   161 		TEST2(view->CountL(), KTestEventNum);
   165 		TLogId id = ++count;
   162 		TLogId id = ++count;
   166 		TEST2(view->Event().Id(), id);
   163 		TEST2(view->Event().Id(), id);
   167 		}
   164 		}
   168 	TEST(count == KTestEventNum - 1);
   165 	TEST2(count, KTestEventNum - 1);
   169 
   166 
   170 	active->StartL();
   167 	active->StartL();
   171 	res = view->FirstL(active->iStatus);
   168 	res = view->FirstL(active->iStatus);
   172 	TEST(res);
   169 	TEST(res);
   173 	CActiveScheduler::Start();
   170 	CActiveScheduler::Start();
   222 @SYMTestExpectedResults Test must not fail
   219 @SYMTestExpectedResults Test must not fail
   223 @SYMREQ                 REQ0000
   220 @SYMREQ                 REQ0000
   224 */
   221 */
   225 LOCAL_C void TestViewFilterL(CLogClient& aClient, CLogFilter& aFilter)
   222 LOCAL_C void TestViewFilterL(CLogClient& aClient, CLogFilter& aFilter)
   226 	{
   223 	{
   227 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0852 "));
   224 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0852 "));
   228 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
   225 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
   229 	CleanupStack::PushL(view);
   226 	CleanupStack::PushL(view);
   230 
   227 
   231 	CLogEvent* event = CLogEvent::NewL();
   228 	CLogEvent* event = CLogEvent::NewL();
   232 	CleanupStack::PushL(event);
   229 	CleanupStack::PushL(event);
   260 	TEST(res);
   257 	TEST(res);
   261 	active->StartL();
   258 	active->StartL();
   262 	CActiveScheduler::Start();
   259 	CActiveScheduler::Start();
   263 	TEST2(active->iStatus.Int(), KErrNone);
   260 	TEST2(active->iStatus.Int(), KErrNone);
   264 
   261 
   265 	TEST(view->CountL() == total + 1);
   262 	TEST2(view->CountL(), total + 1);
   266 
   263 
   267 	TEST(event->EventType() == KTestEventUid);
   264 	TEST2(event->EventType().iUid, KTestEventUid.iUid);
   268 	TEST(event->RemoteParty() == aFilter.RemoteParty());
   265 	TEST(event->RemoteParty() == aFilter.RemoteParty());
   269 	TEST(event->Direction() == aFilter.Direction());
   266 	TEST(event->Direction() == aFilter.Direction());
   270 	TEST(event->DurationType() == aFilter.DurationType());
   267 	TEST2(event->DurationType(), aFilter.DurationType());
   271 	TEST(event->Status() == aFilter.Status());
   268 	TEST(event->Status() == aFilter.Status());
   272 	TEST(event->Contact() == aFilter.Contact());
   269 	TEST2(event->Contact(), aFilter.Contact());
   273 	TEST(event->Number() == aFilter.Number());
   270 	TEST(event->Number() == aFilter.Number());
   274 
   271 
   275 	TTime now;
   272 	TTime now;
   276 	now.UniversalTime();
   273 	now.UniversalTime();
   277 
   274 
   287 		TEST2(active->iStatus.Int(), KErrNone);
   284 		TEST2(active->iStatus.Int(), KErrNone);
   288 
   285 
   289 		TEST(now >= event->Time());
   286 		TEST(now >= event->Time());
   290 
   287 
   291 		if (aFilter.EventType() != KNullUid)
   288 		if (aFilter.EventType() != KNullUid)
   292 			TEST(event->EventType() == aFilter.EventType());
   289 			TEST2(event->EventType().iUid, aFilter.EventType().iUid);
   293 
   290 
   294 		if (aFilter.RemoteParty().Length() > 0)
   291 		if (aFilter.RemoteParty().Length() > 0)
   295 			TEST(event->RemoteParty() == aFilter.RemoteParty());
   292 			TEST(event->RemoteParty() == aFilter.RemoteParty());
   296 
   293 
   297 		if (aFilter.Direction().Length() > 0)
   294 		if (aFilter.Direction().Length() > 0)
   298 			TEST(event->Direction() == aFilter.Direction());
   295 			TEST(event->Direction() == aFilter.Direction());
   299 
   296 
   300 		if (aFilter.DurationType() != KLogNullDurationType)
   297 		if (aFilter.DurationType() != KLogNullDurationType)
   301 			TEST(event->DurationType() == aFilter.DurationType());
   298 			TEST2(event->DurationType(), aFilter.DurationType());
   302 
   299 
   303 		if (aFilter.Status().Length() > 0)
   300 		if (aFilter.Status().Length() > 0)
   304 			TEST(event->Status() == aFilter.Status());
   301 			TEST(event->Status() == aFilter.Status());
   305 
   302 
   306 		if (aFilter.Contact() > KLogNullContactId)
   303 		if (aFilter.Contact() > KLogNullContactId)
   307 			TEST(event->Contact() == aFilter.Contact());
   304 			TEST2(event->Contact(), aFilter.Contact());
   308 
   305 
   309 		if (aFilter.Number().Length() > 0)
   306 		if (aFilter.Number().Length() > 0)
   310 			TEST(event->Number() == aFilter.Number());
   307 			TEST(event->Number() == aFilter.Number());
   311 		}
   308 		}
   312 
   309 
   313 	TEST(count == total + 1);
   310 	TEST2(count, total + 1);
   314 
   311 
   315 	CleanupStack::PopAndDestroy(3); // active, event, view;
   312 	CleanupStack::PopAndDestroy(3); // active, event, view;
   316 	}
   313 	}
   317 
   314 
   318 /**
   315 /**
   323 @SYMTestExpectedResults Test must not fail
   320 @SYMTestExpectedResults Test must not fail
   324 @SYMREQ                 REQ0000
   321 @SYMREQ                 REQ0000
   325 */
   322 */
   326 LOCAL_C void TestEventViewFilter1L(CLogClient& aClient)
   323 LOCAL_C void TestEventViewFilter1L(CLogClient& aClient)
   327 	{
   324 	{
   328 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0853 "));
   325 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0853 "));
   329 	CTestActive* active = new(ELeave)CTestActive();
   326 	CTestActive* active = new(ELeave)CTestActive();
   330 	CleanupStack::PushL(active);
   327 	CleanupStack::PushL(active);
   331 
   328 
   332 	// Create a test event type
   329 	// Create a test event type
   333 	CLogEventType* type = CLogEventType::NewL();
   330 	CLogEventType* type = CLogEventType::NewL();
   531 @SYMTestExpectedResults Test must not fail
   528 @SYMTestExpectedResults Test must not fail
   532 @SYMREQ                 REQ0000
   529 @SYMREQ                 REQ0000
   533 */
   530 */
   534 LOCAL_C void TestEventViewFilter2L(CLogClient& aClient)
   531 LOCAL_C void TestEventViewFilter2L(CLogClient& aClient)
   535 	{
   532 	{
   536 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0854 "));
   533 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0854 "));
   537 	CTestActive* active = new(ELeave)CTestActive();
   534 	CTestActive* active = new(ELeave)CTestActive();
   538 	CleanupStack::PushL(active);
   535 	CleanupStack::PushL(active);
   539 
   536 
   540 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
   537 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
   541 	CleanupStack::PushL(view);
   538 	CleanupStack::PushL(view);
   678 	TEST(res);
   675 	TEST(res);
   679 	CActiveScheduler::Start();
   676 	CActiveScheduler::Start();
   680 	TEST2(active->iStatus.Int(), KErrNone);
   677 	TEST2(active->iStatus.Int(), KErrNone);
   681 
   678 
   682 	// Check the count is correct
   679 	// Check the count is correct
   683 	TEST(view->CountL() == total + 4);
   680 	TEST2(view->CountL(), total + 4);
   684 
   681 
   685 	filter->SetEventType(KLogCallEventTypeUid);
   682 	filter->SetEventType(KLogCallEventTypeUid);
   686 
   683 
   687 	// Get view of call events
   684 	// Get view of call events
   688 	active->StartL();
   685 	active->StartL();
   689 	res = view->SetFilterL(*filter, active->iStatus);
   686 	res = view->SetFilterL(*filter, active->iStatus);
   690 	TEST(res);
   687 	TEST(res);
   691 	CActiveScheduler::Start();
   688 	CActiveScheduler::Start();
   692 	TEST2(active->iStatus.Int(), KErrNone);
   689 	TEST2(active->iStatus.Int(), KErrNone);
   693 
   690 
   694 	TEST(view->CountL() == calls + 2);
   691 	TEST2(view->CountL(), calls + 2);
   695 
   692 
   696 	filter->SetEventType(KLogDataEventTypeUid);
   693 	filter->SetEventType(KLogDataEventTypeUid);
   697 
   694 
   698 	// Get view of data events
   695 	// Get view of data events
   699 	active->StartL();
   696 	active->StartL();
   700 	res = view->SetFilterL(*filter, active->iStatus);
   697 	res = view->SetFilterL(*filter, active->iStatus);
   701 	TEST(res);
   698 	TEST(res);
   702 	CActiveScheduler::Start();
   699 	CActiveScheduler::Start();
   703 	TEST2(active->iStatus.Int(), KErrNone);
   700 	TEST2(active->iStatus.Int(), KErrNone);
   704 
   701 
   705 	TEST(view->CountL() == data + 2);
   702 	TEST2(view->CountL(), data + 2);
   706 
   703 
   707 	filter->SetEventType(KLogFaxEventTypeUid);
   704 	filter->SetEventType(KLogFaxEventTypeUid);
   708 
   705 
   709 	// Get view of fax events
   706 	// Get view of fax events
   710 	if (view->SetFilterL(*filter, active->iStatus))
   707 	if (view->SetFilterL(*filter, active->iStatus))
   787 @SYMTestExpectedResults Test must not fail
   784 @SYMTestExpectedResults Test must not fail
   788 @SYMREQ                 REQ0000
   785 @SYMREQ                 REQ0000
   789 */
   786 */
   790 LOCAL_C void TestRecentView1L(CLogClient& aClient)
   787 LOCAL_C void TestRecentView1L(CLogClient& aClient)
   791 	{
   788 	{
   792 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0855 "));
   789 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0855 "));
   793 	CLogEvent* event = CLogEvent::NewL();
   790 	CLogEvent* event = CLogEvent::NewL();
   794 	CleanupStack::PushL(event);
   791 	CleanupStack::PushL(event);
   795 
   792 
   796 	CTestActive* active = new(ELeave)CTestActive();
   793 	CTestActive* active = new(ELeave)CTestActive();
   797 	CleanupStack::PushL(active);
   794 	CleanupStack::PushL(active);
   845 
   842 
   846 		TEST2(view->CountL(), KTestEventNum);
   843 		TEST2(view->CountL(), KTestEventNum);
   847 		TEST2(view->RecentList(), KLogRecentIncomingCalls);
   844 		TEST2(view->RecentList(), KLogRecentIncomingCalls);
   848 		count++;
   845 		count++;
   849 		}
   846 		}
   850 	TEST(count == KTestEventNum - 1);
   847 	TEST2(count, KTestEventNum - 1);
   851 
   848 
   852 	active->StartL();
   849 	active->StartL();
   853 	res = view->FirstL(active->iStatus);
   850 	res = view->FirstL(active->iStatus);
   854 	TEST(res);
   851 	TEST(res);
   855 	CActiveScheduler::Start();
   852 	CActiveScheduler::Start();
   923 
   920 
   924 		TEST2(view->CountL(), KTestEventNum);
   921 		TEST2(view->CountL(), KTestEventNum);
   925 		TEST2(view->RecentList(), KLogRecentOutgoingCalls);
   922 		TEST2(view->RecentList(), KLogRecentOutgoingCalls);
   926 		count++;
   923 		count++;
   927 		}
   924 		}
   928 	TEST(count == KTestEventNum - 1);
   925 	TEST2(count, KTestEventNum - 1);
   929 
   926 
   930 	active->StartL();
   927 	active->StartL();
   931 	res = view->FirstL(active->iStatus);
   928 	res = view->FirstL(active->iStatus);
   932 	TEST(res);
   929 	TEST(res);
   933 	CActiveScheduler::Start();
   930 	CActiveScheduler::Start();
   988 
   985 
   989 		TEST2(view->CountL(), KTestEventNum);
   986 		TEST2(view->CountL(), KTestEventNum);
   990 		TEST2(view->RecentList(), KLogRecentMissedCalls);
   987 		TEST2(view->RecentList(), KLogRecentMissedCalls);
   991 		count++;
   988 		count++;
   992 		}
   989 		}
   993 	TEST(count == KTestEventNum - 1);
   990 	TEST2(count, KTestEventNum - 1);
   994 
   991 
   995 	active->StartL();
   992 	active->StartL();
   996 	res = view->FirstL(active->iStatus);
   993 	res = view->FirstL(active->iStatus);
   997 	TEST(res);
   994 	TEST(res);
   998 	CActiveScheduler::Start();
   995 	CActiveScheduler::Start();
  1015 	do	{
  1012 	do	{
  1016 		active->StartL();
  1013 		active->StartL();
  1017 		CActiveScheduler::Start();
  1014 		CActiveScheduler::Start();
  1018 		TEST2(active->iStatus.Int(), KErrNone);
  1015 		TEST2(active->iStatus.Int(), KErrNone);
  1019 
  1016 
  1020 		TEST(view->CountL() == KTestEventNum * 3);
  1017 		TEST2(view->CountL(), KTestEventNum * 3);
  1021 		count--;
  1018 		count--;
  1022 		}
  1019 		}
  1023 	while(view->NextL(active->iStatus));
  1020 	while(view->NextL(active->iStatus));
  1024 	TEST2(count, 0);
  1021 	TEST2(count, 0);
  1025 
  1022 
  1028 		{
  1025 		{
  1029 		active->StartL();
  1026 		active->StartL();
  1030 		CActiveScheduler::Start();
  1027 		CActiveScheduler::Start();
  1031 		TEST2(active->iStatus.Int(), KErrNone);
  1028 		TEST2(active->iStatus.Int(), KErrNone);
  1032 
  1029 
  1033 		TEST(view->CountL() == KTestEventNum * 3);
  1030 		TEST2(view->CountL(), KTestEventNum * 3);
  1034 		count++;
  1031 		count++;
  1035 		}
  1032 		}
  1036 	TEST(count == KTestEventNum * 3 - 1);
  1033 	TEST2(count, KTestEventNum * 3 - 1);
  1037 
  1034 
  1038 	active->StartL();
  1035 	active->StartL();
  1039 	res = view->FirstL(active->iStatus);
  1036 	res = view->FirstL(active->iStatus);
  1040 	TEST(res);
  1037 	TEST(res);
  1041 	CActiveScheduler::Start();
  1038 	CActiveScheduler::Start();
  1059 @SYMTestExpectedResults Test must not fail
  1056 @SYMTestExpectedResults Test must not fail
  1060 @SYMREQ                 REQ0000
  1057 @SYMREQ                 REQ0000
  1061 */
  1058 */
  1062 LOCAL_C void TestRecentView2L(CLogClient& aClient)
  1059 LOCAL_C void TestRecentView2L(CLogClient& aClient)
  1063 	{
  1060 	{
  1064 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0856 "));
  1061 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0856 "));
  1065 	TInt count;
  1062 	TInt count;
  1066 
  1063 
  1067 	CLogEvent* event = CLogEvent::NewL();
  1064 	CLogEvent* event = CLogEvent::NewL();
  1068 	CleanupStack::PushL(event);
  1065 	CleanupStack::PushL(event);
  1069 
  1066 
  1127 	res = view->DuplicatesL(*dView, active->iStatus);
  1124 	res = view->DuplicatesL(*dView, active->iStatus);
  1128 	TEST(res);
  1125 	TEST(res);
  1129 	active->StartL();
  1126 	active->StartL();
  1130 	CActiveScheduler::Start();
  1127 	CActiveScheduler::Start();
  1131 	TEST2(active->iStatus.Int(), KErrNone);
  1128 	TEST2(active->iStatus.Int(), KErrNone);
  1132 	TEST(dView->CountL() == KTestEventNum - 1);
  1129 	TEST2(dView->CountL(), KTestEventNum - 1);
  1133 
  1130 
  1134 	CleanupStack::PopAndDestroy(4); // view, active, event, dView
  1131 	CleanupStack::PopAndDestroy(4); // view, active, event, dView
  1135 	}
  1132 	}
  1136 
  1133 
  1137 /**
  1134 /**
  1142 @SYMTestExpectedResults Test must not fail
  1139 @SYMTestExpectedResults Test must not fail
  1143 @SYMREQ                 REQ0000
  1140 @SYMREQ                 REQ0000
  1144 */
  1141 */
  1145 LOCAL_C void TestRecentRemove1L(CLogClient& aClient)
  1142 LOCAL_C void TestRecentRemove1L(CLogClient& aClient)
  1146 	{
  1143 	{
  1147 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0857 "));
  1144 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0857 "));
  1148 	CTestActive* active = new(ELeave)CTestActive();
  1145 	CTestActive* active = new(ELeave)CTestActive();
  1149 	CleanupStack::PushL(active);
  1146 	CleanupStack::PushL(active);
  1150 
  1147 
  1151 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1148 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1152 	CleanupStack::PushL(view);
  1149 	CleanupStack::PushL(view);
  1159 
  1156 
  1160 	TInt count = view->CountL();
  1157 	TInt count = view->CountL();
  1161 
  1158 
  1162 	while(view->RemoveL(active->iStatus))
  1159 	while(view->RemoveL(active->iStatus))
  1163 		{
  1160 		{
  1164 		TEST(view->CountL() == count - 1);
  1161 		TEST2(view->CountL(), count - 1);
  1165 		count = view->CountL();
  1162 		count = view->CountL();
  1166 
  1163 
  1167 		active->StartL();
  1164 		active->StartL();
  1168 		CActiveScheduler::Start();
  1165 		CActiveScheduler::Start();
  1169 		TEST2(active->iStatus.Int(), KErrNone);
  1166 		TEST2(active->iStatus.Int(), KErrNone);
  1213 @SYMTestExpectedResults Test must not fail
  1210 @SYMTestExpectedResults Test must not fail
  1214 @SYMREQ                 REQ0000
  1211 @SYMREQ                 REQ0000
  1215 */
  1212 */
  1216 LOCAL_C void TestRecentRemove2L(CLogClient& aClient)
  1213 LOCAL_C void TestRecentRemove2L(CLogClient& aClient)
  1217 	{
  1214 	{
  1218 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0858 "));
  1215 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0858 "));
  1219 	CLogEvent* event = CLogEvent::NewL();
  1216 	CLogEvent* event = CLogEvent::NewL();
  1220 	CleanupStack::PushL(event);
  1217 	CleanupStack::PushL(event);
  1221 
  1218 
  1222 	CTestActive* active = new(ELeave)CTestActive();
  1219 	CTestActive* active = new(ELeave)CTestActive();
  1223 	CleanupStack::PushL(active);
  1220 	CleanupStack::PushL(active);
  1278 @SYMTestExpectedResults Test must not fail
  1275 @SYMTestExpectedResults Test must not fail
  1279 @SYMREQ                 REQ0000
  1276 @SYMREQ                 REQ0000
  1280 */
  1277 */
  1281 LOCAL_C void TestDuplicateViewL(CLogClient& aClient)
  1278 LOCAL_C void TestDuplicateViewL(CLogClient& aClient)
  1282 	{
  1279 	{
  1283 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0859 "));
  1280 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0859 "));
  1284 	CTestActive* active = new(ELeave)CTestActive();
  1281 	CTestActive* active = new(ELeave)CTestActive();
  1285 	CleanupStack::PushL(active);
  1282 	CleanupStack::PushL(active);
  1286 
  1283 
  1287 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1284 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1288 	CleanupStack::PushL(view);
  1285 	CleanupStack::PushL(view);
  1451 @SYMTestExpectedResults Test must not fail
  1448 @SYMTestExpectedResults Test must not fail
  1452 @SYMREQ                 REQ0000
  1449 @SYMREQ                 REQ0000
  1453 */
  1450 */
  1454 LOCAL_C void TestDuplicateRemoveL(CLogClient& aClient)
  1451 LOCAL_C void TestDuplicateRemoveL(CLogClient& aClient)
  1455 	{
  1452 	{
  1456 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0860 "));
  1453 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0860 "));
  1457 	CTestActive* active = new(ELeave)CTestActive();
  1454 	CTestActive* active = new(ELeave)CTestActive();
  1458 	CleanupStack::PushL(active);
  1455 	CleanupStack::PushL(active);
  1459 
  1456 
  1460 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1457 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
  1461 	CleanupStack::PushL(view);
  1458 	CleanupStack::PushL(view);
  1505 @SYMTestExpectedResults Test must not fail
  1502 @SYMTestExpectedResults Test must not fail
  1506 @SYMREQ                 REQ0000
  1503 @SYMREQ                 REQ0000
  1507 */
  1504 */
  1508 LOCAL_C void TestPurgeOnSetup1L(CLogClient& aClient)
  1505 LOCAL_C void TestPurgeOnSetup1L(CLogClient& aClient)
  1509 	{
  1506 	{
  1510 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0861 "));
  1507 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0861 "));
  1511 	CTestActive* active = new(ELeave)CTestActive();
  1508 	CTestActive* active = new(ELeave)CTestActive();
  1512 	CleanupStack::PushL(active);
  1509 	CleanupStack::PushL(active);
  1513 
  1510 
  1514 	User::After(0x100000);
  1511 	User::After(0x100000);
  1515 
  1512 
  1607 @SYMTestExpectedResults Test must not fail
  1604 @SYMTestExpectedResults Test must not fail
  1608 @SYMREQ                 REQ0000
  1605 @SYMREQ                 REQ0000
  1609 */
  1606 */
  1610 LOCAL_C void TestPurgeOnSetup2L(CLogClient& aClient)
  1607 LOCAL_C void TestPurgeOnSetup2L(CLogClient& aClient)
  1611 	{
  1608 	{
  1612 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0862 "));
  1609 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0862 "));
  1613 	CTestActive* active1 = new(ELeave)CTestActive();
  1610 	CTestActive* active1 = new(ELeave)CTestActive();
  1614 	CleanupStack::PushL(active1);
  1611 	CleanupStack::PushL(active1);
  1615 
  1612 
  1616 	CTestActive* active2 = new(ELeave)CTestActive();
  1613 	CTestActive* active2 = new(ELeave)CTestActive();
  1617 	CleanupStack::PushL(active2);
  1614 	CleanupStack::PushL(active2);
  1717 @SYMTestExpectedResults Test must not fail
  1714 @SYMTestExpectedResults Test must not fail
  1718 @SYMREQ                 REQ0000
  1715 @SYMREQ                 REQ0000
  1719 */
  1716 */
  1720 LOCAL_C void TestViewPurgeL(CLogClient& aClient)
  1717 LOCAL_C void TestViewPurgeL(CLogClient& aClient)
  1721 	{
  1718 	{
  1722 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0863 "));
  1719 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0863 "));
  1723 	CTestActive* active = new(ELeave)CTestActive();
  1720 	CTestActive* active = new(ELeave)CTestActive();
  1724 	CleanupStack::PushL(active);
  1721 	CleanupStack::PushL(active);
  1725 
  1722 
  1726 	TLogConfig config;
  1723 	TLogConfig config;
  1727 
  1724 
  1728 	aClient.GetConfig(config, active->iStatus);
  1725 	aClient.GetConfig(config, active->iStatus);
  1729 	active->StartL();
  1726 	active->StartL();
  1730 	CActiveScheduler::Start();
  1727 	CActiveScheduler::Start();
  1731 	TEST2(active->iStatus.Int(), KErrNone);
  1728 	TEST2(active->iStatus.Int(), KErrNone);
  1732 
       
  1733 	TEST2(config.iMaxLogSize, 1000);
  1729 	TEST2(config.iMaxLogSize, 1000);
  1734 	TEST(config.iMaxRecentLogSize = 10);
       
  1735 
  1730 
  1736 	config.iMaxLogSize = 2000;
  1731 	config.iMaxLogSize = 2000;
  1737 	config.iMaxRecentLogSize = 20;
  1732 	config.iMaxRecentLogSize = 20;
  1738 
  1733 
  1739 	aClient.ChangeConfig(config, active->iStatus);
  1734 	aClient.ChangeConfig(config, active->iStatus);
  1782 @SYMTestExpectedResults Test must not fail
  1777 @SYMTestExpectedResults Test must not fail
  1783 @SYMREQ                 REQ0000
  1778 @SYMREQ                 REQ0000
  1784 */
  1779 */
  1785 LOCAL_C void TestClearDuplicatesL(CLogClient& aClient)
  1780 LOCAL_C void TestClearDuplicatesL(CLogClient& aClient)
  1786 	{
  1781 	{
  1787 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0864 "));
  1782 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0864 "));
  1788 	CTestActive* active = new(ELeave)CTestActive();
  1783 	CTestActive* active = new(ELeave)CTestActive();
  1789 	CleanupStack::PushL(active);
  1784 	CleanupStack::PushL(active);
  1790 
  1785 
  1791 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
  1786 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
  1792 	active->StartL();
  1787 	active->StartL();
  2112 @SYMTestExpectedResults Test must not fail
  2107 @SYMTestExpectedResults Test must not fail
  2113 @SYMREQ                 REQ0000
  2108 @SYMREQ                 REQ0000
  2114 */
  2109 */
  2115 LOCAL_C void TestPhoneNumberMatchingL(CLogClient& aClient)
  2110 LOCAL_C void TestPhoneNumberMatchingL(CLogClient& aClient)
  2116 	{
  2111 	{
  2117 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0865 "));
  2112 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0865 "));
  2118 	TestUtils::DeleteDatabaseL();
  2113 	TestUtils::DeleteDatabaseL();
  2119 
  2114 
  2120 	CTestActive* active = new(ELeave)CTestActive();
  2115 	CTestActive* active = new(ELeave)CTestActive();
  2121 	CleanupStack::PushL(active);
  2116 	CleanupStack::PushL(active);
  2122 
  2117 
  2226 @SYMTestExpectedResults Number with the same last 9 digits should get matched as duplicates
  2221 @SYMTestExpectedResults Number with the same last 9 digits should get matched as duplicates
  2227 @SYMDEF                 INC105010
  2222 @SYMDEF                 INC105010
  2228 */	
  2223 */	
  2229 LOCAL_C void INC105010L(CLogClient& aClient)
  2224 LOCAL_C void INC105010L(CLogClient& aClient)
  2230 {
  2225 {
  2231 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3472 "));
  2226 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3472 "));
  2232 	TestUtils::DeleteDatabaseL();
  2227 	TestUtils::DeleteDatabaseL();
  2233 
  2228 
  2234 	CTestActive* active = new(ELeave)CTestActive();
  2229 	CTestActive* active = new(ELeave)CTestActive();
  2235 	CleanupStack::PushL(active);
  2230 	CleanupStack::PushL(active);
  2236 
  2231 
  2334 @SYMTestExpectedResults Test must not fail
  2329 @SYMTestExpectedResults Test must not fail
  2335 @SYMREQ                 REQ0000
  2330 @SYMREQ                 REQ0000
  2336 */
  2331 */
  2337 LOCAL_C void TestRecentFlagsL(CLogClient& aClient)
  2332 LOCAL_C void TestRecentFlagsL(CLogClient& aClient)
  2338 	{
  2333 	{
  2339 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0866 "));
  2334 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0866 "));
  2340 	TestUtils::DeleteDatabaseL();
  2335 	TestUtils::DeleteDatabaseL();
  2341 
  2336 
  2342 	CLogEvent* event = CLogEvent::NewL();
  2337 	CLogEvent* event = CLogEvent::NewL();
  2343 	CleanupStack::PushL(event);
  2338 	CleanupStack::PushL(event);
  2344 
  2339 
  2467 @SYMTestExpectedResults Test must not fail
  2462 @SYMTestExpectedResults Test must not fail
  2468 @SYMREQ                 REQ0000
  2463 @SYMREQ                 REQ0000
  2469 */
  2464 */
  2470 LOCAL_C void TestViewFlagsL(CLogClient& aClient)
  2465 LOCAL_C void TestViewFlagsL(CLogClient& aClient)
  2471 	{
  2466 	{
  2472 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0867 "));
  2467 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0867 "));
  2473 	TestUtils::DeleteDatabaseL();
  2468 	TestUtils::DeleteDatabaseL();
  2474 
  2469 
  2475 	CLogEvent* event = CLogEvent::NewL();
  2470 	CLogEvent* event = CLogEvent::NewL();
  2476 	CleanupStack::PushL(event);
  2471 	CleanupStack::PushL(event);
  2477 
  2472 
  2656 @SYMTestExpectedResults Test must not fail
  2651 @SYMTestExpectedResults Test must not fail
  2657 @SYMREQ                 REQ0000
  2652 @SYMREQ                 REQ0000
  2658 */
  2653 */
  2659 LOCAL_C void TestViewChangeEvents1L(CLogClient& aClient)
  2654 LOCAL_C void TestViewChangeEvents1L(CLogClient& aClient)
  2660 	{
  2655 	{
  2661 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0868 "));
  2656 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0868 "));
  2662 	TestUtils::DeleteDatabaseL();
  2657 	TestUtils::DeleteDatabaseL();
  2663 
  2658 
  2664 	CLogEvent* event = CLogEvent::NewL();
  2659 	CLogEvent* event = CLogEvent::NewL();
  2665 	CleanupStack::PushL(event);
  2660 	CleanupStack::PushL(event);
  2666 
  2661 
  2739 
  2734 
  2740 	changeCount = changes->Count();
  2735 	changeCount = changes->Count();
  2741 	for(i=0; i<changeCount; i++)
  2736 	for(i=0; i<changeCount; i++)
  2742 		{
  2737 		{
  2743 		type = changes->At(i, logId, viewIndex);
  2738 		type = changes->At(i, logId, viewIndex);
  2744 		RDebug::Print(_L("Change Type: %d, logId: %d, viewIndex: %d\n"), type, logId, viewIndex);
  2739 		TheTest.Printf(_L("Change Type: %d, logId: %d, viewIndex: %d\n"), type, logId, viewIndex);
  2745 		}
  2740 		}
  2746 	
  2741 	
  2747 	// Check the change was as expected
  2742 	// Check the change was as expected
  2748 	TEST2(changes->Count(), 1);
  2743 	TEST2(changes->Count(), 1);
  2749 	type = changes->At(0, logId, viewIndex);
  2744 	type = changes->At(0, logId, viewIndex);
  2762 	do
  2757 	do
  2763 		{
  2758 		{
  2764 		active->StartL();
  2759 		active->StartL();
  2765 		CActiveScheduler::Start();
  2760 		CActiveScheduler::Start();
  2766 		TEST2(active->iStatus.Int(), KErrNone);
  2761 		TEST2(active->iStatus.Int(), KErrNone);
  2767 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2762 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2768 		}
  2763 		}
  2769 	while(view->NextL(active->iStatus));
  2764 	while(view->NextL(active->iStatus));
  2770 	RDebug::Print(_L("==\n"));
  2765 	TheTest.Printf(_L("==\n"));
  2771 	TEST2(i, count);
  2766 	TEST2(i, count);
  2772 	res = view->FirstL(active->iStatus);
  2767 	res = view->FirstL(active->iStatus);
  2773 	TEST(res);
  2768 	TEST(res);
  2774 	active->StartL();
  2769 	active->StartL();
  2775 	CActiveScheduler::Start();
  2770 	CActiveScheduler::Start();
  2789 	// Check changes
  2784 	// Check changes
  2790 	changeCount = changeObs->Changes().Count();
  2785 	changeCount = changeObs->Changes().Count();
  2791 	TEST2(changeCount, 5); // 1,3,5,7,9
  2786 	TEST2(changeCount, 5); // 1,3,5,7,9
  2792 	for(i=0; i<changeCount; i++)
  2787 	for(i=0; i<changeCount; i++)
  2793 		{
  2788 		{
  2794 		TEST(changeObs->Changes().At(i, logId, viewIndex) == ELogChangeTypeEventDeleted);
  2789 		TEST2(changeObs->Changes().At(i, logId, viewIndex), ELogChangeTypeEventDeleted);
  2795 		TEST(logId == TLogId(2*i + 1));
  2790 		TEST2(logId, TLogId(2*i + 1));
  2796 		TEST(viewIndex == 10 - ((2*i) + 1));
  2791 		TEST2(viewIndex, 10 - ((2*i) + 1));
  2797 		}
  2792 		}
  2798 	
  2793 	
  2799 	// Add a new event that shouldn't appear in the view
  2794 	// Add a new event that shouldn't appear in the view
  2800 	changeObs->StartCollectingChanges();
  2795 	changeObs->StartCollectingChanges();
  2801 	event->SetContact(TLogContactItemId(0));
  2796 	event->SetContact(TLogContactItemId(0));
  2802 	active->StartL();
  2797 	active->StartL();
  2803 	aClient.AddEvent(*event, active->iStatus);
  2798 	aClient.AddEvent(*event, active->iStatus);
  2804 	CActiveScheduler::Start();
  2799 	CActiveScheduler::Start();
  2805 	TEST2(active->iStatus.Int(), KErrNone);
  2800 	TEST2(active->iStatus.Int(), KErrNone);
  2806 	count = view->CountL();
  2801 	count = view->CountL();
  2807 	TEST(count == KTestEventNum + 1 - 5);
  2802 	TEST2(count, KTestEventNum + 1 - 5);
  2808 	TEST(event->Id() ==  KTestEventNum + 1);
  2803 	TEST2(event->Id(), KTestEventNum + 1);
  2809 
  2804 
  2810 	// Check changes
  2805 	// Check changes
  2811 	TEST(!changeObs->HaveChanges());
  2806 	TEST(!changeObs->HaveChanges());
  2812 
  2807 
  2813 	// Check view navigation
  2808 	// Check view navigation
  2817 	do
  2812 	do
  2818 		{
  2813 		{
  2819 		active->StartL();
  2814 		active->StartL();
  2820 		CActiveScheduler::Start();
  2815 		CActiveScheduler::Start();
  2821 		TEST2(active->iStatus.Int(), KErrNone);
  2816 		TEST2(active->iStatus.Int(), KErrNone);
  2822 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2817 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2823 		}
  2818 		}
  2824 	while(view->NextL(active->iStatus));
  2819 	while(view->NextL(active->iStatus));
  2825 	RDebug::Print(_L("==\n"));
  2820 	TheTest.Printf(_L("==\n"));
  2826 	TEST2(i, count);
  2821 	TEST2(i, count);
  2827 	res = view->FirstL(active->iStatus);
  2822 	res = view->FirstL(active->iStatus);
  2828 	TEST(res);
  2823 	TEST(res);
  2829 	active->StartL();
  2824 	active->StartL();
  2830 	CActiveScheduler::Start();
  2825 	CActiveScheduler::Start();
  2835 	active->StartL();
  2830 	active->StartL();
  2836 	aClient.DeleteEvent(event->Id(), active->iStatus);
  2831 	aClient.DeleteEvent(event->Id(), active->iStatus);
  2837 	CActiveScheduler::Start();
  2832 	CActiveScheduler::Start();
  2838 	TEST2(active->iStatus.Int(), KErrNone);
  2833 	TEST2(active->iStatus.Int(), KErrNone);
  2839 	count = view->CountL();
  2834 	count = view->CountL();
  2840 	TEST(count == KTestEventNum + 1 - 5);
  2835 	TEST2(count, KTestEventNum + 1 - 5);
  2841 
  2836 
  2842 	// Check changes
  2837 	// Check changes
  2843 	TEST(!changeObs->HaveChanges());
  2838 	TEST(!changeObs->HaveChanges());
  2844 
  2839 
  2845 	// Check view navigation
  2840 	// Check view navigation
  2849 	do
  2844 	do
  2850 		{
  2845 		{
  2851 		active->StartL();
  2846 		active->StartL();
  2852 		CActiveScheduler::Start();
  2847 		CActiveScheduler::Start();
  2853 		TEST2(active->iStatus.Int(), KErrNone);
  2848 		TEST2(active->iStatus.Int(), KErrNone);
  2854 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2849 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2855 		}
  2850 		}
  2856 	while(view->NextL(active->iStatus));
  2851 	while(view->NextL(active->iStatus));
  2857 	RDebug::Print(_L("==\n"));
  2852 	TheTest.Printf(_L("==\n"));
  2858 	TEST2(i, count);
  2853 	TEST2(i, count);
  2859 	res = view->FirstL(active->iStatus);
  2854 	res = view->FirstL(active->iStatus);
  2860 	TEST(res);
  2855 	TEST(res);
  2861 	active->StartL();
  2856 	active->StartL();
  2862 	CActiveScheduler::Start();
  2857 	CActiveScheduler::Start();
  2868 	active->StartL();
  2863 	active->StartL();
  2869 	aClient.AddEvent(*event, active->iStatus);
  2864 	aClient.AddEvent(*event, active->iStatus);
  2870 	CActiveScheduler::Start();
  2865 	CActiveScheduler::Start();
  2871 	TEST2(active->iStatus.Int(), KErrNone);
  2866 	TEST2(active->iStatus.Int(), KErrNone);
  2872 	count = view->CountL();
  2867 	count = view->CountL();
  2873 	TEST(count == KTestEventNum + 1 - 5);
  2868 	TEST2(count, KTestEventNum + 1 - 5);
  2874 	TEST(event->Id() ==  KTestEventNum + 2);
  2869 	TEST2(event->Id(),  KTestEventNum + 2);
  2875 
  2870 
  2876 	// Check changes
  2871 	// Check changes
  2877 	TEST(!changeObs->HaveChanges());
  2872 	TEST(!changeObs->HaveChanges());
  2878 
  2873 
  2879 	// Check view navigation
  2874 	// Check view navigation
  2883 	do
  2878 	do
  2884 		{
  2879 		{
  2885 		active->StartL();
  2880 		active->StartL();
  2886 		CActiveScheduler::Start();
  2881 		CActiveScheduler::Start();
  2887 		TEST2(active->iStatus.Int(), KErrNone);
  2882 		TEST2(active->iStatus.Int(), KErrNone);
  2888 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2883 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2889 		}
  2884 		}
  2890 	while(view->NextL(active->iStatus));
  2885 	while(view->NextL(active->iStatus));
  2891 	RDebug::Print(_L("==\n"));
  2886 	TheTest.Printf(_L("==\n"));
  2892 	TEST2(i, count);
  2887 	TEST2(i, count);
  2893 	res = view->FirstL(active->iStatus);
  2888 	res = view->FirstL(active->iStatus);
  2894 	TEST(res);
  2889 	TEST(res);
  2895 	active->StartL();
  2890 	active->StartL();
  2896 	CActiveScheduler::Start();
  2891 	CActiveScheduler::Start();
  2902 	active->StartL();
  2897 	active->StartL();
  2903 	aClient.ChangeEvent(*event, active->iStatus);
  2898 	aClient.ChangeEvent(*event, active->iStatus);
  2904 	CActiveScheduler::Start();
  2899 	CActiveScheduler::Start();
  2905 	TEST2(active->iStatus.Int(), KErrNone);
  2900 	TEST2(active->iStatus.Int(), KErrNone);
  2906 	count = view->CountL();
  2901 	count = view->CountL();
  2907 	TEST(count == KTestEventNum + 2 - 5);
  2902 	TEST2(count, KTestEventNum + 2 - 5);
  2908 	TEST(event->Id() ==  KTestEventNum + 2); // Shouldn't change
  2903 	TEST2(event->Id(),  KTestEventNum + 2); // Shouldn't change
  2909 
  2904 
  2910 	// Check changes
  2905 	// Check changes
  2911 	changeCount = changeObs->Changes().Count();
  2906 	changeCount = changeObs->Changes().Count();
  2912 	TEST2(changeCount, 1);
  2907 	TEST2(changeCount, 1);
  2913 	type = changeObs->Changes().At(0, logId, viewIndex);
  2908 	type = changeObs->Changes().At(0, logId, viewIndex);
  2914 	TEST2(type, ELogChangeTypeEventAdded);
  2909 	TEST2(type, ELogChangeTypeEventAdded);
  2915 	TEST(logId == KTestEventNum + 2);
  2910 	TEST2(logId, KTestEventNum + 2);
  2916 	TEST2(viewIndex, 0);
  2911 	TEST2(viewIndex, 0);
  2917 
  2912 
  2918 	// Check view navigation
  2913 	// Check view navigation
  2919 	i=0;
  2914 	i=0;
  2920 	res = view->FirstL(active->iStatus);
  2915 	res = view->FirstL(active->iStatus);
  2922 	do
  2917 	do
  2923 		{
  2918 		{
  2924 		active->StartL();
  2919 		active->StartL();
  2925 		CActiveScheduler::Start();
  2920 		CActiveScheduler::Start();
  2926 		TEST2(active->iStatus.Int(), KErrNone);
  2921 		TEST2(active->iStatus.Int(), KErrNone);
  2927 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2922 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2928 		}
  2923 		}
  2929 	while(view->NextL(active->iStatus));
  2924 	while(view->NextL(active->iStatus));
  2930 	RDebug::Print(_L("==\n"));
  2925 	TheTest.Printf(_L("==\n"));
  2931 	TEST2(i, count);
  2926 	TEST2(i, count);
  2932 	res = view->FirstL(active->iStatus);
  2927 	res = view->FirstL(active->iStatus);
  2933 	TEST(res);
  2928 	TEST(res);
  2934 	active->StartL();
  2929 	active->StartL();
  2935 	CActiveScheduler::Start();
  2930 	CActiveScheduler::Start();
  2941 	active->StartL();
  2936 	active->StartL();
  2942 	aClient.ChangeEvent(*event, active->iStatus);
  2937 	aClient.ChangeEvent(*event, active->iStatus);
  2943 	CActiveScheduler::Start();
  2938 	CActiveScheduler::Start();
  2944 	TEST2(active->iStatus.Int(), KErrNone);
  2939 	TEST2(active->iStatus.Int(), KErrNone);
  2945 	count = view->CountL();
  2940 	count = view->CountL();
  2946 	TEST(count == KTestEventNum + 2 - 5); // Shouldn't change
  2941 	TEST2(count, KTestEventNum + 2 - 5); // Shouldn't change
  2947 	TEST(event->Id() ==  KTestEventNum + 2); // Shouldn't change
  2942 	TEST2(event->Id(),  KTestEventNum + 2); // Shouldn't change
  2948 
  2943 
  2949 	// Check changes
  2944 	// Check changes
  2950 	changeCount = changeObs->Changes().Count();
  2945 	changeCount = changeObs->Changes().Count();
  2951 	TEST2(changeCount, 1);
  2946 	TEST2(changeCount, 1);
  2952 	type = changeObs->Changes().At(0, logId, viewIndex);
  2947 	type = changeObs->Changes().At(0, logId, viewIndex);
  2953 	TEST2(type, ELogChangeTypeEventChanged);
  2948 	TEST2(type, ELogChangeTypeEventChanged);
  2954 	TEST(logId == KTestEventNum + 2);
  2949 	TEST2(logId, KTestEventNum + 2);
  2955 	TEST2(viewIndex, 0);
  2950 	TEST2(viewIndex, 0);
  2956 
  2951 
  2957 	// Change an event in the view so that it is deleted
  2952 	// Change an event in the view so that it is deleted
  2958 	changeObs->StartCollectingChanges();
  2953 	changeObs->StartCollectingChanges();
  2959 	event->SetContact(0);
  2954 	event->SetContact(0);
  2960 	active->StartL();
  2955 	active->StartL();
  2961 	aClient.ChangeEvent(*event, active->iStatus);
  2956 	aClient.ChangeEvent(*event, active->iStatus);
  2962 	CActiveScheduler::Start();
  2957 	CActiveScheduler::Start();
  2963 	TEST2(active->iStatus.Int(), KErrNone);
  2958 	TEST2(active->iStatus.Int(), KErrNone);
  2964 	count = view->CountL();
  2959 	count = view->CountL();
  2965 	TEST(count == KTestEventNum + 2 - 5 - 1); // one less now
  2960 	TEST2(count, KTestEventNum + 2 - 5 - 1); // one less now
  2966 
  2961 
  2967 	// Check changes
  2962 	// Check changes
  2968 	changeCount = changeObs->Changes().Count();
  2963 	changeCount = changeObs->Changes().Count();
  2969 	TEST2(changeCount, 1);
  2964 	TEST2(changeCount, 1);
  2970 	type = changeObs->Changes().At(0, logId, viewIndex);
  2965 	type = changeObs->Changes().At(0, logId, viewIndex);
  2971 	TEST2(type, ELogChangeTypeEventDeleted);
  2966 	TEST2(type, ELogChangeTypeEventDeleted);
  2972 	TEST(logId == KTestEventNum + 2);
  2967 	TEST2(logId, KTestEventNum + 2);
  2973 	TEST2(viewIndex, 0);
  2968 	TEST2(viewIndex, 0);
  2974 
  2969 
  2975 	// Navigate part way through the view so we have
  2970 	// Navigate part way through the view so we have
  2976 	// a cursor position part way through...
  2971 	// a cursor position part way through...
  2977 	i=0;
  2972 	i=0;
  2981 	do
  2976 	do
  2982 		{
  2977 		{
  2983 		active->StartL();
  2978 		active->StartL();
  2984 		CActiveScheduler::Start();
  2979 		CActiveScheduler::Start();
  2985 		TEST2(active->iStatus.Int(), KErrNone);
  2980 		TEST2(active->iStatus.Int(), KErrNone);
  2986 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  2981 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  2987 		}
  2982 		}
  2988 	while(view->NextL(active->iStatus));
  2983 	while(view->NextL(active->iStatus));
  2989 	RDebug::Print(_L("==\n"));
  2984 	TheTest.Printf(_L("==\n"));
  2990 	TEST2(i, count);
  2985 	TEST2(i, count);
  2991 	TEST(view->Event().Id() == TLogId(0));
  2986 	TEST2(view->Event().Id(), TLogId(0));
  2992 
  2987 
  2993 	// Save id
  2988 	// Save id
  2994 	TLogId savedId = view->Event().Id();
  2989 	TLogId savedId = view->Event().Id();
  2995 
  2990 
  2996 	// Go one back
  2991 	// Go one back
  3006 	active->StartL();
  3001 	active->StartL();
  3007 	aClient.AddEvent(*event, active->iStatus);
  3002 	aClient.AddEvent(*event, active->iStatus);
  3008 	CActiveScheduler::Start();
  3003 	CActiveScheduler::Start();
  3009 	TEST2(active->iStatus.Int(), KErrNone);
  3004 	TEST2(active->iStatus.Int(), KErrNone);
  3010 	count = view->CountL();
  3005 	count = view->CountL();
  3011 	TEST(count == KTestEventNum + 2 - 5); // one more now
  3006 	TEST2(count, KTestEventNum + 2 - 5); // one more now
  3012 	TEST(event->Id() ==  KTestEventNum + 3);
  3007 	TEST2(event->Id(),  KTestEventNum + 3);
  3013 
  3008 
  3014 	// Check changes
  3009 	// Check changes
  3015 	changeCount = changeObs->Changes().Count();
  3010 	changeCount = changeObs->Changes().Count();
  3016 	TEST2(changeCount, 1);
  3011 	TEST2(changeCount, 1);
  3017 	type = changeObs->Changes().At(0, logId, viewIndex);
  3012 	type = changeObs->Changes().At(0, logId, viewIndex);
  3018 	TEST(type == ELogChangeTypeEventAdded);
  3013 	TEST2(type, ELogChangeTypeEventAdded);
  3019 	TEST(logId == KTestEventNum + 3);
  3014 	TEST2(logId, KTestEventNum + 3);
  3020 	TEST2(viewIndex, 0);
  3015 	TEST2(viewIndex, 0);
  3021 
  3016 
  3022 	// Check we can still go forward to the last record
  3017 	// Check we can still go forward to the last record
  3023 	res = view->NextL(active->iStatus);
  3018 	res = view->NextL(active->iStatus);
  3024 	TEST(res);
  3019 	TEST(res);
  3040 	active->StartL();
  3035 	active->StartL();
  3041 	aClient.DeleteEvent(savedId, active->iStatus);
  3036 	aClient.DeleteEvent(savedId, active->iStatus);
  3042 	CActiveScheduler::Start();
  3037 	CActiveScheduler::Start();
  3043 	TEST2(active->iStatus.Int(), KErrNone);
  3038 	TEST2(active->iStatus.Int(), KErrNone);
  3044 	count = view->CountL();
  3039 	count = view->CountL();
  3045 	TEST(count == KTestEventNum + 2 - 5 - 1); // one less
  3040 	TEST2(count, KTestEventNum + 2 - 5 - 1); // one less
  3046 
  3041 
  3047 	// Check changes
  3042 	// Check changes
  3048 	changeCount = changeObs->Changes().Count();
  3043 	changeCount = changeObs->Changes().Count();
  3049 	TEST2(changeCount, 1);
  3044 	TEST2(changeCount, 1);
  3050 	type = changeObs->Changes().At(0, logId, viewIndex);
  3045 	type = changeObs->Changes().At(0, logId, viewIndex);
  3051 	TEST2(type, ELogChangeTypeEventDeleted);
  3046 	TEST2(type, ELogChangeTypeEventDeleted);
  3052 	TEST2(logId, savedId);
  3047 	TEST2(logId, savedId);
  3053 	TEST(viewIndex == KTestEventNum + 2 - 5 - 2); // last but one event
  3048 	TEST2(viewIndex, KTestEventNum + 2 - 5 - 2); // last but one event
  3054 
  3049 
  3055 	// Check we're now at the end of the view
  3050 	// Check we're now at the end of the view
  3056 	res = view->NextL(active->iStatus);
  3051 	res = view->NextL(active->iStatus);
  3057 	TEST(!res);
  3052 	TEST(!res);
  3058 
  3053 
  3069 	active->StartL();
  3064 	active->StartL();
  3070 	aClient.DeleteEvent(savedId, active->iStatus);
  3065 	aClient.DeleteEvent(savedId, active->iStatus);
  3071 	CActiveScheduler::Start();
  3066 	CActiveScheduler::Start();
  3072 	TEST2(active->iStatus.Int(), KErrNone);
  3067 	TEST2(active->iStatus.Int(), KErrNone);
  3073 	count = view->CountL();
  3068 	count = view->CountL();
  3074 	TEST(count == KTestEventNum - 5);
  3069 	TEST2(count, KTestEventNum - 5);
  3075 
  3070 
  3076 	// Check changes
  3071 	// Check changes
  3077 	changeCount = changeObs->Changes().Count();
  3072 	changeCount = changeObs->Changes().Count();
  3078 	TEST2(changeCount, 1);
  3073 	TEST2(changeCount, 1);
  3079 	type = changeObs->Changes().At(0, logId, viewIndex);
  3074 	type = changeObs->Changes().At(0, logId, viewIndex);
  3090 		CActiveScheduler::Start();
  3085 		CActiveScheduler::Start();
  3091 		TEST2(active->iStatus.Int(), KErrNone);
  3086 		TEST2(active->iStatus.Int(), KErrNone);
  3092 		++count;
  3087 		++count;
  3093 		}
  3088 		}
  3094 	while(view->NextL(active->iStatus));
  3089 	while(view->NextL(active->iStatus));
  3095 	TEST(count == KTestEventNum - 5 - 1);
  3090 	TEST2(count, KTestEventNum - 5 - 1);
  3096 
  3091 
  3097 	// Check last record
  3092 	// Check last record
  3098 	savedId = view->Event().Id();
  3093 	savedId = view->Event().Id();
  3099 	res = view->LastL(active->iStatus);
  3094 	res = view->LastL(active->iStatus);
  3100 	TEST(res);
  3095 	TEST(res);
  3101 	active->StartL();
  3096 	active->StartL();
  3102 	CActiveScheduler::Start();
  3097 	CActiveScheduler::Start();
  3103 	TEST2(active->iStatus.Int(), KErrNone);
  3098 	TEST2(active->iStatus.Int(), KErrNone);
  3104 	TEST(savedId == view->Event().Id());
  3099 	TEST2(savedId, view->Event().Id());
  3105 	
  3100 	
  3106 	// Delete the last record
  3101 	// Delete the last record
  3107 	savedId = view->Event().Id();
  3102 	savedId = view->Event().Id();
  3108 	changeObs->StartCollectingChanges();
  3103 	changeObs->StartCollectingChanges();
  3109 	active->StartL();
  3104 	active->StartL();
  3110 	aClient.DeleteEvent(savedId, active->iStatus);
  3105 	aClient.DeleteEvent(savedId, active->iStatus);
  3111 	CActiveScheduler::Start();
  3106 	CActiveScheduler::Start();
  3112 	TEST2(active->iStatus.Int(), KErrNone);
  3107 	TEST2(active->iStatus.Int(), KErrNone);
  3113 	count = view->CountL();
  3108 	count = view->CountL();
  3114 	TEST(count == KTestEventNum - 6);
  3109 	TEST2(count, KTestEventNum - 6);
  3115 
  3110 
  3116 	// Check changes
  3111 	// Check changes
  3117 	changeCount = changeObs->Changes().Count();
  3112 	changeCount = changeObs->Changes().Count();
  3118 	TEST2(changeCount, 1);
  3113 	TEST2(changeCount, 1);
  3119 	type = changeObs->Changes().At(0, logId, viewIndex);
  3114 	type = changeObs->Changes().At(0, logId, viewIndex);
  3135 	return TestUtils::IsDatabaseOpenL();
  3130 	return TestUtils::IsDatabaseOpenL();
  3136 	}
  3131 	}
  3137 
  3132 
  3138 LOCAL_C void TestLogOpenL()
  3133 LOCAL_C void TestLogOpenL()
  3139 	{
  3134 	{
  3140 	test(IsLogOpenL());
  3135 	TEST(IsLogOpenL());
  3141 	}
  3136 	}
  3142 
  3137 
  3143 LOCAL_C void TestLogClosedL()
  3138 LOCAL_C void TestLogClosedL()
  3144 	{
  3139 	{
  3145 	test(!IsLogOpenL());
  3140 	TEST(!IsLogOpenL());
  3146 	}
  3141 	}
  3147 
  3142 
  3148 LOCAL_C void StartBackupL()
  3143 LOCAL_C void StartBackupL()
  3149 	{
  3144 	{
  3150 	User::InfoPrint(_L("Backup"));
  3145 	User::InfoPrint(_L("Backup"));
  3187 @SYMTestExpectedResults Test must not fail
  3182 @SYMTestExpectedResults Test must not fail
  3188 @SYMREQ                 REQ0000
  3183 @SYMREQ                 REQ0000
  3189 */
  3184 */
  3190 LOCAL_C void TestViewChangeEvents1aL(CLogClient& aClient)
  3185 LOCAL_C void TestViewChangeEvents1aL(CLogClient& aClient)
  3191 	{
  3186 	{
  3192 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0869 "));
  3187 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0869 "));
  3193 	TestUtils::DeleteDatabaseL();
  3188 	TestUtils::DeleteDatabaseL();
  3194 
  3189 
  3195 	CLogEvent* event = CLogEvent::NewL();
  3190 	CLogEvent* event = CLogEvent::NewL();
  3196 	CleanupStack::PushL(event);
  3191 	CleanupStack::PushL(event);
  3197 
  3192 
  3222 	for(count = 0; count < KTestEventNum; count++)
  3217 	for(count = 0; count < KTestEventNum; count++)
  3223 		{
  3218 		{
  3224 		active->StartL();
  3219 		active->StartL();
  3225 		aClient.AddEvent(*event, active->iStatus);
  3220 		aClient.AddEvent(*event, active->iStatus);
  3226 		CActiveScheduler::Start();
  3221 		CActiveScheduler::Start();
  3227 		test(active->iStatus == KErrNone);
  3222 		TEST2(active->iStatus.Int(), KErrNone);
  3228 		User::After(1 * 1000000);
  3223 		User::After(1 * 1000000);
  3229 		}
  3224 		}
  3230 	//
  3225 	//
  3231 	test(view->CountL() == 0);
  3226 	TEST2(view->CountL(), 0);
  3232 	active->StartL();
  3227 	active->StartL();
  3233 	test(view->SetFilterL(*filter, active->iStatus));
  3228 	TEST(view->SetFilterL(*filter, active->iStatus));
  3234 	CActiveScheduler::Start();
  3229 	CActiveScheduler::Start();
  3235 	test(active->iStatus == KErrNone);
  3230 	TEST2(active->iStatus.Int(), KErrNone);
  3236 	test(view->CountL() == KTestEventNum);
  3231 	TEST2(view->CountL(), KTestEventNum);
  3237 	//
  3232 	//
  3238 	count = KTestEventNum;
  3233 	count = KTestEventNum;
  3239 	test(view->FirstL(active->iStatus));
  3234 	TEST(view->FirstL(active->iStatus));
  3240 	do	{
  3235 	do	{
  3241 		active->StartL();
  3236 		active->StartL();
  3242 		CActiveScheduler::Start();
  3237 		CActiveScheduler::Start();
  3243 		test(active->iStatus == KErrNone);
  3238 		TEST2(active->iStatus.Int(), KErrNone);
  3244 		//
  3239 		//
  3245 		test(view->CountL() == KTestEventNum);
  3240 		TEST2(view->CountL(), KTestEventNum);
  3246 		const TLogId eventId = view->Event().Id();
  3241 		const TLogId eventId = view->Event().Id();
  3247 		test(eventId == (TLogId)--count);
  3242 		TEST2(eventId, (TLogId)--count);
  3248 		}
  3243 		}
  3249 	while(view->NextL(active->iStatus));
  3244 	while(view->NextL(active->iStatus));
  3250 
  3245 
  3251 	// Transients
  3246 	// Transients
  3252 	TInt changeCount;
  3247 	TInt changeCount;
  3259 	active->StartL();
  3254 	active->StartL();
  3260 	aClient.AddEvent(*event, active->iStatus);
  3255 	aClient.AddEvent(*event, active->iStatus);
  3261 	changes = changeObs->WaitForChangesLC();
  3256 	changes = changeObs->WaitForChangesLC();
  3262 	if	(active->IsActive())
  3257 	if	(active->IsActive())
  3263 		CActiveScheduler::Start();
  3258 		CActiveScheduler::Start();
  3264 	test(active->iStatus == KErrNone);
  3259 	TEST2(active->iStatus.Int(), KErrNone);
  3265 	count = view->CountL();
  3260 	count = view->CountL();
  3266 	test(count == KTestEventNum+1);
  3261 	TEST2(count, KTestEventNum+1);
  3267 
  3262 
  3268 	changeCount = changes->Count();
  3263 	changeCount = changes->Count();
  3269 	for(i=0; i<changeCount; i++)
  3264 	for(i=0; i<changeCount; i++)
  3270 		{
  3265 		{
  3271 		type = changes->At(i, logId, viewIndex);
  3266 		type = changes->At(i, logId, viewIndex);
  3272 		RDebug::Print(_L("Change Type: %d, logId: %d, viewIndex: %d"), type, logId, viewIndex);
  3267 		TheTest.Printf(_L("Change Type: %d, logId: %d, viewIndex: %d"), type, logId, viewIndex);
  3273 		}
  3268 		}
  3274 	
  3269 	
  3275 	// Check the change was as expected
  3270 	// Check the change was as expected
  3276 	test(changes->Count() == 1);
  3271 	TEST2(changes->Count(), 1);
  3277 	type = changes->At(0, logId, viewIndex);
  3272 	type = changes->At(0, logId, viewIndex);
  3278 	test(type == ELogChangeTypeEventAdded);
  3273 	TEST2(type, ELogChangeTypeEventAdded);
  3279 	test(viewIndex == 0); // first (newest) event in the view
  3274 	TEST2(viewIndex, 0); // first (newest) event in the view
  3280 	{
  3275 	{
  3281 	const TLogId expectedLogId = ((TLogId) KTestEventNum);
  3276 	const TLogId expectedLogId = ((TLogId) KTestEventNum);
  3282 	test(logId == expectedLogId);
  3277 	TEST2(logId, expectedLogId);
  3283 	}
  3278 	}
  3284 	CleanupStack::PopAndDestroy(changes);
  3279 	CleanupStack::PopAndDestroy(changes);
  3285 
  3280 
  3286 	// Check view navigation
  3281 	// Check view navigation
  3287 	i=0;
  3282 	i=0;
  3288 	test(view->FirstL(active->iStatus));
  3283 	TEST(view->FirstL(active->iStatus));
  3289 	do
  3284 	do
  3290 		{
  3285 		{
  3291 		active->StartL();
  3286 		active->StartL();
  3292 		CActiveScheduler::Start();
  3287 		CActiveScheduler::Start();
  3293 		test(active->iStatus == KErrNone);
  3288 		TEST2(active->iStatus.Int(), KErrNone);
  3294 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3289 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3295 		}
  3290 		}
  3296 	while(view->NextL(active->iStatus));
  3291 	while(view->NextL(active->iStatus));
  3297 	RDebug::Print(_L("==\n"));
  3292 	TheTest.Printf(_L("==\n"));
  3298 	test(i == count);
  3293 	TEST2(i, count);
  3299 	test(view->FirstL(active->iStatus));
  3294 	TEST(view->FirstL(active->iStatus));
  3300 	active->StartL();
  3295 	active->StartL();
  3301 	CActiveScheduler::Start();
  3296 	CActiveScheduler::Start();
  3302 	test(active->iStatus == KErrNone);
  3297 	TEST2(active->iStatus.Int(), KErrNone);
  3303 
  3298 
  3304 	// Check that changes work after a backup
  3299 	// Check that changes work after a backup
  3305 	DelayL(1000000);
  3300 	DelayL(1000000);
  3306 	StartBackupL();
  3301 	StartBackupL();
  3307 	DelayL(1000000);
  3302 	DelayL(1000000);
  3308 	TestLogClosedL();
  3303 	TestLogClosedL();
  3309 	EndBackupL();
  3304 	EndBackupL();
  3310 	TestLogOpenL();
  3305 	TestLogOpenL();
  3311 
  3306 
  3312 	// Delete some events
  3307 	// Delete some events
  3313 	test(KTestEventNum >= 10);
  3308 	TEST(KTestEventNum >= 10);
  3314 	changeObs->StartCollectingChanges();
  3309 	changeObs->StartCollectingChanges();
  3315 	for(i=1; i<KTestEventNum; i+=2)
  3310 	for(i=1; i<KTestEventNum; i+=2)
  3316 		{
  3311 		{
  3317 		active->StartL();
  3312 		active->StartL();
  3318 		aClient.DeleteEvent(TLogId(i), active->iStatus);
  3313 		aClient.DeleteEvent(TLogId(i), active->iStatus);
  3319 		CActiveScheduler::Start();
  3314 		CActiveScheduler::Start();
  3320 		test(active->iStatus == KErrNone);
  3315 		TEST2(active->iStatus.Int(), KErrNone);
  3321 		}
  3316 		}
  3322 
  3317 
  3323 	// Check changes
  3318 	// Check changes
  3324 	changeCount = changeObs->Changes().Count();
  3319 	changeCount = changeObs->Changes().Count();
  3325 	test(changeCount == 5); // 1,3,5,7,9
  3320 	TEST2(changeCount, 5); // 1,3,5,7,9
  3326 	for(i=0; i<changeCount; i++)
  3321 	for(i=0; i<changeCount; i++)
  3327 		{
  3322 		{
  3328 		test(changeObs->Changes().At(i, logId, viewIndex) == ELogChangeTypeEventDeleted);
  3323 		TEST2(changeObs->Changes().At(i, logId, viewIndex), ELogChangeTypeEventDeleted);
  3329 		test(logId == TLogId(2*i + 1));
  3324 		TEST2(logId, TLogId(2*i + 1));
  3330 		test(viewIndex == 10 - ((2*i) + 1));
  3325 		TEST2(viewIndex, 10 - ((2*i) + 1));
  3331 		}
  3326 		}
  3332 	
  3327 	
  3333 	// Check that changes work after a backup
  3328 	// Check that changes work after a backup
  3334 	StartBackupL();
  3329 	StartBackupL();
  3335 	DelayL(1000000);
  3330 	DelayL(1000000);
  3341 	changeObs->StartCollectingChanges();
  3336 	changeObs->StartCollectingChanges();
  3342 	event->SetContact(TLogContactItemId(0));
  3337 	event->SetContact(TLogContactItemId(0));
  3343 	active->StartL();
  3338 	active->StartL();
  3344 	aClient.AddEvent(*event, active->iStatus);
  3339 	aClient.AddEvent(*event, active->iStatus);
  3345 	CActiveScheduler::Start();
  3340 	CActiveScheduler::Start();
  3346 	test(active->iStatus == KErrNone);
  3341 	TEST2(active->iStatus.Int(), KErrNone);
  3347 	count = view->CountL();
  3342 	count = view->CountL();
  3348 	test(count == KTestEventNum + 1 - 5);
  3343 	TEST2(count, KTestEventNum + 1 - 5);
  3349 	test(event->Id() ==  KTestEventNum + 1);
  3344 	TEST2(event->Id(),  KTestEventNum + 1);
  3350 
  3345 
  3351 	// Check changes
  3346 	// Check changes
  3352 	test(!changeObs->HaveChanges());
  3347 	TEST(!changeObs->HaveChanges());
  3353 
  3348 
  3354 	// Check view navigation
  3349 	// Check view navigation
  3355 	i=0;
  3350 	i=0;
  3356 	test(view->FirstL(active->iStatus));
  3351 	TEST(view->FirstL(active->iStatus));
  3357 	do
  3352 	do
  3358 		{
  3353 		{
  3359 		active->StartL();
  3354 		active->StartL();
  3360 		CActiveScheduler::Start();
  3355 		CActiveScheduler::Start();
  3361 		test(active->iStatus == KErrNone);
  3356 		TEST2(active->iStatus.Int(), KErrNone);
  3362 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3357 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3363 		}
  3358 		}
  3364 	while(view->NextL(active->iStatus));
  3359 	while(view->NextL(active->iStatus));
  3365 	RDebug::Print(_L("==\n"));
  3360 	TheTest.Printf(_L("==\n"));
  3366 	test(i == count);
  3361 	TEST2(i, count);
  3367 	test(view->FirstL(active->iStatus));
  3362 	TEST(view->FirstL(active->iStatus));
  3368 	active->StartL();
  3363 	active->StartL();
  3369 	CActiveScheduler::Start();
  3364 	CActiveScheduler::Start();
  3370 	test(active->iStatus == KErrNone);
  3365 	TEST2(active->iStatus.Int(), KErrNone);
  3371 
  3366 
  3372 	// Check that changes work after a backup
  3367 	// Check that changes work after a backup
  3373 	StartBackupL();
  3368 	StartBackupL();
  3374 	DelayL(1000000);
  3369 	DelayL(1000000);
  3375 	TestLogClosedL();
  3370 	TestLogClosedL();
  3379 	// Delete event which isn't in view
  3374 	// Delete event which isn't in view
  3380 	changeObs->StartCollectingChanges();
  3375 	changeObs->StartCollectingChanges();
  3381 	active->StartL();
  3376 	active->StartL();
  3382 	aClient.DeleteEvent(event->Id(), active->iStatus);
  3377 	aClient.DeleteEvent(event->Id(), active->iStatus);
  3383 	CActiveScheduler::Start();
  3378 	CActiveScheduler::Start();
  3384 	test(active->iStatus == KErrNone);
  3379 	TEST2(active->iStatus.Int(), KErrNone);
  3385 	count = view->CountL();
  3380 	count = view->CountL();
  3386 	test(count == KTestEventNum + 1 - 5);
  3381 	TEST2(count, KTestEventNum + 1 - 5);
  3387 
  3382 
  3388 	// Check changes
  3383 	// Check changes
  3389 	test(!changeObs->HaveChanges());
  3384 	TEST(!changeObs->HaveChanges());
  3390 
  3385 
  3391 	// Check view navigation
  3386 	// Check view navigation
  3392 	i=0;
  3387 	i=0;
  3393 	test(view->FirstL(active->iStatus));
  3388 	TEST(view->FirstL(active->iStatus));
  3394 	do
  3389 	do
  3395 		{
  3390 		{
  3396 		active->StartL();
  3391 		active->StartL();
  3397 		CActiveScheduler::Start();
  3392 		CActiveScheduler::Start();
  3398 		test(active->iStatus == KErrNone);
  3393 		TEST2(active->iStatus.Int(), KErrNone);
  3399 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3394 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3400 		}
  3395 		}
  3401 	while(view->NextL(active->iStatus));
  3396 	while(view->NextL(active->iStatus));
  3402 	RDebug::Print(_L("==\n"));
  3397 	TheTest.Printf(_L("==\n"));
  3403 	test(i == count);
  3398 	TEST2(i, count);
  3404 	test(view->FirstL(active->iStatus));
  3399 	TEST(view->FirstL(active->iStatus));
  3405 	active->StartL();
  3400 	active->StartL();
  3406 	CActiveScheduler::Start();
  3401 	CActiveScheduler::Start();
  3407 	test(active->iStatus == KErrNone);
  3402 	TEST2(active->iStatus.Int(), KErrNone);
  3408 
  3403 
  3409 	// Check that changes work after a backup
  3404 	// Check that changes work after a backup
  3410 	StartBackupL();
  3405 	StartBackupL();
  3411 	DelayL(1000000);
  3406 	DelayL(1000000);
  3412 	TestLogClosedL();
  3407 	TestLogClosedL();
  3417 	changeObs->StartCollectingChanges();
  3412 	changeObs->StartCollectingChanges();
  3418 	event->SetContact(TLogContactItemId(0));
  3413 	event->SetContact(TLogContactItemId(0));
  3419 	active->StartL();
  3414 	active->StartL();
  3420 	aClient.AddEvent(*event, active->iStatus);
  3415 	aClient.AddEvent(*event, active->iStatus);
  3421 	CActiveScheduler::Start();
  3416 	CActiveScheduler::Start();
  3422 	test(active->iStatus == KErrNone);
  3417 	TEST2(active->iStatus.Int(), KErrNone);
  3423 	count = view->CountL();
  3418 	count = view->CountL();
  3424 	test(count == KTestEventNum + 1 - 5);
  3419 	TEST2(count, KTestEventNum + 1 - 5);
  3425 	test(event->Id() ==  KTestEventNum + 2);
  3420 	TEST2(event->Id(), KTestEventNum + 2);
  3426 
  3421 
  3427 	// Check changes
  3422 	// Check changes
  3428 	test(!changeObs->HaveChanges());
  3423 	TEST(!changeObs->HaveChanges());
  3429 
  3424 
  3430 	// Check view navigation
  3425 	// Check view navigation
  3431 	i=0;
  3426 	i=0;
  3432 	test(view->FirstL(active->iStatus));
  3427 	TEST(view->FirstL(active->iStatus));
  3433 	do
  3428 	do
  3434 		{
  3429 		{
  3435 		active->StartL();
  3430 		active->StartL();
  3436 		CActiveScheduler::Start();
  3431 		CActiveScheduler::Start();
  3437 		test(active->iStatus == KErrNone);
  3432 		TEST2(active->iStatus.Int(), KErrNone);
  3438 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3433 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3439 		}
  3434 		}
  3440 	while(view->NextL(active->iStatus));
  3435 	while(view->NextL(active->iStatus));
  3441 	RDebug::Print(_L("==\n"));
  3436 	TheTest.Printf(_L("==\n"));
  3442 	test(i == count);
  3437 	TEST2(i, count);
  3443 	test(view->FirstL(active->iStatus));
  3438 	TEST(view->FirstL(active->iStatus));
  3444 	active->StartL();
  3439 	active->StartL();
  3445 	CActiveScheduler::Start();
  3440 	CActiveScheduler::Start();
  3446 	test(active->iStatus == KErrNone);
  3441 	TEST2(active->iStatus.Int(), KErrNone);
  3447 
  3442 
  3448 	// Check that changes work after a backup
  3443 	// Check that changes work after a backup
  3449 	StartBackupL();
  3444 	StartBackupL();
  3450 	DelayL(1000000);
  3445 	DelayL(1000000);
  3451 	TestLogClosedL();
  3446 	TestLogClosedL();
  3456 	changeObs->StartCollectingChanges();
  3451 	changeObs->StartCollectingChanges();
  3457 	event->SetContact(KTestContact);
  3452 	event->SetContact(KTestContact);
  3458 	active->StartL();
  3453 	active->StartL();
  3459 	aClient.ChangeEvent(*event, active->iStatus);
  3454 	aClient.ChangeEvent(*event, active->iStatus);
  3460 	CActiveScheduler::Start();
  3455 	CActiveScheduler::Start();
  3461 	test(active->iStatus == KErrNone);
  3456 	TEST2(active->iStatus.Int(), KErrNone);
  3462 	count = view->CountL();
  3457 	count = view->CountL();
  3463 	test(count == KTestEventNum + 2 - 5);
  3458 	TEST2(count, KTestEventNum + 2 - 5);
  3464 	test(event->Id() ==  KTestEventNum + 2); // Shouldn't change
  3459 	TEST2(event->Id(), KTestEventNum + 2); // Shouldn't change
  3465 
  3460 
  3466 	// Check changes
  3461 	// Check changes
  3467 	changeCount = changeObs->Changes().Count();
  3462 	changeCount = changeObs->Changes().Count();
  3468 	test(changeCount == 1);
  3463 	TEST2(changeCount, 1);
  3469 	type = changeObs->Changes().At(0, logId, viewIndex);
  3464 	type = changeObs->Changes().At(0, logId, viewIndex);
  3470 	test(type == ELogChangeTypeEventAdded);
  3465 	TEST2(type, ELogChangeTypeEventAdded);
  3471 	test(logId == KTestEventNum + 2);
  3466 	TEST2(logId, KTestEventNum + 2);
  3472 	test(viewIndex == 0);
  3467 	TEST2(viewIndex, 0);
  3473 
  3468 
  3474 	// Check view navigation
  3469 	// Check view navigation
  3475 	i=0;
  3470 	i=0;
  3476 	test(view->FirstL(active->iStatus));
  3471 	TEST(view->FirstL(active->iStatus));
  3477 	do
  3472 	do
  3478 		{
  3473 		{
  3479 		active->StartL();
  3474 		active->StartL();
  3480 		CActiveScheduler::Start();
  3475 		CActiveScheduler::Start();
  3481 		test(active->iStatus == KErrNone);
  3476 		TEST2(active->iStatus.Int(), KErrNone);
  3482 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3477 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3483 		}
  3478 		}
  3484 	while(view->NextL(active->iStatus));
  3479 	while(view->NextL(active->iStatus));
  3485 	RDebug::Print(_L("==\n"));
  3480 	TheTest.Printf(_L("==\n"));
  3486 	test(i == count);
  3481 	TEST2(i, count);
  3487 	test(view->FirstL(active->iStatus));
  3482 	TEST(view->FirstL(active->iStatus));
  3488 	active->StartL();
  3483 	active->StartL();
  3489 	CActiveScheduler::Start();
  3484 	CActiveScheduler::Start();
  3490 	test(active->iStatus == KErrNone);
  3485 	TEST2(active->iStatus.Int(), KErrNone);
  3491 
  3486 
  3492 	// Check that changes work after a backup
  3487 	// Check that changes work after a backup
  3493 	StartBackupL();
  3488 	StartBackupL();
  3494 	DelayL(1000000);
  3489 	DelayL(1000000);
  3495 	TestLogClosedL();
  3490 	TestLogClosedL();
  3500 	changeObs->StartCollectingChanges();
  3495 	changeObs->StartCollectingChanges();
  3501 	event->SetDescription(_L("Test"));
  3496 	event->SetDescription(_L("Test"));
  3502 	active->StartL();
  3497 	active->StartL();
  3503 	aClient.ChangeEvent(*event, active->iStatus);
  3498 	aClient.ChangeEvent(*event, active->iStatus);
  3504 	CActiveScheduler::Start();
  3499 	CActiveScheduler::Start();
  3505 	test(active->iStatus == KErrNone);
  3500 	TEST2(active->iStatus.Int(), KErrNone);
  3506 	count = view->CountL();
  3501 	count = view->CountL();
  3507 	test(count == KTestEventNum + 2 - 5); // Shouldn't change
  3502 	TEST2(count, KTestEventNum + 2 - 5); // Shouldn't change
  3508 	test(event->Id() ==  KTestEventNum + 2); // Shouldn't change
  3503 	TEST2(event->Id(), KTestEventNum + 2); // Shouldn't change
  3509 
  3504 
  3510 	// Check changes
  3505 	// Check changes
  3511 	changeCount = changeObs->Changes().Count();
  3506 	changeCount = changeObs->Changes().Count();
  3512 	test(changeCount == 1);
  3507 	TEST2(changeCount, 1);
  3513 	type = changeObs->Changes().At(0, logId, viewIndex);
  3508 	type = changeObs->Changes().At(0, logId, viewIndex);
  3514 	test(type == ELogChangeTypeEventChanged);
  3509 	TEST2(type, ELogChangeTypeEventChanged);
  3515 	test(logId == KTestEventNum + 2);
  3510 	TEST2(logId, KTestEventNum + 2);
  3516 	test(viewIndex == 0);
  3511 	TEST2(viewIndex, 0);
  3517 
  3512 
  3518 	// Check that changes work after a backup
  3513 	// Check that changes work after a backup
  3519 	StartBackupL();
  3514 	StartBackupL();
  3520 	DelayL(1000000);
  3515 	DelayL(1000000);
  3521 	TestLogClosedL();
  3516 	TestLogClosedL();
  3526 	changeObs->StartCollectingChanges();
  3521 	changeObs->StartCollectingChanges();
  3527 	event->SetContact(0);
  3522 	event->SetContact(0);
  3528 	active->StartL();
  3523 	active->StartL();
  3529 	aClient.ChangeEvent(*event, active->iStatus);
  3524 	aClient.ChangeEvent(*event, active->iStatus);
  3530 	CActiveScheduler::Start();
  3525 	CActiveScheduler::Start();
  3531 	test(active->iStatus == KErrNone);
  3526 	TEST2(active->iStatus.Int(), KErrNone);
  3532 	count = view->CountL();
  3527 	count = view->CountL();
  3533 	test(count == KTestEventNum + 2 - 5 - 1); // one less now
  3528 	TEST2(count, KTestEventNum + 2 - 5 - 1); // one less now
  3534 
  3529 
  3535 	// Check changes
  3530 	// Check changes
  3536 	changeCount = changeObs->Changes().Count();
  3531 	changeCount = changeObs->Changes().Count();
  3537 	test(changeCount == 1);
  3532 	TEST2(changeCount, 1);
  3538 	type = changeObs->Changes().At(0, logId, viewIndex);
  3533 	type = changeObs->Changes().At(0, logId, viewIndex);
  3539 	test(type == ELogChangeTypeEventDeleted);
  3534 	TEST2(type, ELogChangeTypeEventDeleted);
  3540 	test(logId == KTestEventNum + 2);
  3535 	TEST2(logId, KTestEventNum + 2);
  3541 	test(viewIndex == 0);
  3536 	TEST2(viewIndex, 0);
  3542 
  3537 
  3543 	// Navigate part way through the view so we have
  3538 	// Navigate part way through the view so we have
  3544 	// a cursor position part way through...
  3539 	// a cursor position part way through...
  3545 	i=0;
  3540 	i=0;
  3546 	count = view->CountL();
  3541 	count = view->CountL();
  3547 	test(view->FirstL(active->iStatus));
  3542 	TEST(view->FirstL(active->iStatus));
  3548 	do
  3543 	do
  3549 		{
  3544 		{
  3550 		active->StartL();
  3545 		active->StartL();
  3551 		CActiveScheduler::Start();
  3546 		CActiveScheduler::Start();
  3552 		test(active->iStatus == KErrNone);
  3547 		TEST2(active->iStatus.Int(), KErrNone);
  3553 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  3548 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3554 		}
  3549 		}
  3555 	while(view->NextL(active->iStatus));
  3550 	while(view->NextL(active->iStatus));
  3556 	RDebug::Print(_L("==\n"));
  3551 	TheTest.Printf(_L("==\n"));
  3557 	test(i == count);
  3552 	TEST2(i, count);
  3558 	test(view->Event().Id() == TLogId(0));
  3553 	TEST2(view->Event().Id(), TLogId(0));
  3559 
  3554 
  3560 	// Save id
  3555 	// Save id
  3561 	TLogId savedId = view->Event().Id();
  3556 	TLogId savedId = view->Event().Id();
  3562 
  3557 
  3563 	// Go one back
  3558 	// Go one back
  3564 	test(view->PreviousL(active->iStatus));
  3559 	TEST(view->PreviousL(active->iStatus));
  3565 	active->StartL();
  3560 	active->StartL();
  3566 	CActiveScheduler::Start();
  3561 	CActiveScheduler::Start();
  3567 	test(active->iStatus == KErrNone);
  3562 	TEST2(active->iStatus.Int(), KErrNone);
  3568 
  3563 
  3569 	// Check that changes work after a backup
  3564 	// Check that changes work after a backup
  3570 	StartBackupL();
  3565 	StartBackupL();
  3571 	DelayL(1000000);
  3566 	DelayL(1000000);
  3572 	TestLogClosedL();
  3567 	TestLogClosedL();
  3577 	changeObs->StartCollectingChanges();
  3572 	changeObs->StartCollectingChanges();
  3578 	event->SetContact(KTestContact);
  3573 	event->SetContact(KTestContact);
  3579 	active->StartL();
  3574 	active->StartL();
  3580 	aClient.AddEvent(*event, active->iStatus);
  3575 	aClient.AddEvent(*event, active->iStatus);
  3581 	CActiveScheduler::Start();
  3576 	CActiveScheduler::Start();
  3582 	test(active->iStatus == KErrNone);
  3577 	TEST2(active->iStatus.Int(), KErrNone);
  3583 	count = view->CountL();
  3578 	count = view->CountL();
  3584 	test(count == KTestEventNum + 2 - 5); // one more now
  3579 	TEST2(count, KTestEventNum + 2 - 5); // one more now
  3585 	test(event->Id() ==  KTestEventNum + 3);
  3580 	TEST2(event->Id(), KTestEventNum + 3);
  3586 
  3581 
  3587 	// Check changes
  3582 	// Check changes
  3588 	changeCount = changeObs->Changes().Count();
  3583 	changeCount = changeObs->Changes().Count();
  3589 	test(changeCount == 1);
  3584 	TEST2(changeCount, 1);
  3590 	type = changeObs->Changes().At(0, logId, viewIndex);
  3585 	type = changeObs->Changes().At(0, logId, viewIndex);
  3591 	test(type == ELogChangeTypeEventAdded);
  3586 	TEST2(type, ELogChangeTypeEventAdded);
  3592 	test(logId == KTestEventNum + 3);
  3587 	TEST2(logId, KTestEventNum + 3);
  3593 	test(viewIndex == 0);
  3588 	TEST2(viewIndex, 0);
  3594 
  3589 
  3595 	// Check we can still go forward to the last record
  3590 	// Check we can still go forward to the last record
  3596 	test(view->NextL(active->iStatus));
  3591 	TEST(view->NextL(active->iStatus));
  3597 	active->StartL();
  3592 	active->StartL();
  3598 	CActiveScheduler::Start();
  3593 	CActiveScheduler::Start();
  3599 	test(active->iStatus == KErrNone);
  3594 	TEST2(active->iStatus.Int(), KErrNone);
  3600 	test(view->Event().Id() == savedId);
  3595 	TEST2(view->Event().Id(), savedId);
  3601 
  3596 
  3602 	// Go one back
  3597 	// Go one back
  3603 	test(view->PreviousL(active->iStatus));
  3598 	TEST(view->PreviousL(active->iStatus));
  3604 	active->StartL();
  3599 	active->StartL();
  3605 	CActiveScheduler::Start();
  3600 	CActiveScheduler::Start();
  3606 	test(active->iStatus == KErrNone);
  3601 	TEST2(active->iStatus.Int(), KErrNone);
  3607 
  3602 
  3608 	// Check that changes work after a backup
  3603 	// Check that changes work after a backup
  3609 	StartBackupL();
  3604 	StartBackupL();
  3610 	DelayL(1000000);
  3605 	DelayL(1000000);
  3611 	TestLogClosedL();
  3606 	TestLogClosedL();
  3616 	savedId = view->Event().Id();
  3611 	savedId = view->Event().Id();
  3617 	changeObs->StartCollectingChanges();
  3612 	changeObs->StartCollectingChanges();
  3618 	active->StartL();
  3613 	active->StartL();
  3619 	aClient.DeleteEvent(savedId, active->iStatus);
  3614 	aClient.DeleteEvent(savedId, active->iStatus);
  3620 	CActiveScheduler::Start();
  3615 	CActiveScheduler::Start();
  3621 	test(active->iStatus == KErrNone);
  3616 	TEST2(active->iStatus.Int(), KErrNone);
  3622 	count = view->CountL();
  3617 	count = view->CountL();
  3623 	test(count == KTestEventNum + 2 - 5 - 1); // one less
  3618 	TEST2(count, KTestEventNum + 2 - 5 - 1); // one less
  3624 
  3619 
  3625 	// Check changes
  3620 	// Check changes
  3626 	changeCount = changeObs->Changes().Count();
  3621 	changeCount = changeObs->Changes().Count();
  3627 	test(changeCount == 1);
  3622 	TEST2(changeCount, 1);
  3628 	type = changeObs->Changes().At(0, logId, viewIndex);
  3623 	type = changeObs->Changes().At(0, logId, viewIndex);
  3629 	test(type == ELogChangeTypeEventDeleted);
  3624 	TEST2(type, ELogChangeTypeEventDeleted);
  3630 	test(logId == savedId);
  3625 	TEST2(logId, savedId);
  3631 	test(viewIndex == KTestEventNum + 2 - 5 - 2); // last but one event
  3626 	TEST2(viewIndex, KTestEventNum + 2 - 5 - 2); // last but one event
  3632 
  3627 
  3633 	// Check we're now at the end of the view
  3628 	// Check we're now at the end of the view
  3634 	test(!view->NextL(active->iStatus));
  3629 	TEST(!view->NextL(active->iStatus));
  3635 
  3630 
  3636 	// Go to the first record
  3631 	// Go to the first record
  3637 	test(view->FirstL(active->iStatus));
  3632 	TEST(view->FirstL(active->iStatus));
  3638 	active->StartL();
  3633 	active->StartL();
  3639 	CActiveScheduler::Start();
  3634 	CActiveScheduler::Start();
  3640 	test(active->iStatus == KErrNone);
  3635 	TEST2(active->iStatus.Int(), KErrNone);
  3641 
  3636 
  3642 	// Check that changes work after a backup
  3637 	// Check that changes work after a backup
  3643 	StartBackupL();
  3638 	StartBackupL();
  3644 	DelayL(1000000);
  3639 	DelayL(1000000);
  3645 	TestLogClosedL();
  3640 	TestLogClosedL();
  3650 	savedId = view->Event().Id();
  3645 	savedId = view->Event().Id();
  3651 	changeObs->StartCollectingChanges();
  3646 	changeObs->StartCollectingChanges();
  3652 	active->StartL();
  3647 	active->StartL();
  3653 	aClient.DeleteEvent(savedId, active->iStatus);
  3648 	aClient.DeleteEvent(savedId, active->iStatus);
  3654 	CActiveScheduler::Start();
  3649 	CActiveScheduler::Start();
  3655 	test(active->iStatus == KErrNone);
  3650 	TEST2(active->iStatus.Int(), KErrNone);
  3656 	count = view->CountL();
  3651 	count = view->CountL();
  3657 	test(count == KTestEventNum - 5);
  3652 	TEST2(count, KTestEventNum - 5);
  3658 
  3653 
  3659 	// Check changes
  3654 	// Check changes
  3660 	changeCount = changeObs->Changes().Count();
  3655 	changeCount = changeObs->Changes().Count();
  3661 	test(changeCount == 1);
  3656 	TEST2(changeCount, 1);
  3662 	type = changeObs->Changes().At(0, logId, viewIndex);
  3657 	type = changeObs->Changes().At(0, logId, viewIndex);
  3663 	test(type == ELogChangeTypeEventDeleted);
  3658 	TEST2(type, ELogChangeTypeEventDeleted);
  3664 	test(logId == savedId);
  3659 	TEST2(logId, savedId);
  3665 	test(viewIndex == 0); // first item
  3660 	TEST2(viewIndex, 0); // first item
  3666 
  3661 
  3667 	// Check 'next' navigation can be performed correctly
  3662 	// Check 'next' navigation can be performed correctly
  3668 	count = 0;
  3663 	count = 0;
  3669 	view->NextL(active->iStatus);
  3664 	view->NextL(active->iStatus);
  3670 	do
  3665 	do
  3671 		{
  3666 		{
  3672 		active->StartL();
  3667 		active->StartL();
  3673 		CActiveScheduler::Start();
  3668 		CActiveScheduler::Start();
  3674 		test(active->iStatus == KErrNone);
  3669 		TEST2(active->iStatus.Int(), KErrNone);
  3675 		++count;
  3670 		++count;
  3676 		}
  3671 		}
  3677 	while(view->NextL(active->iStatus));
  3672 	while(view->NextL(active->iStatus));
  3678 	test(count == KTestEventNum - 5 - 1);
  3673 	TEST2(count, KTestEventNum - 5 - 1);
  3679 
  3674 
  3680 	// Check last record
  3675 	// Check last record
  3681 	savedId = view->Event().Id();
  3676 	savedId = view->Event().Id();
  3682 	test(view->LastL(active->iStatus));
  3677 	TEST(view->LastL(active->iStatus));
  3683 	active->StartL();
  3678 	active->StartL();
  3684 	CActiveScheduler::Start();
  3679 	CActiveScheduler::Start();
  3685 	test(active->iStatus == KErrNone);
  3680 	TEST2(active->iStatus.Int(), KErrNone);
  3686 	test(savedId == view->Event().Id());
  3681 	TEST2(savedId, view->Event().Id());
  3687 
  3682 
  3688 	// Check that changes work after a backup
  3683 	// Check that changes work after a backup
  3689 	StartBackupL();
  3684 	StartBackupL();
  3690 	DelayL(1000000);
  3685 	DelayL(1000000);
  3691 	TestLogClosedL();
  3686 	TestLogClosedL();
  3696 	savedId = view->Event().Id();
  3691 	savedId = view->Event().Id();
  3697 	changeObs->StartCollectingChanges();
  3692 	changeObs->StartCollectingChanges();
  3698 	active->StartL();
  3693 	active->StartL();
  3699 	aClient.DeleteEvent(savedId, active->iStatus);
  3694 	aClient.DeleteEvent(savedId, active->iStatus);
  3700 	CActiveScheduler::Start();
  3695 	CActiveScheduler::Start();
  3701 	test(active->iStatus == KErrNone);
  3696 	TEST2(active->iStatus.Int(), KErrNone);
  3702 	count = view->CountL();
  3697 	count = view->CountL();
  3703 	test(count == KTestEventNum - 6);
  3698 	TEST2(count, KTestEventNum - 6);
  3704 
  3699 
  3705 	// Check changes
  3700 	// Check changes
  3706 	changeCount = changeObs->Changes().Count();
  3701 	changeCount = changeObs->Changes().Count();
  3707 	test(changeCount == 1);
  3702 	TEST2(changeCount, 1);
  3708 	type = changeObs->Changes().At(0, logId, viewIndex);
  3703 	type = changeObs->Changes().At(0, logId, viewIndex);
  3709 	test(type == ELogChangeTypeEventDeleted);
  3704 	TEST2(type, ELogChangeTypeEventDeleted);
  3710 	test(logId == savedId);
  3705 	TEST2(logId, savedId);
  3711 	test(viewIndex == count); // There's now one less item, and we deleted the last item of the previous view
  3706 	TEST2(viewIndex, count); // There's now one less item, and we deleted the last item of the previous view
  3712 
  3707 
  3713 	// Check we're still at the end of the view
  3708 	// Check we're still at the end of the view
  3714 	test(!view->NextL(active->iStatus));
  3709 	TEST(!view->NextL(active->iStatus));
  3715 
  3710 
  3716 	CleanupStack::PopAndDestroy(5, event); // view, changeObs, active, filter, event
  3711 	CleanupStack::PopAndDestroy(5, event); // view, changeObs, active, filter, event
  3717 	}
  3712 	}
  3718 
  3713 
  3719 /**
  3714 /**
  3726 @SYMTestExpectedResults Test must not fail
  3721 @SYMTestExpectedResults Test must not fail
  3727 @SYMREQ                 REQ0000
  3722 @SYMREQ                 REQ0000
  3728 */
  3723 */
  3729 LOCAL_C void TestViewChangeEvents2L(CLogClient& aClient)
  3724 LOCAL_C void TestViewChangeEvents2L(CLogClient& aClient)
  3730 	{
  3725 	{
  3731 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0870 "));
  3726 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0870 "));
  3732 	// Transients
  3727 	// Transients
  3733 	TInt i=0;
  3728 	TInt i=0;
  3734 	TInt count;
  3729 	TInt count;
  3735 	TBuf<1> description; description.SetLength(1);
  3730 	TBuf<1> description; description.SetLength(1);
  3736 	TInt changeCount;
  3731 	TInt changeCount;
  3786 		//
  3781 		//
  3787 		active->StartL();
  3782 		active->StartL();
  3788 		aClient.AddEvent(*event, active->iStatus);
  3783 		aClient.AddEvent(*event, active->iStatus);
  3789 		CActiveScheduler::Start();
  3784 		CActiveScheduler::Start();
  3790 		TEST2(active->iStatus.Int(), KErrNone);
  3785 		TEST2(active->iStatus.Int(), KErrNone);
  3791 		TEST(event->Id() == runningNewId++);
  3786 		TEST2(event->Id(), runningNewId++);
  3792 	User::After(1 * 1000000);
  3787 	User::After(1 * 1000000);
  3793 		}
  3788 		}
  3794 	//
  3789 	//
  3795 	TEST2(view->CountL(), 0);
  3790 	TEST2(view->CountL(), 0);
  3796 	active->StartL();
  3791 	active->StartL();
  3806 	do
  3801 	do
  3807 		{
  3802 		{
  3808 		active->StartL();
  3803 		active->StartL();
  3809 		CActiveScheduler::Start();
  3804 		CActiveScheduler::Start();
  3810 		TEST2(active->iStatus.Int(), KErrNone);
  3805 		TEST2(active->iStatus.Int(), KErrNone);
  3811 		RDebug::Print(_L("View Entry[%d]: Id: %d\n"), i++, view->Event().Id());
  3806 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  3812 		}
  3807 		}
  3813 	while(view->NextL(active->iStatus));
  3808 	while(view->NextL(active->iStatus));
  3814 	
  3809 	
  3815 	// Check addition change events
  3810 	// Check addition change events
  3816 	res = view->FirstL(active->iStatus);
  3811 	res = view->FirstL(active->iStatus);
  3827 	changeObs->StartCollectingChanges();
  3822 	changeObs->StartCollectingChanges();
  3828 	active->StartL();
  3823 	active->StartL();
  3829 	aClient.AddEvent(*event, active->iStatus);
  3824 	aClient.AddEvent(*event, active->iStatus);
  3830 	CActiveScheduler::Start();
  3825 	CActiveScheduler::Start();
  3831 	TEST2(active->iStatus.Int(), KErrNone);
  3826 	TEST2(active->iStatus.Int(), KErrNone);
  3832 	TEST(event->Id() == runningNewId++);
  3827 	TEST2(event->Id(), runningNewId++);
  3833 
  3828 
  3834 	// Check changes
  3829 	// Check changes
  3835 	changeCount = changeObs->Changes().Count();
  3830 	changeCount = changeObs->Changes().Count();
  3836 	TEST2(changeCount, 1);
  3831 	TEST2(changeCount, 1);
  3837 	type = changeObs->Changes().At(0, logId, viewIndex);
  3832 	type = changeObs->Changes().At(0, logId, viewIndex);
  3838 	TEST2(type, ELogChangeTypeEventAdded);
  3833 	TEST2(type, ELogChangeTypeEventAdded);
  3839 	TEST(logId == runningNewId-1);
  3834 	TEST2(logId, runningNewId-1);
  3840 	TEST2(viewIndex, 0); // 8, [7], 6, 5, 4, 2, 1, 0
  3835 	TEST2(viewIndex, 0); // 8, [7], 6, 5, 4, 2, 1, 0
  3841 
  3836 
  3842 	// Check we can go forward
  3837 	// Check we can go forward
  3843 	res = view->NextL(active->iStatus);
  3838 	res = view->NextL(active->iStatus);
  3844 	TEST(res);
  3839 	TEST(res);
  3857 	res = view->PreviousL(active->iStatus);
  3852 	res = view->PreviousL(active->iStatus);
  3858 	TEST(res);
  3853 	TEST(res);
  3859 	active->StartL();
  3854 	active->StartL();
  3860 	CActiveScheduler::Start();
  3855 	CActiveScheduler::Start();
  3861 	TEST2(active->iStatus.Int(), KErrNone); // [8], 7, 6, 5, 4, 2, 1, 0
  3856 	TEST2(active->iStatus.Int(), KErrNone); // [8], 7, 6, 5, 4, 2, 1, 0
  3862 	TEST(view->Event().Id() == TLogId(KChangeEventTest2NumberOfEventsInView+1));
  3857 	TEST2(view->Event().Id(), TLogId(KChangeEventTest2NumberOfEventsInView+1));
  3863 
  3858 
  3864 	// Delete added event
  3859 	// Delete added event
  3865 	changeObs->ResetChanges();
  3860 	changeObs->ResetChanges();
  3866 	changeCount = changeObs->Changes().Count();
  3861 	changeCount = changeObs->Changes().Count();
  3867 	TEST2(changeCount, 0);
  3862 	TEST2(changeCount, 0);
  3873 	// Check deletion changes
  3868 	// Check deletion changes
  3874 	changeCount = changeObs->Changes().Count();
  3869 	changeCount = changeObs->Changes().Count();
  3875 	TEST2(changeCount, 1);
  3870 	TEST2(changeCount, 1);
  3876 	type = changeObs->Changes().At(0, logId, viewIndex);
  3871 	type = changeObs->Changes().At(0, logId, viewIndex);
  3877 	TEST2(type, ELogChangeTypeEventDeleted);
  3872 	TEST2(type, ELogChangeTypeEventDeleted);
  3878 	TEST(logId == runningNewId-1);
  3873 	TEST2(logId, runningNewId-1);
  3879 	TEST2(viewIndex, 0);
  3874 	TEST2(viewIndex, 0);
  3880 
  3875 
  3881 	// Go to end of view
  3876 	// Go to end of view
  3882 	res = view->LastL(active->iStatus);
  3877 	res = view->LastL(active->iStatus);
  3883 	TEST(res);
  3878 	TEST(res);
  3884 	active->StartL();
  3879 	active->StartL();
  3885 	CActiveScheduler::Start();
  3880 	CActiveScheduler::Start();
  3886 	TEST2(active->iStatus.Int(), KErrNone);
  3881 	TEST2(active->iStatus.Int(), KErrNone);
  3887 	TEST(view->Event().Id() == TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  3882 	TEST2(view->Event().Id(), TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  3888 
  3883 
  3889 	// Add new event
  3884 	// Add new event
  3890 	description[0] = TUint16('X');
  3885 	description[0] = TUint16('X');
  3891 	event->SetDescription(description);
  3886 	event->SetDescription(description);
  3892 	//
  3887 	//
  3893 	changeObs->StartCollectingChanges();
  3888 	changeObs->StartCollectingChanges();
  3894 	active->StartL();
  3889 	active->StartL();
  3895 	aClient.AddEvent(*event, active->iStatus);
  3890 	aClient.AddEvent(*event, active->iStatus);
  3896 	CActiveScheduler::Start();
  3891 	CActiveScheduler::Start();
  3897 	TEST2(active->iStatus.Int(), KErrNone);
  3892 	TEST2(active->iStatus.Int(), KErrNone);
  3898 	TEST(event->Id() == runningNewId++);
  3893 	TEST2(event->Id(), runningNewId++);
  3899 
  3894 
  3900 	// Check changes
  3895 	// Check changes
  3901 	changeCount = changeObs->Changes().Count();
  3896 	changeCount = changeObs->Changes().Count();
  3902 	TEST2(changeCount, 1);
  3897 	TEST2(changeCount, 1);
  3903 	type = changeObs->Changes().At(0, logId, viewIndex);
  3898 	type = changeObs->Changes().At(0, logId, viewIndex);
  3904 	TEST2(type, ELogChangeTypeEventAdded);
  3899 	TEST2(type, ELogChangeTypeEventAdded);
  3905 	TEST(logId == runningNewId-1);
  3900 	TEST2(logId, runningNewId-1);
  3906 	TEST2(viewIndex, 0); // 9, 7, 6, 5, 4, 2, 1, [0]
  3901 	TEST2(viewIndex, 0); // 9, 7, 6, 5, 4, 2, 1, [0]
  3907 
  3902 
  3908 	// Check we can't go forward
  3903 	// Check we can't go forward
  3909 	res = view->NextL(active->iStatus);
  3904 	res = view->NextL(active->iStatus);
  3910 	TEST(!res);
  3905 	TEST(!res);
  3913 	res = view->FirstL(active->iStatus);
  3908 	res = view->FirstL(active->iStatus);
  3914 	TEST(res);
  3909 	TEST(res);
  3915 	active->StartL();
  3910 	active->StartL();
  3916 	CActiveScheduler::Start();
  3911 	CActiveScheduler::Start();
  3917 	TEST2(active->iStatus.Int(), KErrNone);
  3912 	TEST2(active->iStatus.Int(), KErrNone);
  3918 	TEST(view->Event().Id() == TLogId(runningNewId-1)); // 9, 7, 6, 5, 4, 2, 1, [0]
  3913 	TEST2(view->Event().Id(), TLogId(runningNewId-1)); // 9, 7, 6, 5, 4, 2, 1, [0]
  3919 
  3914 
  3920 	// Delete added event
  3915 	// Delete added event
  3921 	changeObs->ResetChanges();
  3916 	changeObs->ResetChanges();
  3922 	active->StartL();
  3917 	active->StartL();
  3923 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  3918 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  3927 	// Check deletion changes
  3922 	// Check deletion changes
  3928 	changeCount = changeObs->Changes().Count();
  3923 	changeCount = changeObs->Changes().Count();
  3929 	TEST2(changeCount, 1);
  3924 	TEST2(changeCount, 1);
  3930 	type = changeObs->Changes().At(0, logId, viewIndex);
  3925 	type = changeObs->Changes().At(0, logId, viewIndex);
  3931 	TEST2(type, ELogChangeTypeEventDeleted);
  3926 	TEST2(type, ELogChangeTypeEventDeleted);
  3932 	TEST(logId == runningNewId-1);
  3927 	TEST2(logId, runningNewId-1);
  3933 	TEST2(viewIndex, 0);
  3928 	TEST2(viewIndex, 0);
  3934 
  3929 
  3935 	// Go part way through view
  3930 	// Go part way through view
  3936 	res = view->NextL(active->iStatus);
  3931 	res = view->NextL(active->iStatus);
  3937 	TEST(res);
  3932 	TEST(res);
  3953 	changeObs->StartCollectingChanges();
  3948 	changeObs->StartCollectingChanges();
  3954 	active->StartL();
  3949 	active->StartL();
  3955 	aClient.AddEvent(*event, active->iStatus);
  3950 	aClient.AddEvent(*event, active->iStatus);
  3956 	CActiveScheduler::Start();
  3951 	CActiveScheduler::Start();
  3957 	TEST2(active->iStatus.Int(), KErrNone);
  3952 	TEST2(active->iStatus.Int(), KErrNone);
  3958 	TEST(event->Id() == runningNewId++);
  3953 	TEST2(event->Id(), runningNewId++);
  3959 
  3954 
  3960 	// Check changes
  3955 	// Check changes
  3961 	changeCount = changeObs->Changes().Count();
  3956 	changeCount = changeObs->Changes().Count();
  3962 	TEST2(changeCount, 1);
  3957 	TEST2(changeCount, 1);
  3963 	type = changeObs->Changes().At(0, logId, viewIndex);
  3958 	type = changeObs->Changes().At(0, logId, viewIndex);
  4033 	changeObs->StartCollectingChanges();
  4028 	changeObs->StartCollectingChanges();
  4034 	aClient.ChangeEvent(*event, active->iStatus);
  4029 	aClient.ChangeEvent(*event, active->iStatus);
  4035 	CActiveScheduler::Start();
  4030 	CActiveScheduler::Start();
  4036 	TEST2(active->iStatus.Int(), KErrNone);
  4031 	TEST2(active->iStatus.Int(), KErrNone);
  4037 	count = view->CountL();
  4032 	count = view->CountL();
  4038 	TEST(count == KChangeEventTest2NumberOfEventsInView+1);
  4033 	TEST2(count, KChangeEventTest2NumberOfEventsInView+1);
  4039 
  4034 
  4040 	// Check changes
  4035 	// Check changes
  4041 	changeCount = changeObs->Changes().Count();
  4036 	changeCount = changeObs->Changes().Count();
  4042 	TEST2(changeCount, 1);
  4037 	TEST2(changeCount, 1);
  4043 	type = changeObs->Changes().At(0, logId, viewIndex);
  4038 	type = changeObs->Changes().At(0, logId, viewIndex);
  4231 	active->StartL();
  4226 	active->StartL();
  4232 	aClient.DeleteEvent(TLogId(4), active->iStatus);
  4227 	aClient.DeleteEvent(TLogId(4), active->iStatus);
  4233 	CActiveScheduler::Start();
  4228 	CActiveScheduler::Start();
  4234 	TEST2(active->iStatus.Int(), KErrNone);
  4229 	TEST2(active->iStatus.Int(), KErrNone);
  4235 	count = view->CountL();
  4230 	count = view->CountL();
  4236 	TEST(count == KChangeEventTest2NumberOfEventsInView - 1);
  4231 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 1);
  4237 	changeCount = changeObs->Changes().Count();
  4232 	changeCount = changeObs->Changes().Count();
  4238 	TEST2(changeCount, 1);
  4233 	TEST2(changeCount, 1);
  4239 	type = changeObs->Changes().At(0, logId, viewIndex);
  4234 	type = changeObs->Changes().At(0, logId, viewIndex);
  4240 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4235 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4241 	TEST2(logId, TLogId(4));
  4236 	TEST2(logId, TLogId(4));
  4245 	active->StartL();
  4240 	active->StartL();
  4246 	aClient.DeleteEvent(TLogId(7), active->iStatus);
  4241 	aClient.DeleteEvent(TLogId(7), active->iStatus);
  4247 	CActiveScheduler::Start();
  4242 	CActiveScheduler::Start();
  4248 	TEST2(active->iStatus.Int(), KErrNone);
  4243 	TEST2(active->iStatus.Int(), KErrNone);
  4249 	count = view->CountL();
  4244 	count = view->CountL();
  4250 	TEST(count == KChangeEventTest2NumberOfEventsInView - 2);
  4245 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 2);
  4251 	changeCount = changeObs->Changes().Count();
  4246 	changeCount = changeObs->Changes().Count();
  4252 	TEST2(changeCount, 1);
  4247 	TEST2(changeCount, 1);
  4253 	type = changeObs->Changes().At(0, logId, viewIndex);
  4248 	type = changeObs->Changes().At(0, logId, viewIndex);
  4254 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4249 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4255 	TEST2(logId, TLogId(7));
  4250 	TEST2(logId, TLogId(7));
  4259 	active->StartL();
  4254 	active->StartL();
  4260 	aClient.DeleteEvent(TLogId(0), active->iStatus);
  4255 	aClient.DeleteEvent(TLogId(0), active->iStatus);
  4261 	CActiveScheduler::Start();
  4256 	CActiveScheduler::Start();
  4262 	TEST2(active->iStatus.Int(), KErrNone);
  4257 	TEST2(active->iStatus.Int(), KErrNone);
  4263 	count = view->CountL();
  4258 	count = view->CountL();
  4264 	TEST(count == KChangeEventTest2NumberOfEventsInView - 3);
  4259 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 3);
  4265 	changeCount = changeObs->Changes().Count();
  4260 	changeCount = changeObs->Changes().Count();
  4266 	TEST2(changeCount, 1);
  4261 	TEST2(changeCount, 1);
  4267 	type = changeObs->Changes().At(0, logId, viewIndex);
  4262 	type = changeObs->Changes().At(0, logId, viewIndex);
  4268 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4263 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4269 	TEST2(logId, TLogId(0));
  4264 	TEST2(logId, TLogId(0));
  4273 	active->StartL();
  4268 	active->StartL();
  4274 	aClient.DeleteEvent(TLogId(5), active->iStatus);
  4269 	aClient.DeleteEvent(TLogId(5), active->iStatus);
  4275 	CActiveScheduler::Start();
  4270 	CActiveScheduler::Start();
  4276 	TEST2(active->iStatus.Int(), KErrNone);
  4271 	TEST2(active->iStatus.Int(), KErrNone);
  4277 	count = view->CountL();
  4272 	count = view->CountL();
  4278 	TEST(count == KChangeEventTest2NumberOfEventsInView - 4);
  4273 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 4);
  4279 	changeCount = changeObs->Changes().Count();
  4274 	changeCount = changeObs->Changes().Count();
  4280 	TEST2(changeCount, 1);
  4275 	TEST2(changeCount, 1);
  4281 	type = changeObs->Changes().At(0, logId, viewIndex);
  4276 	type = changeObs->Changes().At(0, logId, viewIndex);
  4282 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4277 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4283 	TEST2(logId, TLogId(5));
  4278 	TEST2(logId, TLogId(5));
  4287 	active->StartL();
  4282 	active->StartL();
  4288 	aClient.DeleteEvent(TLogId(2), active->iStatus);
  4283 	aClient.DeleteEvent(TLogId(2), active->iStatus);
  4289 	CActiveScheduler::Start();
  4284 	CActiveScheduler::Start();
  4290 	TEST2(active->iStatus.Int(), KErrNone);
  4285 	TEST2(active->iStatus.Int(), KErrNone);
  4291 	count = view->CountL();
  4286 	count = view->CountL();
  4292 	TEST(count == KChangeEventTest2NumberOfEventsInView - 5);
  4287 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 5);
  4293 	changeCount = changeObs->Changes().Count();
  4288 	changeCount = changeObs->Changes().Count();
  4294 	TEST2(changeCount, 1);
  4289 	TEST2(changeCount, 1);
  4295 	type = changeObs->Changes().At(0, logId, viewIndex);
  4290 	type = changeObs->Changes().At(0, logId, viewIndex);
  4296 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4291 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4297 	TEST2(logId, TLogId(2));
  4292 	TEST2(logId, TLogId(2));
  4301 	active->StartL();
  4296 	active->StartL();
  4302 	aClient.DeleteEvent(TLogId(6), active->iStatus);
  4297 	aClient.DeleteEvent(TLogId(6), active->iStatus);
  4303 	CActiveScheduler::Start();
  4298 	CActiveScheduler::Start();
  4304 	TEST2(active->iStatus.Int(), KErrNone);
  4299 	TEST2(active->iStatus.Int(), KErrNone);
  4305 	count = view->CountL();
  4300 	count = view->CountL();
  4306 	TEST(count == KChangeEventTest2NumberOfEventsInView - 6);
  4301 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 6);
  4307 	changeCount = changeObs->Changes().Count();
  4302 	changeCount = changeObs->Changes().Count();
  4308 	TEST2(changeCount, 1);
  4303 	TEST2(changeCount, 1);
  4309 	type = changeObs->Changes().At(0, logId, viewIndex);
  4304 	type = changeObs->Changes().At(0, logId, viewIndex);
  4310 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4305 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4311 	TEST2(logId, TLogId(6));
  4306 	TEST2(logId, TLogId(6));
  4334 	active->StartL();
  4329 	active->StartL();
  4335 	aClient.DeleteEvent(TLogId(1), active->iStatus);
  4330 	aClient.DeleteEvent(TLogId(1), active->iStatus);
  4336 	CActiveScheduler::Start();
  4331 	CActiveScheduler::Start();
  4337 	TEST2(active->iStatus.Int(), KErrNone);
  4332 	TEST2(active->iStatus.Int(), KErrNone);
  4338 	count = view->CountL();
  4333 	count = view->CountL();
  4339 	TEST(count == KChangeEventTest2NumberOfEventsInView - 7);
  4334 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 7);
  4340 	changeCount = changeObs->Changes().Count();
  4335 	changeCount = changeObs->Changes().Count();
  4341 	TEST2(changeCount, 1);
  4336 	TEST2(changeCount, 1);
  4342 	type = changeObs->Changes().At(0, logId, viewIndex);
  4337 	type = changeObs->Changes().At(0, logId, viewIndex);
  4343 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4338 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4344 	TEST2(logId, TLogId(1));
  4339 	TEST2(logId, TLogId(1));
  4368 @SYMTestExpectedResults Test must not fail
  4363 @SYMTestExpectedResults Test must not fail
  4369 @SYMREQ                 REQ0000
  4364 @SYMREQ                 REQ0000
  4370 */
  4365 */
  4371 LOCAL_C void TestViewChangeEvents2aL(CLogClient& aClient)
  4366 LOCAL_C void TestViewChangeEvents2aL(CLogClient& aClient)
  4372 	{
  4367 	{
  4373 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0871 "));
  4368 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0871 "));
  4374 	// Transients
  4369 	// Transients
  4375 	TInt i=0;
  4370 	TInt i=0;
  4376 	TInt count;
  4371 	TInt count;
  4377 	TBuf<1> description; description.SetLength(1);
  4372 	TBuf<1> description; description.SetLength(1);
  4378 	TInt changeCount;
  4373 	TInt changeCount;
  4427 		event->SetDescription(description);
  4422 		event->SetDescription(description);
  4428 		//
  4423 		//
  4429 		active->StartL();
  4424 		active->StartL();
  4430 		aClient.AddEvent(*event, active->iStatus);
  4425 		aClient.AddEvent(*event, active->iStatus);
  4431 		CActiveScheduler::Start();
  4426 		CActiveScheduler::Start();
  4432 		test(active->iStatus == KErrNone);
  4427 		TEST2(active->iStatus.Int(), KErrNone);
  4433 		test(event->Id() == runningNewId++);
  4428 		TEST2(event->Id(), runningNewId++);
  4434 	User::After(1 * 1000000);
  4429 	User::After(1 * 1000000);
  4435 		}
  4430 		}
  4436 	//
  4431 	//
  4437 	test(view->CountL() == 0);
  4432 	TEST2(view->CountL(), 0);
  4438 	active->StartL();
  4433 	active->StartL();
  4439 	test(view->SetFilterL(*filter, active->iStatus));
  4434 	TEST(view->SetFilterL(*filter, active->iStatus));
  4440 	CActiveScheduler::Start();
  4435 	CActiveScheduler::Start();
  4441 	test(active->iStatus == KErrNone);
  4436 	TEST2(active->iStatus.Int(), KErrNone);
  4442 	count = view->CountL();
  4437 	count = view->CountL();
  4443 	test(count == KChangeEventTest2NumberOfEventsInView);
  4438 	TEST2(count, KChangeEventTest2NumberOfEventsInView);
  4444 
  4439 
  4445 
  4440 
  4446 	test(view->FirstL(active->iStatus));
  4441 	TEST(view->FirstL(active->iStatus));
  4447 	do
  4442 	do
  4448 		{
  4443 		{
  4449 		active->StartL();
  4444 		active->StartL();
  4450 		CActiveScheduler::Start();
  4445 		CActiveScheduler::Start();
  4451 		test(active->iStatus == KErrNone);
  4446 		TEST2(active->iStatus.Int(), KErrNone);
  4452 		RDebug::Print(_L("View Entry[%d]: Id: %d"), i++, view->Event().Id());
  4447 		TheTest.Printf(_L("View Entry[%d]: Id: %d\r\n"), i++, view->Event().Id());
  4453 		}
  4448 		}
  4454 	while(view->NextL(active->iStatus));
  4449 	while(view->NextL(active->iStatus));
  4455 	
  4450 	
  4456 	// Check addition change events
  4451 	// Check addition change events
  4457 	test(view->FirstL(active->iStatus));
  4452 	TEST(view->FirstL(active->iStatus));
  4458 	active->StartL();
  4453 	active->StartL();
  4459 	CActiveScheduler::Start();
  4454 	CActiveScheduler::Start();
  4460 	test(active->iStatus == KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4455 	TEST2(active->iStatus.Int(), KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4461 	test(view->Event().Id() == 7);
  4456 	TEST2(view->Event().Id(), 7);
  4462 
  4457 
  4463 	// Add a new entry - should appear as the first item in the view
  4458 	// Add a new entry - should appear as the first item in the view
  4464 	description[0] = TUint16('X');
  4459 	description[0] = TUint16('X');
  4465 	event->SetDescription(description);
  4460 	event->SetDescription(description);
  4466 
  4461 
  4474 	//
  4469 	//
  4475 	changeObs->StartCollectingChanges();
  4470 	changeObs->StartCollectingChanges();
  4476 	active->StartL();
  4471 	active->StartL();
  4477 	aClient.AddEvent(*event, active->iStatus);
  4472 	aClient.AddEvent(*event, active->iStatus);
  4478 	CActiveScheduler::Start();
  4473 	CActiveScheduler::Start();
  4479 	test(active->iStatus == KErrNone);
  4474 	TEST2(active->iStatus.Int(), KErrNone);
  4480 	test(event->Id() == runningNewId++);
  4475 	TEST2(event->Id(), runningNewId++);
  4481 
  4476 
  4482 	// Check changes
  4477 	// Check changes
  4483 	changeCount = changeObs->Changes().Count();
  4478 	changeCount = changeObs->Changes().Count();
  4484 	test(changeCount == 1);
  4479 	TEST2(changeCount, 1);
  4485 	type = changeObs->Changes().At(0, logId, viewIndex);
  4480 	type = changeObs->Changes().At(0, logId, viewIndex);
  4486 	test(type == ELogChangeTypeEventAdded);
  4481 	TEST2(type, ELogChangeTypeEventAdded);
  4487 	test(logId == runningNewId-1);
  4482 	TEST2(logId, runningNewId-1);
  4488 	test(viewIndex == 0); // 8, [7], 6, 5, 4, 2, 1, 0
  4483 	TEST2(viewIndex, 0); // 8, [7], 6, 5, 4, 2, 1, 0
  4489 
  4484 
  4490 	// Check we can go forward
  4485 	// Check we can go forward
  4491 	test(view->NextL(active->iStatus));
  4486 	TEST(view->NextL(active->iStatus));
  4492 	active->StartL();
  4487 	active->StartL();
  4493 	CActiveScheduler::Start();
  4488 	CActiveScheduler::Start();
  4494 	test(active->iStatus == KErrNone);
  4489 	TEST2(active->iStatus.Int(), KErrNone);
  4495 	test(view->Event().Id() == TLogId(6)); // 8, 7, [6], 5, 4, 2, 1, 0
  4490 	TEST2(view->Event().Id(), TLogId(6)); // 8, 7, [6], 5, 4, 2, 1, 0
  4496 
  4491 
  4497 	// Check we can now go back (new first entry)
  4492 	// Check we can now go back (new first entry)
  4498 	test(view->PreviousL(active->iStatus));
  4493 	TEST(view->PreviousL(active->iStatus));
  4499 	active->StartL();
  4494 	active->StartL();
  4500 	CActiveScheduler::Start();
  4495 	CActiveScheduler::Start();
  4501 	test(active->iStatus == KErrNone); // 8, [7], 6, 5, 4, 2, 1, 0
  4496 	TEST2(active->iStatus.Int(), KErrNone); // 8, [7], 6, 5, 4, 2, 1, 0
  4502 	test(view->Event().Id() == 7);
  4497 	TEST2(view->Event().Id(), 7);
  4503 	test(view->PreviousL(active->iStatus));
  4498 	TEST(view->PreviousL(active->iStatus));
  4504 	active->StartL();
  4499 	active->StartL();
  4505 	CActiveScheduler::Start();
  4500 	CActiveScheduler::Start();
  4506 	test(active->iStatus == KErrNone); // [8], 7, 6, 5, 4, 2, 1, 0
  4501 	TEST2(active->iStatus.Int(), KErrNone); // [8], 7, 6, 5, 4, 2, 1, 0
  4507 	test(view->Event().Id() == TLogId(KChangeEventTest2NumberOfEventsInView+1));
  4502 	TEST2(view->Event().Id(), TLogId(KChangeEventTest2NumberOfEventsInView+1));
  4508 
  4503 
  4509 	// Delete added event
  4504 	// Delete added event
  4510 	changeObs->ResetChanges();
  4505 	changeObs->ResetChanges();
  4511 	changeCount = changeObs->Changes().Count();
  4506 	changeCount = changeObs->Changes().Count();
  4512 	test(changeCount == 0);
  4507 	TEST2(changeCount, 0);
  4513 	active->StartL();
  4508 	active->StartL();
  4514 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4509 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4515 	CActiveScheduler::Start();
  4510 	CActiveScheduler::Start();
  4516 	test(active->iStatus == KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4511 	TEST2(active->iStatus.Int(), KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4517 
  4512 
  4518 	// Check deletion changes
  4513 	// Check deletion changes
  4519 	changeCount = changeObs->Changes().Count();
  4514 	changeCount = changeObs->Changes().Count();
  4520 	test(changeCount == 1);
  4515 	TEST2(changeCount, 1);
  4521 	type = changeObs->Changes().At(0, logId, viewIndex);
  4516 	type = changeObs->Changes().At(0, logId, viewIndex);
  4522 	test(type == ELogChangeTypeEventDeleted);
  4517 	TEST2(type, ELogChangeTypeEventDeleted);
  4523 	test(logId == runningNewId-1);
  4518 	TEST2(logId, runningNewId-1);
  4524 	test(viewIndex == 0);
  4519 	TEST2(viewIndex, 0);
  4525 
  4520 
  4526 	// Go to end of view
  4521 	// Go to end of view
  4527 	test(view->LastL(active->iStatus));
  4522 	TEST(view->LastL(active->iStatus));
  4528 	active->StartL();
  4523 	active->StartL();
  4529 	CActiveScheduler::Start();
  4524 	CActiveScheduler::Start();
  4530 	test(active->iStatus == KErrNone);
  4525 	TEST2(active->iStatus.Int(), KErrNone);
  4531 	test(view->Event().Id() == TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4526 	TEST2(view->Event().Id(), TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4532 
  4527 
  4533 	// Add new event
  4528 	// Add new event
  4534 	description[0] = TUint16('X');
  4529 	description[0] = TUint16('X');
  4535 	event->SetDescription(description);
  4530 	event->SetDescription(description);
  4536 
  4531 
  4544 	//
  4539 	//
  4545 	changeObs->StartCollectingChanges();
  4540 	changeObs->StartCollectingChanges();
  4546 	active->StartL();
  4541 	active->StartL();
  4547 	aClient.AddEvent(*event, active->iStatus);
  4542 	aClient.AddEvent(*event, active->iStatus);
  4548 	CActiveScheduler::Start();
  4543 	CActiveScheduler::Start();
  4549 	test(active->iStatus == KErrNone);
  4544 	TEST2(active->iStatus.Int(), KErrNone);
  4550 	test(event->Id() == runningNewId++);
  4545 	TEST2(event->Id(), runningNewId++);
  4551 
  4546 
  4552 	// Check changes
  4547 	// Check changes
  4553 	changeCount = changeObs->Changes().Count();
  4548 	changeCount = changeObs->Changes().Count();
  4554 	test(changeCount == 1);
  4549 	TEST2(changeCount, 1);
  4555 	type = changeObs->Changes().At(0, logId, viewIndex);
  4550 	type = changeObs->Changes().At(0, logId, viewIndex);
  4556 	test(type == ELogChangeTypeEventAdded);
  4551 	TEST2(type, ELogChangeTypeEventAdded);
  4557 	test(logId == runningNewId-1);
  4552 	TEST2(logId, runningNewId-1);
  4558 	test(viewIndex == 0); // 9, 7, 6, 5, 4, 2, 1, [0]
  4553 	TEST2(viewIndex, 0); // 9, 7, 6, 5, 4, 2, 1, [0]
  4559 
  4554 
  4560 	// Check we can't go forward
  4555 	// Check we can't go forward
  4561 	test(!view->NextL(active->iStatus));
  4556 	TEST(!view->NextL(active->iStatus));
  4562 
  4557 
  4563 	// Go back to the first record
  4558 	// Go back to the first record
  4564 	test(view->FirstL(active->iStatus));
  4559 	TEST(view->FirstL(active->iStatus));
  4565 	active->StartL();
  4560 	active->StartL();
  4566 	CActiveScheduler::Start();
  4561 	CActiveScheduler::Start();
  4567 	test(active->iStatus == KErrNone);
  4562 	TEST2(active->iStatus.Int(), KErrNone);
  4568 	test(view->Event().Id() == TLogId(runningNewId-1)); // 9, 7, 6, 5, 4, 2, 1, [0]
  4563 	TEST2(view->Event().Id(), TLogId(runningNewId-1)); // 9, 7, 6, 5, 4, 2, 1, [0]
  4569 
  4564 
  4570 	// Delete added event
  4565 	// Delete added event
  4571 	changeObs->ResetChanges();
  4566 	changeObs->ResetChanges();
  4572 	active->StartL();
  4567 	active->StartL();
  4573 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4568 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4574 	CActiveScheduler::Start();
  4569 	CActiveScheduler::Start();
  4575 	test(active->iStatus == KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4570 	TEST2(active->iStatus.Int(), KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4576 
  4571 
  4577 	// Check deletion changes
  4572 	// Check deletion changes
  4578 	changeCount = changeObs->Changes().Count();
  4573 	changeCount = changeObs->Changes().Count();
  4579 	test(changeCount == 1);
  4574 	TEST2(changeCount, 1);
  4580 	type = changeObs->Changes().At(0, logId, viewIndex);
  4575 	type = changeObs->Changes().At(0, logId, viewIndex);
  4581 	test(type == ELogChangeTypeEventDeleted);
  4576 	TEST2(type, ELogChangeTypeEventDeleted);
  4582 	test(logId == runningNewId-1);
  4577 	TEST2(logId, runningNewId-1);
  4583 	test(viewIndex == 0);
  4578 	TEST2(viewIndex, 0);
  4584 
  4579 
  4585 	// Go part way through view
  4580 	// Go part way through view
  4586 	test(view->NextL(active->iStatus));
  4581 	TEST(view->NextL(active->iStatus));
  4587 	active->StartL();
  4582 	active->StartL();
  4588 	CActiveScheduler::Start();
  4583 	CActiveScheduler::Start();
  4589 	test(active->iStatus == KErrNone);
  4584 	TEST2(active->iStatus.Int(), KErrNone);
  4590 	test(view->Event().Id() == TLogId(6)); // 7, [6], 5, 4, 2, 1, 0
  4585 	TEST2(view->Event().Id(), TLogId(6)); // 7, [6], 5, 4, 2, 1, 0
  4591 	test(view->NextL(active->iStatus));
  4586 	TEST(view->NextL(active->iStatus));
  4592 	active->StartL();
  4587 	active->StartL();
  4593 	CActiveScheduler::Start();
  4588 	CActiveScheduler::Start();
  4594 	test(active->iStatus == KErrNone);
  4589 	TEST2(active->iStatus.Int(), KErrNone);
  4595 	test(view->Event().Id() == TLogId(5)); // 7, 6, [5], 4, 2, 1, 0
  4590 	TEST2(view->Event().Id(), TLogId(5)); // 7, 6, [5], 4, 2, 1, 0
  4596 
  4591 
  4597 	// Add new event
  4592 	// Add new event
  4598 	description[0] = TUint16('X');
  4593 	description[0] = TUint16('X');
  4599 	event->SetDescription(description);
  4594 	event->SetDescription(description);
  4600 
  4595 
  4608 	//
  4603 	//
  4609 	changeObs->StartCollectingChanges();
  4604 	changeObs->StartCollectingChanges();
  4610 	active->StartL();
  4605 	active->StartL();
  4611 	aClient.AddEvent(*event, active->iStatus);
  4606 	aClient.AddEvent(*event, active->iStatus);
  4612 	CActiveScheduler::Start();
  4607 	CActiveScheduler::Start();
  4613 	test(active->iStatus == KErrNone);
  4608 	TEST2(active->iStatus.Int(), KErrNone);
  4614 	test(event->Id() == runningNewId++);
  4609 	TEST2(event->Id(), runningNewId++);
  4615 
  4610 
  4616 	// Check changes
  4611 	// Check changes
  4617 	changeCount = changeObs->Changes().Count();
  4612 	changeCount = changeObs->Changes().Count();
  4618 	test(changeCount == 1);
  4613 	TEST2(changeCount, 1);
  4619 	type = changeObs->Changes().At(0, logId, viewIndex);
  4614 	type = changeObs->Changes().At(0, logId, viewIndex);
  4620 	test(type == ELogChangeTypeEventAdded);
  4615 	TEST2(type, ELogChangeTypeEventAdded);
  4621 	test(logId == runningNewId-1);
  4616 	TEST2(logId, runningNewId-1);
  4622 	test(viewIndex == 0); // 10, 7, 6, [5], 4, 2, 1, 0
  4617 	TEST2(viewIndex, 0); // 10, 7, 6, [5], 4, 2, 1, 0
  4623 	changeObs->ResetChanges();
  4618 	changeObs->ResetChanges();
  4624 
  4619 
  4625 	// Work back to beginning
  4620 	// Work back to beginning
  4626 	test(view->PreviousL(active->iStatus));
  4621 	TEST(view->PreviousL(active->iStatus));
  4627 	active->StartL();
  4622 	active->StartL();
  4628 	CActiveScheduler::Start();
  4623 	CActiveScheduler::Start();
  4629 	test(active->iStatus == KErrNone);
  4624 	TEST2(active->iStatus.Int(), KErrNone);
  4630 	test(view->Event().Id() == TLogId(6)); // 10, 7, [6], 5, 4, 2, 1, 0
  4625 	TEST2(view->Event().Id(), TLogId(6)); // 10, 7, [6], 5, 4, 2, 1, 0
  4631 	test(view->PreviousL(active->iStatus));
  4626 	TEST(view->PreviousL(active->iStatus));
  4632 	active->StartL();
  4627 	active->StartL();
  4633 	CActiveScheduler::Start();
  4628 	CActiveScheduler::Start();
  4634 	test(active->iStatus == KErrNone);
  4629 	TEST2(active->iStatus.Int(), KErrNone);
  4635 	test(view->Event().Id() == TLogId(7)); // 10, [7], 6, 5, 4, 2, 1, 0
  4630 	TEST2(view->Event().Id(), TLogId(7)); // 10, [7], 6, 5, 4, 2, 1, 0
  4636 	test(view->PreviousL(active->iStatus));
  4631 	TEST(view->PreviousL(active->iStatus));
  4637 	active->StartL();
  4632 	active->StartL();
  4638 	CActiveScheduler::Start();
  4633 	CActiveScheduler::Start();
  4639 	test(active->iStatus == KErrNone);
  4634 	TEST2(active->iStatus.Int(), KErrNone);
  4640 	test(view->Event().Id() == runningNewId-1); // [10], 7, 6, 5, 4, 2, 1, 0
  4635 	TEST2(view->Event().Id(), runningNewId-1); // [10], 7, 6, 5, 4, 2, 1, 0
  4641 
  4636 
  4642 	// Delete added event
  4637 	// Delete added event
  4643 	changeCount = changeObs->Changes().Count();
  4638 	changeCount = changeObs->Changes().Count();
  4644 	test(changeCount == 0);
  4639 	TEST2(changeCount, 0);
  4645 	active->StartL();
  4640 	active->StartL();
  4646 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4641 	aClient.DeleteEvent(view->Event().Id(), active->iStatus);
  4647 	CActiveScheduler::Start();
  4642 	CActiveScheduler::Start();
  4648 	test(active->iStatus == KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4643 	TEST2(active->iStatus.Int(), KErrNone); // [7], 6, 5, 4, 2, 1, 0
  4649 
  4644 
  4650 	// Check deletion changes
  4645 	// Check deletion changes
  4651 	changeCount = changeObs->Changes().Count();
  4646 	changeCount = changeObs->Changes().Count();
  4652 	test(changeCount == 1);
  4647 	TEST2(changeCount, 1);
  4653 	type = changeObs->Changes().At(0, logId, viewIndex);
  4648 	type = changeObs->Changes().At(0, logId, viewIndex);
  4654 	test(type == ELogChangeTypeEventDeleted);
  4649 	TEST2(type, ELogChangeTypeEventDeleted);
  4655 	test(logId == runningNewId-1);
  4650 	TEST2(logId, runningNewId-1);
  4656 	test(viewIndex == 0);
  4651 	TEST2(viewIndex, 0);
  4657 	changeObs->ResetChanges();
  4652 	changeObs->ResetChanges();
  4658 
  4653 
  4659 	// Go back to the first record
  4654 	// Go back to the first record
  4660 	test(view->FirstL(active->iStatus));
  4655 	TEST(view->FirstL(active->iStatus));
  4661 	active->StartL();
  4656 	active->StartL();
  4662 	CActiveScheduler::Start();
  4657 	CActiveScheduler::Start();
  4663 	test(active->iStatus == KErrNone);
  4658 	TEST2(active->iStatus.Int(), KErrNone);
  4664 	test(view->Event().Id() == TLogId(7)); // [7], 6, 5, 4, 2, 1, 0
  4659 	TEST2(view->Event().Id(), TLogId(7)); // [7], 6, 5, 4, 2, 1, 0
  4665 
  4660 
  4666 	// Move one record forward
  4661 	// Move one record forward
  4667 	test(view->NextL(active->iStatus));
  4662 	TEST(view->NextL(active->iStatus));
  4668 	active->StartL();
  4663 	active->StartL();
  4669 	CActiveScheduler::Start();
  4664 	CActiveScheduler::Start();
  4670 	test(active->iStatus == KErrNone);
  4665 	TEST2(active->iStatus.Int(), KErrNone);
  4671 	test(view->Event().Id() == TLogId(6)); // 7, [6], 5, 4, 2, 1, 0
  4666 	TEST2(view->Event().Id(), TLogId(6)); // 7, [6], 5, 4, 2, 1, 0
  4672 
  4667 
  4673 	// Change 'Z' event so that it now appears in the view
  4668 	// Change 'Z' event so that it now appears in the view
  4674 	changeCount = changeObs->Changes().Count();
  4669 	changeCount = changeObs->Changes().Count();
  4675 	test(changeCount == 0);
  4670 	TEST2(changeCount ,0);
  4676 	active->StartL();
  4671 	active->StartL();
  4677 	event->SetId(TLogId(3));
  4672 	event->SetId(TLogId(3));
  4678 	aClient.GetEvent(*event, active->iStatus);
  4673 	aClient.GetEvent(*event, active->iStatus);
  4679 	CActiveScheduler::Start();
  4674 	CActiveScheduler::Start();
  4680 	test(active->iStatus == KErrNone);
  4675 	TEST2(active->iStatus.Int(), KErrNone);
  4681 	//
  4676 	//
  4682 	event->SetContact(KTestContact);
  4677 	event->SetContact(KTestContact);
  4683 	active->StartL();
  4678 	active->StartL();
  4684 
  4679 
  4685 	// Check that changes work after a backup
  4680 	// Check that changes work after a backup
  4690 	TestLogOpenL();
  4685 	TestLogOpenL();
  4691 
  4686 
  4692 	changeObs->StartCollectingChanges();
  4687 	changeObs->StartCollectingChanges();
  4693 	aClient.ChangeEvent(*event, active->iStatus);
  4688 	aClient.ChangeEvent(*event, active->iStatus);
  4694 	CActiveScheduler::Start();
  4689 	CActiveScheduler::Start();
  4695 	test(active->iStatus == KErrNone);
  4690 	TEST2(active->iStatus.Int(), KErrNone);
  4696 	count = view->CountL();
  4691 	count = view->CountL();
  4697 	test(count == KChangeEventTest2NumberOfEventsInView+1);
  4692 	TEST2(count, KChangeEventTest2NumberOfEventsInView+1);
  4698 
  4693 
  4699 	// Check changes
  4694 	// Check changes
  4700 	changeCount = changeObs->Changes().Count();
  4695 	changeCount = changeObs->Changes().Count();
  4701 	test(changeCount == 1);
  4696 	TEST2(changeCount, 1);
  4702 	type = changeObs->Changes().At(0, logId, viewIndex);
  4697 	type = changeObs->Changes().At(0, logId, viewIndex);
  4703 	test(type == ELogChangeTypeEventAdded); // Change resulted in an addition to the view
  4698 	TEST2(type, ELogChangeTypeEventAdded); // Change resulted in an addition to the view
  4704 	test(logId == TLogId(3));
  4699 	TEST2(logId, TLogId(3));
  4705 	test(viewIndex == 4); // 7, [6], 5, 4, 3, 2, 1, 0
  4700 	TEST2(viewIndex, 4); // 7, [6], 5, 4, 3, 2, 1, 0
  4706 	changeObs->ResetChanges();
  4701 	changeObs->ResetChanges();
  4707 
  4702 
  4708 	// Move forwards and check
  4703 	// Move forwards and check
  4709 	test(view->NextL(active->iStatus));
  4704 	TEST(view->NextL(active->iStatus));
  4710 	active->StartL();
  4705 	active->StartL();
  4711 	CActiveScheduler::Start();
  4706 	CActiveScheduler::Start();
  4712 	test(active->iStatus == KErrNone);
  4707 	TEST2(active->iStatus.Int(), KErrNone);
  4713 	test(view->Event().Id() == TLogId(5)); // 7, 6, [5], 4, 3, 2, 1, 0
  4708 	TEST2(view->Event().Id(), TLogId(5)); // 7, 6, [5], 4, 3, 2, 1, 0
  4714 	test(view->NextL(active->iStatus));
  4709 	TEST(view->NextL(active->iStatus));
  4715 	active->StartL();
  4710 	active->StartL();
  4716 	CActiveScheduler::Start();
  4711 	CActiveScheduler::Start();
  4717 	test(active->iStatus == KErrNone);
  4712 	TEST2(active->iStatus.Int(), KErrNone);
  4718 	test(view->Event().Id() == TLogId(4)); // 7, 6, 5, [4], 3, 2, 1, 0
  4713 	TEST2(view->Event().Id(), TLogId(4)); // 7, 6, 5, [4], 3, 2, 1, 0
  4719 	test(view->NextL(active->iStatus));
  4714 	TEST(view->NextL(active->iStatus));
  4720 	active->StartL();
  4715 	active->StartL();
  4721 	CActiveScheduler::Start();
  4716 	CActiveScheduler::Start();
  4722 	test(active->iStatus == KErrNone);
  4717 	TEST2(active->iStatus.Int(), KErrNone);
  4723 	test(view->Event().Id() == TLogId(3)); // 7, 6, 5, 4, [3], 2, 1, 0
  4718 	TEST2(view->Event().Id(), TLogId(3)); // 7, 6, 5, 4, [3], 2, 1, 0
  4724 
  4719 
  4725 	// Change 'Z' event so that its now missing from the view again
  4720 	// Change 'Z' event so that its now missing from the view again
  4726 	changeCount = changeObs->Changes().Count();
  4721 	changeCount = changeObs->Changes().Count();
  4727 	test(changeCount == 0);
  4722 	TEST2(changeCount ,0);
  4728 	active->StartL();
  4723 	active->StartL();
  4729 	event->SetId(TLogId(3));
  4724 	event->SetId(TLogId(3));
  4730 	aClient.GetEvent(*event, active->iStatus);
  4725 	aClient.GetEvent(*event, active->iStatus);
  4731 	CActiveScheduler::Start();
  4726 	CActiveScheduler::Start();
  4732 	test(active->iStatus == KErrNone);
  4727 	TEST2(active->iStatus.Int(), KErrNone);
  4733 	//
  4728 	//
  4734 	event->SetContact(0);
  4729 	event->SetContact(0);
  4735 	active->StartL();
  4730 	active->StartL();
  4736 
  4731 
  4737 	// Check that changes work after a backup
  4732 	// Check that changes work after a backup
  4742 	TestLogOpenL();
  4737 	TestLogOpenL();
  4743 
  4738 
  4744 	changeObs->StartCollectingChanges();
  4739 	changeObs->StartCollectingChanges();
  4745 	aClient.ChangeEvent(*event, active->iStatus);
  4740 	aClient.ChangeEvent(*event, active->iStatus);
  4746 	CActiveScheduler::Start();
  4741 	CActiveScheduler::Start();
  4747 	test(active->iStatus == KErrNone);
  4742 	TEST2(active->iStatus.Int(), KErrNone);
  4748 	count = view->CountL();
  4743 	count = view->CountL();
  4749 	test(count == KChangeEventTest2NumberOfEventsInView);
  4744 	TEST2(count, KChangeEventTest2NumberOfEventsInView);
  4750 
  4745 
  4751 	// Check changes
  4746 	// Check changes
  4752 	changeCount = changeObs->Changes().Count();
  4747 	changeCount = changeObs->Changes().Count();
  4753 	test(changeCount == 1);
  4748 	TEST2(changeCount, 1);
  4754 	type = changeObs->Changes().At(0, logId, viewIndex);
  4749 	type = changeObs->Changes().At(0, logId, viewIndex);
  4755 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4750 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4756 	test(logId == TLogId(3));
  4751 	TEST2(logId, TLogId(3));
  4757 	test(viewIndex == 4); // 7, 6, 5, 4, [2], 1, 0
  4752 	TEST2(viewIndex, 4); // 7, 6, 5, 4, [2], 1, 0
  4758 	changeObs->ResetChanges();
  4753 	changeObs->ResetChanges();
  4759 
  4754 
  4760 	// Move forwards and check
  4755 	// Move forwards and check
  4761 	test(view->NextL(active->iStatus));
  4756 	TEST(view->NextL(active->iStatus));
  4762 	active->StartL();
  4757 	active->StartL();
  4763 	CActiveScheduler::Start();
  4758 	CActiveScheduler::Start();
  4764 	test(active->iStatus == KErrNone);
  4759 	TEST2(active->iStatus.Int(), KErrNone);
  4765 	test(view->Event().Id() == TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4760 	TEST2(view->Event().Id(), TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4766 	test(view->NextL(active->iStatus));
  4761 	TEST(view->NextL(active->iStatus));
  4767 	active->StartL();
  4762 	active->StartL();
  4768 	CActiveScheduler::Start();
  4763 	CActiveScheduler::Start();
  4769 	test(active->iStatus == KErrNone);
  4764 	TEST2(active->iStatus.Int(), KErrNone);
  4770 	test(view->Event().Id() == TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4765 	TEST2(view->Event().Id(), TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4771 
  4766 
  4772 	// Move back one
  4767 	// Move back one
  4773 	test(view->PreviousL(active->iStatus));
  4768 	TEST(view->PreviousL(active->iStatus));
  4774 	active->StartL();
  4769 	active->StartL();
  4775 	CActiveScheduler::Start();
  4770 	CActiveScheduler::Start();
  4776 	test(active->iStatus == KErrNone);
  4771 	TEST2(active->iStatus.Int(), KErrNone);
  4777 	test(view->Event().Id() == TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4772 	TEST2(view->Event().Id(), TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4778 	changeCount = changeObs->Changes().Count();
  4773 	changeCount = changeObs->Changes().Count();
  4779 	test(changeCount == 0);
  4774 	TEST2(changeCount ,0);
  4780 
  4775 
  4781 	// Change 'Z' event so that it now appears in the view
  4776 	// Change 'Z' event so that it now appears in the view
  4782 	active->StartL();
  4777 	active->StartL();
  4783 	event->SetId(TLogId(3));
  4778 	event->SetId(TLogId(3));
  4784 	aClient.GetEvent(*event, active->iStatus);
  4779 	aClient.GetEvent(*event, active->iStatus);
  4785 	CActiveScheduler::Start();
  4780 	CActiveScheduler::Start();
  4786 	test(active->iStatus == KErrNone);
  4781 	TEST2(active->iStatus.Int(), KErrNone);
  4787 	//
  4782 	//
  4788 	event->SetContact(KTestContact);
  4783 	event->SetContact(KTestContact);
  4789 	active->StartL();
  4784 	active->StartL();
  4790 
  4785 
  4791 	// Check that changes work after a backup
  4786 	// Check that changes work after a backup
  4796 	TestLogOpenL();
  4791 	TestLogOpenL();
  4797 
  4792 
  4798 	changeObs->StartCollectingChanges();
  4793 	changeObs->StartCollectingChanges();
  4799 	aClient.ChangeEvent(*event, active->iStatus);
  4794 	aClient.ChangeEvent(*event, active->iStatus);
  4800 	CActiveScheduler::Start();
  4795 	CActiveScheduler::Start();
  4801 	test(active->iStatus == KErrNone);
  4796 	TEST2(active->iStatus.Int(), KErrNone);
  4802 	count = view->CountL();
  4797 	count = view->CountL();
  4803 	test(count == KChangeEventTest2NumberOfEventsInView+1);
  4798 	TEST2(count, KChangeEventTest2NumberOfEventsInView+1);
  4804 
  4799 
  4805 	// Check changes
  4800 	// Check changes
  4806 	changeCount = changeObs->Changes().Count();
  4801 	changeCount = changeObs->Changes().Count();
  4807 	test(changeCount == 1);
  4802 	TEST2(changeCount, 1);
  4808 	type = changeObs->Changes().At(0, logId, viewIndex);
  4803 	type = changeObs->Changes().At(0, logId, viewIndex);
  4809 	test(type == ELogChangeTypeEventAdded); // Change resulted in an addition to the view
  4804 	TEST2(type, ELogChangeTypeEventAdded); // Change resulted in an addition to the view
  4810 	test(logId == TLogId(3));
  4805 	TEST2(logId, TLogId(3));
  4811 	test(viewIndex == 4); // 7, 6, 5, 4, 3, 2, [1], 0
  4806 	TEST2(viewIndex, 4); // 7, 6, 5, 4, 3, 2, [1], 0
  4812 	changeObs->ResetChanges();
  4807 	changeObs->ResetChanges();
  4813 
  4808 
  4814 	// Check can only move forward one more record
  4809 	// Check can only move forward one more record
  4815 	test(view->NextL(active->iStatus));
  4810 	TEST(view->NextL(active->iStatus));
  4816 	active->StartL();
  4811 	active->StartL();
  4817 	CActiveScheduler::Start();
  4812 	CActiveScheduler::Start();
  4818 	test(active->iStatus == KErrNone);
  4813 	TEST2(active->iStatus.Int(), KErrNone);
  4819 	test(view->Event().Id() == TLogId(0)); // 7, 6, 5, 4, 3, 2, 1, [0]
  4814 	TEST2(view->Event().Id(), TLogId(0)); // 7, 6, 5, 4, 3, 2, 1, [0]
  4820 
  4815 
  4821 	// Move back until we are before the inserted record
  4816 	// Move back until we are before the inserted record
  4822 	test(view->PreviousL(active->iStatus));
  4817 	TEST(view->PreviousL(active->iStatus));
  4823 	active->StartL();
  4818 	active->StartL();
  4824 	CActiveScheduler::Start();
  4819 	CActiveScheduler::Start();
  4825 	test(active->iStatus == KErrNone);
  4820 	TEST2(active->iStatus.Int(), KErrNone);
  4826 	test(view->Event().Id() == TLogId(1)); // 7, 6, 5, 4, 3, 2, [1], 0
  4821 	TEST2(view->Event().Id(), TLogId(1)); // 7, 6, 5, 4, 3, 2, [1], 0
  4827 	test(view->PreviousL(active->iStatus));
  4822 	TEST(view->PreviousL(active->iStatus));
  4828 	active->StartL();
  4823 	active->StartL();
  4829 	CActiveScheduler::Start();
  4824 	CActiveScheduler::Start();
  4830 	test(active->iStatus == KErrNone);
  4825 	TEST2(active->iStatus.Int(), KErrNone);
  4831 	test(view->Event().Id() == TLogId(2)); // 7, 6, 5, 4, 3, [2], 1, 0
  4826 	TEST2(view->Event().Id(), TLogId(2)); // 7, 6, 5, 4, 3, [2], 1, 0
  4832 	test(view->PreviousL(active->iStatus));
  4827 	TEST(view->PreviousL(active->iStatus));
  4833 	active->StartL();
  4828 	active->StartL();
  4834 	CActiveScheduler::Start();
  4829 	CActiveScheduler::Start();
  4835 	test(active->iStatus == KErrNone);
  4830 	TEST2(active->iStatus.Int(), KErrNone);
  4836 	test(view->Event().Id() == TLogId(3)); // 7, 6, 5, 4, [3], 2, 1, 0
  4831 	TEST2(view->Event().Id(), TLogId(3)); // 7, 6, 5, 4, [3], 2, 1, 0
  4837 	test(view->PreviousL(active->iStatus));
  4832 	TEST(view->PreviousL(active->iStatus));
  4838 	active->StartL();
  4833 	active->StartL();
  4839 	CActiveScheduler::Start();
  4834 	CActiveScheduler::Start();
  4840 	test(active->iStatus == KErrNone);
  4835 	TEST2(active->iStatus.Int(), KErrNone);
  4841 	test(view->Event().Id() == TLogId(4)); // 7, 6, 5, [4], 3, 2, 1, 0
  4836 	TEST2(view->Event().Id(), TLogId(4)); // 7, 6, 5, [4], 3, 2, 1, 0
  4842 	changeCount = changeObs->Changes().Count();
  4837 	changeCount = changeObs->Changes().Count();
  4843 	test(changeCount == 0);
  4838 	TEST2(changeCount ,0);
  4844 
  4839 
  4845 	// Change 'Z' event so that its now missing from the view again
  4840 	// Change 'Z' event so that its now missing from the view again
  4846 	active->StartL();
  4841 	active->StartL();
  4847 	event->SetId(TLogId(3));
  4842 	event->SetId(TLogId(3));
  4848 	aClient.GetEvent(*event, active->iStatus);
  4843 	aClient.GetEvent(*event, active->iStatus);
  4849 	CActiveScheduler::Start();
  4844 	CActiveScheduler::Start();
  4850 	test(active->iStatus == KErrNone);
  4845 	TEST2(active->iStatus.Int(), KErrNone);
  4851 	//
  4846 	//
  4852 	event->SetContact(0);
  4847 	event->SetContact(0);
  4853 	active->StartL();
  4848 	active->StartL();
  4854 
  4849 
  4855 	// Check that changes work after a backup
  4850 	// Check that changes work after a backup
  4860 	TestLogOpenL();
  4855 	TestLogOpenL();
  4861 
  4856 
  4862 	changeObs->StartCollectingChanges();
  4857 	changeObs->StartCollectingChanges();
  4863 	aClient.ChangeEvent(*event, active->iStatus);
  4858 	aClient.ChangeEvent(*event, active->iStatus);
  4864 	CActiveScheduler::Start();
  4859 	CActiveScheduler::Start();
  4865 	test(active->iStatus == KErrNone);
  4860 	TEST2(active->iStatus.Int(), KErrNone);
  4866 	count = view->CountL();
  4861 	count = view->CountL();
  4867 	test(count == KChangeEventTest2NumberOfEventsInView);
  4862 	TEST2(count, KChangeEventTest2NumberOfEventsInView);
  4868 
  4863 
  4869 	// Check changes
  4864 	// Check changes
  4870 	changeCount = changeObs->Changes().Count();
  4865 	changeCount = changeObs->Changes().Count();
  4871 	test(changeCount == 1);
  4866 	TEST2(changeCount, 1);
  4872 	type = changeObs->Changes().At(0, logId, viewIndex);
  4867 	type = changeObs->Changes().At(0, logId, viewIndex);
  4873 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4868 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4874 	test(logId == TLogId(3));
  4869 	TEST2(logId, TLogId(3));
  4875 	test(viewIndex == 4); // 7, 6, 5, [4], 2, 1, 0
  4870 	TEST2(viewIndex, 4); // 7, 6, 5, [4], 2, 1, 0
  4876 	changeObs->ResetChanges();
  4871 	changeObs->ResetChanges();
  4877 
  4872 
  4878 	// Check navigating to the end of the view
  4873 	// Check navigating to the end of the view
  4879 	test(view->NextL(active->iStatus));
  4874 	TEST(view->NextL(active->iStatus));
  4880 	active->StartL();
  4875 	active->StartL();
  4881 	CActiveScheduler::Start();
  4876 	CActiveScheduler::Start();
  4882 	test(active->iStatus == KErrNone);
  4877 	TEST2(active->iStatus.Int(), KErrNone);
  4883 	test(view->Event().Id() == TLogId(2)); // 7, 6, 5, 4, [2], 1, 0
  4878 	TEST2(view->Event().Id(), TLogId(2)); // 7, 6, 5, 4, [2], 1, 0
  4884 	test(view->NextL(active->iStatus));
  4879 	TEST(view->NextL(active->iStatus));
  4885 	active->StartL();
  4880 	active->StartL();
  4886 	CActiveScheduler::Start();
  4881 	CActiveScheduler::Start();
  4887 	test(active->iStatus == KErrNone);
  4882 	TEST2(active->iStatus.Int(), KErrNone);
  4888 	test(view->Event().Id() == TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4883 	TEST2(view->Event().Id(), TLogId(1)); // 7, 6, 5, 4, 2, [1], 0
  4889 	test(view->NextL(active->iStatus));
  4884 	TEST(view->NextL(active->iStatus));
  4890 	active->StartL();
  4885 	active->StartL();
  4891 	CActiveScheduler::Start();
  4886 	CActiveScheduler::Start();
  4892 	test(active->iStatus == KErrNone);
  4887 	TEST2(active->iStatus.Int(), KErrNone);
  4893 	test(view->Event().Id() == TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4888 	TEST2(view->Event().Id(), TLogId(0)); // 7, 6, 5, 4, 2, 1, [0]
  4894 	changeCount = changeObs->Changes().Count();
  4889 	changeCount = changeObs->Changes().Count();
  4895 	test(changeCount == 0);
  4890 	TEST2(changeCount ,0);
  4896 	test(!view->NextL(active->iStatus));
  4891 	TEST(!view->NextL(active->iStatus));
  4897 
  4892 
  4898 	// Delete everything in the view and make sure we can't navigate anymore.
  4893 	// Delete everything in the view and make sure we can't navigate anymore.
  4899 	active->StartL();
  4894 	active->StartL();
  4900 	aClient.DeleteEvent(TLogId(4), active->iStatus);
  4895 	aClient.DeleteEvent(TLogId(4), active->iStatus);
  4901 	CActiveScheduler::Start();
  4896 	CActiveScheduler::Start();
  4902 	test(active->iStatus == KErrNone);
  4897 	TEST2(active->iStatus.Int(), KErrNone);
  4903 	count = view->CountL();
  4898 	count = view->CountL();
  4904 	test(count == KChangeEventTest2NumberOfEventsInView - 1);
  4899 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 1);
  4905 	changeCount = changeObs->Changes().Count();
  4900 	changeCount = changeObs->Changes().Count();
  4906 	test(changeCount == 1);
  4901 	TEST2(changeCount, 1);
  4907 	type = changeObs->Changes().At(0, logId, viewIndex);
  4902 	type = changeObs->Changes().At(0, logId, viewIndex);
  4908 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4903 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4909 	test(logId == TLogId(4));
  4904 	TEST2(logId, TLogId(4));
  4910 	test(viewIndex == 3); // 7, 6, 5, 2, 1, [0]
  4905 	TEST2(viewIndex, 3); // 7, 6, 5, 2, 1, [0]
  4911 	changeObs->ResetChanges();
  4906 	changeObs->ResetChanges();
  4912 	//
  4907 	//
  4913 	active->StartL();
  4908 	active->StartL();
  4914 	aClient.DeleteEvent(TLogId(7), active->iStatus);
  4909 	aClient.DeleteEvent(TLogId(7), active->iStatus);
  4915 	CActiveScheduler::Start();
  4910 	CActiveScheduler::Start();
  4916 	test(active->iStatus == KErrNone);
  4911 	TEST2(active->iStatus.Int(), KErrNone);
  4917 	count = view->CountL();
  4912 	count = view->CountL();
  4918 	test(count == KChangeEventTest2NumberOfEventsInView - 2);
  4913 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 2);
  4919 	changeCount = changeObs->Changes().Count();
  4914 	changeCount = changeObs->Changes().Count();
  4920 	test(changeCount == 1);
  4915 	TEST2(changeCount, 1);
  4921 	type = changeObs->Changes().At(0, logId, viewIndex);
  4916 	type = changeObs->Changes().At(0, logId, viewIndex);
  4922 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4917 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4923 	test(logId == TLogId(7));
  4918 	TEST2(logId, TLogId(7));
  4924 	test(viewIndex == 0); // 6, 5, 2, 1, [0]
  4919 	TEST2(viewIndex, 0); // 6, 5, 2, 1, [0]
  4925 	changeObs->ResetChanges();
  4920 	changeObs->ResetChanges();
  4926 	//
  4921 	//
  4927 	active->StartL();
  4922 	active->StartL();
  4928 	aClient.DeleteEvent(TLogId(0), active->iStatus);
  4923 	aClient.DeleteEvent(TLogId(0), active->iStatus);
  4929 	CActiveScheduler::Start();
  4924 	CActiveScheduler::Start();
  4930 	test(active->iStatus == KErrNone);
  4925 	TEST2(active->iStatus.Int(), KErrNone);
  4931 	count = view->CountL();
  4926 	count = view->CountL();
  4932 	test(count == KChangeEventTest2NumberOfEventsInView - 3);
  4927 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 3);
  4933 	changeCount = changeObs->Changes().Count();
  4928 	changeCount = changeObs->Changes().Count();
  4934 	test(changeCount == 1);
  4929 	TEST2(changeCount, 1);
  4935 	type = changeObs->Changes().At(0, logId, viewIndex);
  4930 	type = changeObs->Changes().At(0, logId, viewIndex);
  4936 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4931 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4937 	test(logId == TLogId(0));
  4932 	TEST2(logId, TLogId(0));
  4938 	test(viewIndex == 4); // 6, 5, 2, [1]
  4933 	TEST2(viewIndex, 4); // 6, 5, 2, [1]
  4939 	changeObs->ResetChanges();
  4934 	changeObs->ResetChanges();
  4940 	//
  4935 	//
  4941 	active->StartL();
  4936 	active->StartL();
  4942 	aClient.DeleteEvent(TLogId(5), active->iStatus);
  4937 	aClient.DeleteEvent(TLogId(5), active->iStatus);
  4943 	CActiveScheduler::Start();
  4938 	CActiveScheduler::Start();
  4944 	test(active->iStatus == KErrNone);
  4939 	TEST2(active->iStatus.Int(), KErrNone);
  4945 	count = view->CountL();
  4940 	count = view->CountL();
  4946 	test(count == KChangeEventTest2NumberOfEventsInView - 4);
  4941 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 4);
  4947 	changeCount = changeObs->Changes().Count();
  4942 	changeCount = changeObs->Changes().Count();
  4948 	test(changeCount == 1);
  4943 	TEST2(changeCount, 1);
  4949 	type = changeObs->Changes().At(0, logId, viewIndex);
  4944 	type = changeObs->Changes().At(0, logId, viewIndex);
  4950 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4945 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4951 	test(logId == TLogId(5));
  4946 	TEST2(logId, TLogId(5));
  4952 	test(viewIndex == 1); // 6, 2, [1]
  4947 	TEST2(viewIndex, 1); // 6, 2, [1]
  4953 	changeObs->ResetChanges();
  4948 	changeObs->ResetChanges();
  4954 	//
  4949 	//
  4955 	active->StartL();
  4950 	active->StartL();
  4956 	aClient.DeleteEvent(TLogId(2), active->iStatus);
  4951 	aClient.DeleteEvent(TLogId(2), active->iStatus);
  4957 	CActiveScheduler::Start();
  4952 	CActiveScheduler::Start();
  4958 	test(active->iStatus == KErrNone);
  4953 	TEST2(active->iStatus.Int(), KErrNone);
  4959 	count = view->CountL();
  4954 	count = view->CountL();
  4960 	test(count == KChangeEventTest2NumberOfEventsInView - 5);
  4955 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 5);
  4961 	changeCount = changeObs->Changes().Count();
  4956 	changeCount = changeObs->Changes().Count();
  4962 	test(changeCount == 1);
  4957 	TEST2(changeCount, 1);
  4963 	type = changeObs->Changes().At(0, logId, viewIndex);
  4958 	type = changeObs->Changes().At(0, logId, viewIndex);
  4964 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4959 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4965 	test(logId == TLogId(2));
  4960 	TEST2(logId, TLogId(2));
  4966 	test(viewIndex == 1); // 6, [1]
  4961 	TEST2(viewIndex, 1); // 6, [1]
  4967 	changeObs->ResetChanges();
  4962 	changeObs->ResetChanges();
  4968 	//
  4963 	//
  4969 	active->StartL();
  4964 	active->StartL();
  4970 	aClient.DeleteEvent(TLogId(6), active->iStatus);
  4965 	aClient.DeleteEvent(TLogId(6), active->iStatus);
  4971 	CActiveScheduler::Start();
  4966 	CActiveScheduler::Start();
  4972 	test(active->iStatus == KErrNone);
  4967 	TEST2(active->iStatus.Int(), KErrNone);
  4973 	count = view->CountL();
  4968 	count = view->CountL();
  4974 	test(count == KChangeEventTest2NumberOfEventsInView - 6);
  4969 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 6);
  4975 	changeCount = changeObs->Changes().Count();
  4970 	changeCount = changeObs->Changes().Count();
  4976 	test(changeCount == 1);
  4971 	TEST2(changeCount, 1);
  4977 	type = changeObs->Changes().At(0, logId, viewIndex);
  4972 	type = changeObs->Changes().At(0, logId, viewIndex);
  4978 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4973 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  4979 	test(logId == TLogId(6));
  4974 	TEST2(logId, TLogId(6));
  4980 	test(viewIndex == 0); // [1]
  4975 	TEST2(viewIndex, 0); // [1]
  4981 	changeObs->ResetChanges();
  4976 	changeObs->ResetChanges();
  4982 
  4977 
  4983 	// Check we can't go backwards or forwards
  4978 	// Check we can't go backwards or forwards
  4984 	test(!view->NextL(active->iStatus));
  4979 	TEST(!view->NextL(active->iStatus));
  4985 	test(!view->PreviousL(active->iStatus));
  4980 	TEST(!view->PreviousL(active->iStatus));
  4986 	test(view->FirstL(active->iStatus));
  4981 	TEST(view->FirstL(active->iStatus));
  4987 	active->StartL();
  4982 	active->StartL();
  4988 	CActiveScheduler::Start();
  4983 	CActiveScheduler::Start();
  4989 	test(active->iStatus == KErrNone);
  4984 	TEST2(active->iStatus.Int(), KErrNone);
  4990 	test(view->Event().Id() == TLogId(1)); // [1]
  4985 	TEST2(view->Event().Id(), TLogId(1)); // [1]
  4991 	test(view->LastL(active->iStatus));
  4986 	TEST(view->LastL(active->iStatus));
  4992 	active->StartL();
  4987 	active->StartL();
  4993 	CActiveScheduler::Start();
  4988 	CActiveScheduler::Start();
  4994 	test(active->iStatus == KErrNone);
  4989 	TEST2(active->iStatus.Int(), KErrNone);
  4995 	test(view->Event().Id() == TLogId(1)); // [1]
  4990 	TEST2(view->Event().Id(), TLogId(1)); // [1]
  4996 
  4991 
  4997 	// Delete last event in view
  4992 	// Delete last event in view
  4998 	active->StartL();
  4993 	active->StartL();
  4999 	aClient.DeleteEvent(TLogId(1), active->iStatus);
  4994 	aClient.DeleteEvent(TLogId(1), active->iStatus);
  5000 	CActiveScheduler::Start();
  4995 	CActiveScheduler::Start();
  5001 	test(active->iStatus == KErrNone);
  4996 	TEST2(active->iStatus.Int(), KErrNone);
  5002 	count = view->CountL();
  4997 	count = view->CountL();
  5003 	test(count == KChangeEventTest2NumberOfEventsInView - 7);
  4998 	TEST2(count, KChangeEventTest2NumberOfEventsInView - 7);
  5004 	changeCount = changeObs->Changes().Count();
  4999 	changeCount = changeObs->Changes().Count();
  5005 	test(changeCount == 1);
  5000 	TEST2(changeCount, 1);
  5006 	type = changeObs->Changes().At(0, logId, viewIndex);
  5001 	type = changeObs->Changes().At(0, logId, viewIndex);
  5007 	test(type == ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  5002 	TEST2(type, ELogChangeTypeEventDeleted); // Change resulted in a removal from the view
  5008 	test(logId == TLogId(1));
  5003 	TEST2(logId, TLogId(1));
  5009 	test(viewIndex == 0); // *Empty*
  5004 	TEST2(viewIndex, 0); // *Empty*
  5010 	changeObs->ResetChanges();
  5005 	changeObs->ResetChanges();
  5011 
  5006 
  5012 	// Check we can't navigate
  5007 	// Check we can't navigate
  5013 	test(!view->NextL(active->iStatus));
  5008 	TEST(!view->NextL(active->iStatus));
  5014 	test(!view->PreviousL(active->iStatus));
  5009 	TEST(!view->PreviousL(active->iStatus));
  5015 	test(!view->FirstL(active->iStatus));
  5010 	TEST(!view->FirstL(active->iStatus));
  5016 	test(!view->LastL(active->iStatus));
  5011 	TEST(!view->LastL(active->iStatus));
  5017 
  5012 
  5018 	CleanupStack::PopAndDestroy(5, event); // view, changeObs, active, filter, event
  5013 	CleanupStack::PopAndDestroy(5, event); // view, changeObs, active, filter, event
  5019 	}
  5014 	}
  5020 
  5015 
  5021 /**
  5016 /**
  5027 @SYMTestExpectedResults Test must not fail
  5022 @SYMTestExpectedResults Test must not fail
  5028 @SYMREQ                 REQ0000
  5023 @SYMREQ                 REQ0000
  5029 */
  5024 */
  5030 LOCAL_C void TestViewFilteringDefect1L(CLogClient& aClient)
  5025 LOCAL_C void TestViewFilteringDefect1L(CLogClient& aClient)
  5031 	{
  5026 	{
  5032 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0872 "));
  5027 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0872 "));
  5033 	CLogEvent* event = CLogEvent::NewL();
  5028 	CLogEvent* event = CLogEvent::NewL();
  5034 	CleanupStack::PushL(event);
  5029 	CleanupStack::PushL(event);
  5035 
  5030 
  5036 	CTestActive* active = new(ELeave) CTestActive();
  5031 	CTestActive* active = new(ELeave) CTestActive();
  5037 	CleanupStack::PushL(active);
  5032 	CleanupStack::PushL(active);
  5224 @SYMTestExpectedResults Test must not fail
  5219 @SYMTestExpectedResults Test must not fail
  5225 @SYMREQ                 REQ0000
  5220 @SYMREQ                 REQ0000
  5226 */
  5221 */
  5227 LOCAL_C void TestDeletingViewWithinObserverCallbackL(CLogClient& aClient)
  5222 LOCAL_C void TestDeletingViewWithinObserverCallbackL(CLogClient& aClient)
  5228 	{
  5223 	{
  5229 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0873 "));
  5224 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0873 "));
  5230 	TestUtils::DeleteDatabaseL();
  5225 	TestUtils::DeleteDatabaseL();
  5231 
  5226 
  5232 	TInt error = 0;
  5227 	TInt error = 0;
  5233 	//
  5228 	//
  5234 	CTestActive* active = new(ELeave) CTestActive();
  5229 	CTestActive* active = new(ELeave) CTestActive();
  5470 				client->AddEvent(*event, active->iStatus);
  5465 				client->AddEvent(*event, active->iStatus);
  5471 				CActiveScheduler::Start();
  5466 				CActiveScheduler::Start();
  5472 				__ASSERT_ALWAYS(active->iStatus == KErrNone, User::Panic(_L("ThreadPanic"), 1));
  5467 				__ASSERT_ALWAYS(active->iStatus == KErrNone, User::Panic(_L("ThreadPanic"), 1));
  5473 				++count;
  5468 				++count;
  5474 				LEAVE_IF_ERROR(aThreadData.iArray->Append(event->Id()));
  5469 				LEAVE_IF_ERROR(aThreadData.iArray->Append(event->Id()));
  5475 				// RDebug::Print(_L("EAdd: i:%d count:%d, id:%d\n"), i, aThreadData.iArray->Count(), event->Id());
  5470 				// TheTest.Printf(_L("EAdd: i:%d count:%d, id:%d\n"), i, aThreadData.iArray->Count(), event->Id());
  5476 
  5471 
  5477 				// Have to wait for a minimum of 1 ms here because otherwise DMBS sorts records (by time)
  5472 				// Have to wait for a minimum of 1 ms here because otherwise DMBS sorts records (by time)
  5478 				// in an arbitrary manor
  5473 				// in an arbitrary manor
  5479 				// If this occurs this test will fail the logId == arrayId test below, as the order
  5474 				// If this occurs this test will fail the logId == arrayId test below, as the order
  5480 				// will be different between the logeng and arrayOfIds[].
  5475 				// will be different between the logeng and arrayOfIds[].
  5578 @SYMTestExpectedResults Test must not fail
  5573 @SYMTestExpectedResults Test must not fail
  5579 @SYMREQ                 REQ0000
  5574 @SYMREQ                 REQ0000
  5580 */
  5575 */
  5581 LOCAL_C void TestNavigationWhilstBusyL(CLogClient& aClient)
  5576 LOCAL_C void TestNavigationWhilstBusyL(CLogClient& aClient)
  5582 	{
  5577 	{
  5583 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0874 "));
  5578 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0874 "));
  5584 	TestUtils::DeleteDatabaseL();
  5579 	TestUtils::DeleteDatabaseL();
  5585 
  5580 
  5586 	TInt error = 0;
  5581 	TInt error = 0;
  5587 	TInt count = 0;
  5582 	TInt count = 0;
  5588 	//
  5583 	//
  5596 	CleanupStack::PushL(type);
  5591 	CleanupStack::PushL(type);
  5597 
  5592 
  5598 	type->SetUid(TEST_LOG_UID);
  5593 	type->SetUid(TEST_LOG_UID);
  5599 	type->SetDescription(KTestEventDesc);
  5594 	type->SetDescription(KTestEventDesc);
  5600 	type->SetLoggingEnabled(ETrue);
  5595 	type->SetLoggingEnabled(ETrue);
  5601 	RDebug::Print(_L("\nTest event type added %x\n"),TEST_LOG_UID );
  5596 	TheTest.Printf(_L("\nTest event type added %x\n"),TEST_LOG_UID );
  5602 
  5597 
  5603 	// Register the event type
  5598 	// Register the event type
  5604 	active->StartL();
  5599 	active->StartL();
  5605 	aClient.AddEventType(*type, active->iStatus);
  5600 	aClient.AddEventType(*type, active->iStatus);
  5606 	CActiveScheduler::Start();
  5601 	CActiveScheduler::Start();
  5613 
  5608 
  5614 	CLogFilter* filter = CLogFilter::NewL();
  5609 	CLogFilter* filter = CLogFilter::NewL();
  5615 	CleanupStack::PushL(filter);
  5610 	CleanupStack::PushL(filter);
  5616 	filter->SetEventType(TEST_LOG_UID);  
  5611 	filter->SetEventType(TEST_LOG_UID);  
  5617 	TBool res = view->SetFilterL(*filter, active->iStatus);
  5612 	TBool res = view->SetFilterL(*filter, active->iStatus);
  5618 	test(!res);
  5613 	TEST(!res);
  5619 
  5614 
  5620 	// increase the default log size
  5615 	// increase the default log size
  5621 	TLogConfig Config;
  5616 	TLogConfig Config;
  5622 	const TInt kMaxLogSize = 2000;
  5617 	const TInt kMaxLogSize = 2000;
  5623 	Config.iMaxLogSize = kMaxLogSize;
  5618 	Config.iMaxLogSize = kMaxLogSize;
  5641 
  5636 
  5642 	// Start the worker thread going
  5637 	// Start the worker thread going
  5643 	thread.Resume();
  5638 	thread.Resume();
  5644 
  5639 
  5645 	// Suspend this thread
  5640 	// Suspend this thread
  5646 	RDebug::Print(_L("TEST CODE: Suspending thread for 2 seconds\n"));
  5641 	TheTest.Printf(_L("TEST CODE: Suspending thread for 2 seconds\n"));
  5647 	CLogSchedulerTimer* timer = CLogSchedulerTimer::NewLC();
  5642 	CLogSchedulerTimer* timer = CLogSchedulerTimer::NewLC();
  5648 	timer->Wait(10 * 1000000);
  5643 	timer->Wait(10 * 1000000);
  5649 
  5644 
  5650 	// Apply the filter now there are some records
  5645 	// Apply the filter now there are some records
  5651 	RDebug::Print(_L("TEST CODE: Setting filter again - should be some records now\n"));
  5646 	TheTest.Printf(_L("TEST CODE: Setting filter again - should be some records now\n"));
  5652 	res = view->SetFilterL(*filter, active->iStatus);
  5647 	res = view->SetFilterL(*filter, active->iStatus);
  5653 	test(res);
  5648 	TEST(res);
  5654 	active->StartL();
  5649 	active->StartL();
  5655 	CActiveScheduler::Start();
  5650 	CActiveScheduler::Start();
  5656 	test(active->iStatus == KErrNone || active->iStatus == KErrCancel); // KErrCancel when the worker thread clears the log at the same time as we are navigating to the first record
  5651 	TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel); // KErrCancel when the worker thread clears the log at the same time as we are navigating to the first record
  5657 	count = view->CountL();
  5652 	count = view->CountL();
  5658 	test(count > 0);
  5653 	TEST(count > 0);
  5659 
  5654 
  5660 	// Navigate around (up and down) whilst events are being created
  5655 	// Navigate around (up and down) whilst events are being created
  5661 	count = view->CountL();
  5656 	count = view->CountL();
  5662 	res = view->FirstL(active->iStatus);
  5657 	res = view->FirstL(active->iStatus);
  5663 	test(res);
  5658 	TEST(res);
  5664 	do	{
  5659 	do	{
  5665 		active->StartL();
  5660 		active->StartL();
  5666 		CActiveScheduler::Start();
  5661 		CActiveScheduler::Start();
  5667 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5662 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5668 		count--;
  5663 		count--;
  5669 		if	(active->iStatus == KErrNone)
  5664 		if	(active->iStatus == KErrNone)
  5670 			test(view->Event().Id() != KLogNullId);
  5665 			TEST(view->Event().Id() != KLogNullId);
  5671 		}
  5666 		}
  5672 	while(view->NextL(active->iStatus));
  5667 	while(view->NextL(active->iStatus));
  5673 
  5668 
  5674 	timer->Wait(5 * 1000000);
  5669 	timer->Wait(5 * 1000000);
  5675 	count = view->CountL();
  5670 	count = view->CountL();
  5676 	res = view->FirstL(active->iStatus);
  5671 	res = view->FirstL(active->iStatus);
  5677 	test(res);
  5672 	TEST(res);
  5678 	do	{
  5673 	do	{
  5679 		active->StartL();
  5674 		active->StartL();
  5680 		CActiveScheduler::Start();
  5675 		CActiveScheduler::Start();
  5681 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5676 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5682 		count--;
  5677 		count--;
  5683 		if	(active->iStatus == KErrNone)
  5678 		if	(active->iStatus == KErrNone)
  5684 			test(view->Event().Id() != KLogNullId);
  5679 			TEST(view->Event().Id() != KLogNullId);
  5685 		}
  5680 		}
  5686 	while(view->NextL(active->iStatus));
  5681 	while(view->NextL(active->iStatus));
  5687 
  5682 
  5688 	timer->Wait(5 * 1000000);
  5683 	timer->Wait(5 * 1000000);
  5689 	count = view->CountL();
  5684 	count = view->CountL();
  5690 	res = view->LastL(active->iStatus);
  5685 	res = view->LastL(active->iStatus);
  5691 	test(res);
  5686 	TEST(res);
  5692 	do	{
  5687 	do	{
  5693 		active->StartL();
  5688 		active->StartL();
  5694 		CActiveScheduler::Start();
  5689 		CActiveScheduler::Start();
  5695 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5690 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5696 		count--;
  5691 		count--;
  5697 		if	(active->iStatus == KErrNone)
  5692 		if	(active->iStatus == KErrNone)
  5698 			test(view->Event().Id() != KLogNullId);
  5693 			TEST(view->Event().Id() != KLogNullId);
  5699 		}
  5694 		}
  5700 	while(view->PreviousL(active->iStatus));
  5695 	while(view->PreviousL(active->iStatus));
  5701 
  5696 
  5702 	timer->Wait(5 * 1000000);
  5697 	timer->Wait(5 * 1000000);
  5703 	count = view->CountL();
  5698 	count = view->CountL();
  5704 	res = view->FirstL(active->iStatus);
  5699 	res = view->FirstL(active->iStatus);
  5705 	test(res);
  5700 	TEST(res);
  5706 	do	{
  5701 	do	{
  5707 		active->StartL();
  5702 		active->StartL();
  5708 		CActiveScheduler::Start();
  5703 		CActiveScheduler::Start();
  5709 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5704 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5710 		count--;
  5705 		count--;
  5711 		if	(active->iStatus == KErrNone)
  5706 		if	(active->iStatus == KErrNone)
  5712 			test(view->Event().Id() != KLogNullId);
  5707 			TEST(view->Event().Id() != KLogNullId);
  5713 		}
  5708 		}
  5714 	while(view->NextL(active->iStatus));
  5709 	while(view->NextL(active->iStatus));
  5715 
  5710 
  5716 	timer->Wait(5 * 1000000);
  5711 	timer->Wait(5 * 1000000);
  5717 	count = view->CountL();
  5712 	count = view->CountL();
  5718 	res = view->LastL(active->iStatus);
  5713 	res = view->LastL(active->iStatus);
  5719 	test(res);
  5714 	TEST(res);
  5720 	do	{
  5715 	do	{
  5721 		active->StartL();
  5716 		active->StartL();
  5722 		CActiveScheduler::Start();
  5717 		CActiveScheduler::Start();
  5723 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5718 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5724 		count--;
  5719 		count--;
  5725 		if	(active->iStatus == KErrNone)
  5720 		if	(active->iStatus == KErrNone)
  5726 			test(view->Event().Id() != KLogNullId);
  5721 			TEST(view->Event().Id() != KLogNullId);
  5727 		}
  5722 		}
  5728 	while(view->PreviousL(active->iStatus));
  5723 	while(view->PreviousL(active->iStatus));
  5729 
  5724 
  5730 	timer->Wait(5 * 1000000);
  5725 	timer->Wait(5 * 1000000);
  5731 	count = view->CountL();
  5726 	count = view->CountL();
  5732 	res = view->LastL(active->iStatus);
  5727 	res = view->LastL(active->iStatus);
  5733 	test(res);
  5728 	TEST(res);
  5734 	do	{
  5729 	do	{
  5735 		active->StartL();
  5730 		active->StartL();
  5736 		CActiveScheduler::Start();
  5731 		CActiveScheduler::Start();
  5737 		test(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5732 		TEST(active->iStatus == KErrNone || active->iStatus == KErrCancel);
  5738 		count--;
  5733 		count--;
  5739 		if	(active->iStatus == KErrNone)
  5734 		if	(active->iStatus == KErrNone)
  5740 			test(view->Event().Id() != KLogNullId);
  5735 			TEST(view->Event().Id() != KLogNullId);
  5741 		}
  5736 		}
  5742 	while(view->PreviousL(active->iStatus));
  5737 	while(view->PreviousL(active->iStatus));
  5743 	
  5738 	
  5744 	// STOP THE WORKER THREAD
  5739 	// STOP THE WORKER THREAD
  5745 	threadData.iStopThread = ETrue;
  5740 	threadData.iStopThread = ETrue;
  5746 	RDebug::Print(_L("Stopping worker thread\n"));
  5741 	TheTest.Printf(_L("Stopping worker thread\n"));
  5747 	timer->Wait(30 * 1000000);
  5742 	timer->Wait(30 * 1000000);
  5748 	
  5743 	
  5749 	// do some checks on the log
  5744 	// do some checks on the log
  5750 	TLogConfig logConfig;
  5745 	TLogConfig logConfig;
  5751 	aClient.GetConfig( logConfig, active->iStatus);
  5746 	aClient.GetConfig( logConfig, active->iStatus);
  5752 	active->StartL();
  5747 	active->StartL();
  5753 	CActiveScheduler::Start();
  5748 	CActiveScheduler::Start();
  5754 	TEST2(active->iStatus.Int(), KErrNone);
  5749 	TEST2(active->iStatus.Int(), KErrNone);
  5755 	RDebug::Print(_L("MaxLogSize:%ld MaxRecentLogSize:%d\n"),
  5750 	TheTest.Printf(_L("MaxLogSize:%ld MaxRecentLogSize:%d\n"),
  5756 		logConfig.iMaxLogSize, logConfig.iMaxRecentLogSize );
  5751 		logConfig.iMaxLogSize, logConfig.iMaxRecentLogSize );
  5757 	test(logConfig.iMaxLogSize > logConfig.iMaxRecentLogSize);
  5752 	TEST(logConfig.iMaxLogSize > logConfig.iMaxRecentLogSize);
  5758 
  5753 
  5759 	/*  Check the log has not overflowed.
  5754 	/*  Check the log has not overflowed.
  5760 	    If this fails either increase the log size or reduce the time the 
  5755 	    If this fails either increase the log size or reduce the time the 
  5761 	    worker thread has been running
  5756 	    worker thread has been running
  5762      */
  5757      */
  5763 	test (arrayOfIds.Count() < kMaxLogSize);
  5758 	TEST(arrayOfIds.Count() < kMaxLogSize);
  5764 	
  5759 	
  5765 	// Loop though the logevents created by the worker thread and compare against the 
  5760 	// Loop though the logevents created by the worker thread and compare against the 
  5766 	// data stored in arrayOfIds. 
  5761 	// data stored in arrayOfIds. 
  5767 	res = view->LastL(active->iStatus);
  5762 	res = view->LastL(active->iStatus);
  5768 	test(res);
  5763 	TEST(res);
  5769 	count = 0;
  5764 	count = 0;
  5770 	do	{
  5765 	do	{
  5771 		active->StartL();
  5766 		active->StartL();
  5772 		CActiveScheduler::Start();
  5767 		CActiveScheduler::Start();
  5773 		TEST2(active->iStatus.Int(), KErrNone);
  5768 		TEST2(active->iStatus.Int(), KErrNone);
  5774 		
  5769 		
  5775 		const TLogId logId = view->Event().Id();
  5770 		const TLogId logId = view->Event().Id();
  5776 		const TLogId arrayId = arrayOfIds[count];
  5771 		const TLogId arrayId = arrayOfIds[count];
  5777 		if	(logId != arrayId)
  5772 		if	(logId != arrayId)
  5778 			RDebug::Print(_L("Events[%d] - array:%5d, id:%5d ****\n"), count, arrayId, logId);
  5773 			TheTest.Printf(_L("Events[%d] - array:%5d, id:%5d ****\n"), count, arrayId, logId);
  5779 		// Note: If this test fails the fist thing to check is the time delay after EAdd.
  5774 		// Note: If this test fails the fist thing to check is the time delay after EAdd.
  5780 		// If several events get the same time stamp, the order is arbitrary and the test fails here.
  5775 		// If several events get the same time stamp, the order is arbitrary and the test fails here.
  5781 		test(logId == arrayId);
  5776 		TEST2(logId, arrayId);
  5782 		count++;
  5777 		count++;
  5783 		}
  5778 		}
  5784 	while(view->PreviousL(active->iStatus));
  5779 	while(view->PreviousL(active->iStatus));
  5785 
  5780 
  5786 	CleanupStack::PopAndDestroy(timer);
  5781 	CleanupStack::PopAndDestroy(timer);
  5805 						
  5800 						
  5806 @SYMDEF                 INC123066
  5801 @SYMDEF                 INC123066
  5807 */
  5802 */
  5808 LOCAL_C void INC123066L(CLogClient& aClient)
  5803 LOCAL_C void INC123066L(CLogClient& aClient)
  5809 	{
  5804 	{
  5810 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-4014 "));
  5805 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-4014 "));
  5811 	CLogEvent* event = CLogEvent::NewL();
  5806 	CLogEvent* event = CLogEvent::NewL();
  5812 	CleanupStack::PushL(event);
  5807 	CleanupStack::PushL(event);
  5813 	event->SetEventType(KLogCallEventTypeUid);
  5808 	event->SetEventType(KLogCallEventTypeUid);
  5814 
  5809 
  5815 	CTestActive* active = new(ELeave)CTestActive();
  5810 	CTestActive* active = new(ELeave)CTestActive();
  5881 @SYMTestExpectedResults SetRecentListL indicates 3 events in view					
  5876 @SYMTestExpectedResults SetRecentListL indicates 3 events in view					
  5882 @SYMDEF                 INC136334
  5877 @SYMDEF                 INC136334
  5883 */
  5878 */
  5884 LOCAL_C void INC136334L(CLogClient& aClient)
  5879 LOCAL_C void INC136334L(CLogClient& aClient)
  5885 	{
  5880 	{
  5886 	test.Next(_L(" @SYMTestCaseID:PDS-LOGENG-CT-4017 "));
  5881 	TheTest.Next(_L(" @SYMTestCaseID:PDS-LOGENG-CT-4017 "));
  5887 	CLogEvent* event = CLogEvent::NewL();
  5882 	CLogEvent* event = CLogEvent::NewL();
  5888 	CleanupStack::PushL(event);
  5883 	CleanupStack::PushL(event);
  5889 
  5884 
  5890 	CTestActive* active = new(ELeave)CTestActive();
  5885 	CTestActive* active = new(ELeave)CTestActive();
  5891 	CleanupStack::PushL(active);
  5886 	CleanupStack::PushL(active);
  5960 //
  5955 //
  5961 void doTestsL()
  5956 void doTestsL()
  5962 	{
  5957 	{
  5963 	TheMatchingIsEnabled = TestUtils::MatchingEnabledL();
  5958 	TheMatchingIsEnabled = TestUtils::MatchingEnabledL();
  5964 	
  5959 	
  5965 	TestUtils::Initialize(_L("T_LOGVIEW1"));
  5960 	TestUtils::Initialize(_L("t_logview1"));
  5966 	TestUtils::DeleteDatabaseL();
  5961 	TestUtils::DeleteDatabaseL();
  5967 
  5962 
  5968 	CLogClient* client = CLogClient::NewL(theFs);
  5963 	CLogClient* client = CLogClient::NewL(theFs);
  5969 	CleanupStack::PushL(client);
  5964 	CleanupStack::PushL(client);
  5970 
  5965 
  5971 	CLogChangeNotifier* notifier = CLogChangeNotifier::NewL();
  5966 	CLogChangeNotifier* notifier = CLogChangeNotifier::NewL();
  5972 	CleanupStack::PushL(notifier);
  5967 	CleanupStack::PushL(notifier);
  5973 
  5968 
  5974 	test.Start(_L("Event View With No Filter"));
  5969 	TheTest.Start(_L("Event View With No Filter"));
  5975 
  5970 
  5976 	TestEventViewL(*client);
  5971 	TestEventViewL(*client);
  5977 	theLog.Write(_L8("Test 1 OK\n"));
  5972 	theLog.Write(_L8("Test 1 OK\n"));
  5978 
  5973 
  5979 	test.Next(_L("Event View Filter alternative"));
  5974 	TheTest.Next(_L("Event View Filter alternative"));
  5980 	TestViewFilteringDefect1L(*client);
  5975 	TestViewFilteringDefect1L(*client);
  5981 	theLog.Write(_L8("Test 2 OK\n"));
  5976 	theLog.Write(_L8("Test 2 OK\n"));
  5982 	test.Next(_L("Event View With Filter"));
  5977 	TheTest.Next(_L("Event View With Filter"));
  5983 	TestEventViewFilter1L(*client);
  5978 	TestEventViewFilter1L(*client);
  5984 	TestEventViewFilter2L(*client);
  5979 	TestEventViewFilter2L(*client);
  5985 	test.Next(_L("INC123066 - LogView not updated if SetFilterL found no event"));
  5980 	TheTest.Next(_L("INC123066 - LogView not updated if SetFilterL found no event"));
  5986 	INC123066L(*client);
  5981 	INC123066L(*client);
  5987 	theLog.Write(_L8("Test 3 OK\n"));
  5982 	theLog.Write(_L8("Test 3 OK\n"));
  5988 	
  5983 	
  5989 	test.Next(_L("Recent View"));
  5984 	TheTest.Next(_L("Recent View"));
  5990 	TestRecentView1L(*client);
  5985 	TestRecentView1L(*client);
  5991 	TestRecentView2L(*client);
  5986 	TestRecentView2L(*client);
  5992 	theLog.Write(_L8("Test 4 OK\n"));
  5987 	theLog.Write(_L8("Test 4 OK\n"));
  5993 
  5988 
  5994 	test.Next(_L("Removing recent events"));
  5989 	TheTest.Next(_L("Removing recent events"));
  5995 	TestRecentRemove1L(*client);
  5990 	TestRecentRemove1L(*client);
  5996 	TestRecentRemove2L(*client);
  5991 	TestRecentRemove2L(*client);
  5997 	theLog.Write(_L8("Test 5 OK\n"));
  5992 	theLog.Write(_L8("Test 5 OK\n"));
  5998 
  5993 
  5999 	test.Next(_L("Duplicate View"));
  5994 	TheTest.Next(_L("Duplicate View"));
  6000 	TestDuplicateViewL(*client);
  5995 	TestDuplicateViewL(*client);
  6001 	theLog.Write(_L8("Test 6 OK\n"));
  5996 	theLog.Write(_L8("Test 6 OK\n"));
  6002 
  5997 
  6003 	test.Next(_L("Removing duplicate events"));
  5998 	TheTest.Next(_L("Removing duplicate events"));
  6004 	TestDuplicateRemoveL(*client);
  5999 	TestDuplicateRemoveL(*client);
  6005 	theLog.Write(_L8("Test 7 OK\n"));
  6000 	theLog.Write(_L8("Test 7 OK\n"));
  6006 
  6001 
  6007 	test.Next(_L("Check purge performed on view setup"));
  6002 	TheTest.Next(_L("Check purge performed on view setup"));
  6008 	TestPurgeOnSetup1L(*client); 
  6003 	TestPurgeOnSetup1L(*client); 
  6009 	TestPurgeOnSetup2L(*client);
  6004 	TestPurgeOnSetup2L(*client);
  6010 	theLog.Write(_L8("Test 8 OK\n"));
  6005 	theLog.Write(_L8("Test 8 OK\n"));
  6011 
  6006 
  6012 	test.Next(_L("View Purging"));
  6007 	TheTest.Next(_L("View Purging"));
  6013 	TestViewPurgeL(*client);
  6008 	TestViewPurgeL(*client);
  6014 	theLog.Write(_L8("Test 9 OK\n"));
  6009 	theLog.Write(_L8("Test 9 OK\n"));
  6015 
  6010 
  6016 	test.Next(_L("Clearing duplicate lists"));
  6011 	TheTest.Next(_L("Clearing duplicate lists"));
  6017 	TestClearDuplicatesL(*client);
  6012 	TestClearDuplicatesL(*client);
  6018 	theLog.Write(_L8("Test 10 OK\n"));
  6013 	theLog.Write(_L8("Test 10 OK\n"));
  6019 
  6014 
  6020 	test.Next(_L("Phone number matching"));
  6015 	TheTest.Next(_L("Phone number matching"));
  6021 	TestPhoneNumberMatchingL(*client);
  6016 	TestPhoneNumberMatchingL(*client);
  6022 	theLog.Write(_L8("Test 11 OK\n"));	
  6017 	theLog.Write(_L8("Test 11 OK\n"));	
  6023 
  6018 
  6024 	test.Next(_L("view flags setting/clearing"));
  6019 	TheTest.Next(_L("view flags setting/clearing"));
  6025 	TestViewFlagsL(*client);
  6020 	TestViewFlagsL(*client);
  6026 	theLog.Write(_L8("Test 12 OK\n"));
  6021 	theLog.Write(_L8("Test 12 OK\n"));
  6027 
  6022 
  6028 	test.Next(_L("Recent view flags setting/clearing"));
  6023 	TheTest.Next(_L("Recent view flags setting/clearing"));
  6029 	TestRecentFlagsL(*client);
  6024 	TestRecentFlagsL(*client);
  6030 	theLog.Write(_L8("Test 13 OK\n"));
  6025 	theLog.Write(_L8("Test 13 OK\n"));
  6031 
  6026 
  6032 	test.Next(_L("View change tests 1"));
  6027 	TheTest.Next(_L("View change tests 1"));
  6033 	TestViewChangeEvents1L(*client);
  6028 	TestViewChangeEvents1L(*client);
  6034 	TestViewChangeEvents1aL(*client);
  6029 	TestViewChangeEvents1aL(*client);
  6035 	theLog.Write(_L8("Test 14 OK\n"));
  6030 	theLog.Write(_L8("Test 14 OK\n"));
  6036 
  6031 
  6037 	test.Next(_L("View change tests 2"));
  6032 	TheTest.Next(_L("View change tests 2"));
  6038 	TestViewChangeEvents2L(*client);
  6033 	TestViewChangeEvents2L(*client);
  6039 	TestViewChangeEvents2aL(*client);
  6034 	TestViewChangeEvents2aL(*client);
  6040 	theLog.Write(_L8("Test 15 OK\n"));
  6035 	theLog.Write(_L8("Test 15 OK\n"));
  6041 
  6036 
  6042 	test.Next(_L("View deletion from within callback"));
  6037 	TheTest.Next(_L("View deletion from within callback"));
  6043 	TestDeletingViewWithinObserverCallbackL(*client);
  6038 	TestDeletingViewWithinObserverCallbackL(*client);
  6044 	theLog.Write(_L8("Test 16 OK\n"));
  6039 	theLog.Write(_L8("Test 16 OK\n"));
  6045 
  6040 
  6046 	test.Next(_L("Test navigation whilst events are added"));
  6041 	TheTest.Next(_L("Test navigation whilst events are added"));
  6047 	TestNavigationWhilstBusyL(*client);
  6042 	TestNavigationWhilstBusyL(*client);
  6048 	theLog.Write(_L8("Test 17 OK\n"));
  6043 	theLog.Write(_L8("Test 17 OK\n"));
  6049 	
  6044 	
  6050 	test.Next(_L("Defect INC105010 - phone number matching"));
  6045 	TheTest.Next(_L("Defect INC105010 - phone number matching"));
  6051 	INC105010L(*client);
  6046 	INC105010L(*client);
  6052 	theLog.Write(_L8("Test 18 OK\n"));
  6047 	theLog.Write(_L8("Test 18 OK\n"));
  6053 
  6048 
  6054 	test.Next(_L("INC136334 - The miss call log won't show if you have  '  in your contact"));
  6049 	TheTest.Next(_L("INC136334 - The miss call log won't show if you have  '  in your contact"));
  6055 	INC136334L(*client);
  6050 	INC136334L(*client);
  6056 	theLog.Write(_L8("Test 19 OK\n"));
  6051 	theLog.Write(_L8("Test 19 OK\n"));
  6057 
  6052 
  6058 	CleanupStack::PopAndDestroy(2); // notifier, client;
  6053 	CleanupStack::PopAndDestroy(2); // notifier, client;
  6059 	}
  6054 	}