loggingservices/eventlogger/test/src/t_logview2.cpp
changeset 0 08ec8eefde2f
child 9 667e88a979d7
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <s32file.h>
       
    17 #include <logeng.h>
       
    18 #include <tz.h>
       
    19 #include "TEST.H"
       
    20 #include <logview.h>
       
    21 
       
    22 #undef test  //there is a "test" macro which hides "RTest test" declaration.
       
    23 
       
    24 RTest test(_L("Log View Test Harness Number 2"));
       
    25 
       
    26 const TInt KTestEventNum = 20;
       
    27 const TInt KTestErrorEventNum = 3;
       
    28 const TLogContactItemId KTestContact1 = 0x123;
       
    29 const TLogContactItemId KTestContact2 = 0x456;
       
    30 const TLogContactItemId KTestContact3 = 0x789;
       
    31 _LIT(KTestDirection1, "Direction Test 1");
       
    32 _LIT(KTestDirection2, "Direction Test 2");
       
    33 _LIT(KTestDirection3, "Direction Test 3");
       
    34 _LIT(KTestNumber1, "Number Test 1");
       
    35 _LIT(KTestNumber2, "Number Test 2");
       
    36 _LIT(KTestNumber3, "Number Test 3");
       
    37 _LIT(KTestRemote1, "Remote Test 1");
       
    38 _LIT(KTestRemote2, "Remote Test 2");
       
    39 _LIT(KTestRemote3, "Remote Test 3");
       
    40 _LIT(KTestStatus1, "Status Test 1");
       
    41 _LIT(KTestStatus2, "Status Test 2");
       
    42 _LIT(KTestStatus3, "Status Test 3");
       
    43 _LIT(KTestSubject, "Test Subject");
       
    44 const TLogLink KTestLink = 0x123456;
       
    45 _LIT8(KTestData, "Test data");
       
    46 
       
    47 /**
       
    48 @SYMTestCaseID          SYSLIB-LOGENG-CT-0930
       
    49 @SYMTestCaseDesc	    Tests for the functionality of CLogViewEvent,CLogFilter classes
       
    50 @SYMTestPriority 	    High
       
    51 @SYMTestActions  	    Tests for event view after setting filter on the views.
       
    52                         Change the filter list configuration and test for the view
       
    53 @SYMTestExpectedResults Test must not fail
       
    54 @SYMREQ                 REQ0000
       
    55 */
       
    56 LOCAL_C void TestEventViewWithFilterListL(CLogClient& aClient)
       
    57 	{
       
    58 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0930 "));
       
    59 	CTestActive* active = new(ELeave)CTestActive;
       
    60 	CleanupStack::PushL(active);
       
    61 
       
    62 	CLogEvent* event = CLogEvent::NewL();
       
    63 	CleanupStack::PushL(event);
       
    64 
       
    65 	event->SetEventType(KLogCallEventTypeUid);
       
    66 	event->SetContact(KTestContact1);
       
    67 	event->SetDirection(KTestDirection1);
       
    68 	event->SetDurationType(KLogDurationNone);
       
    69 	event->SetNumber(KTestNumber1);
       
    70 	event->SetRemoteParty(KTestRemote1);
       
    71 	event->SetStatus(KTestStatus1);
       
    72 
       
    73 	// Add event
       
    74 	active->StartL();
       
    75 	aClient.AddEvent(*event, active->iStatus);
       
    76 	CActiveScheduler::Start();
       
    77 	TEST2(active->iStatus.Int(), KErrNone);
       
    78 
       
    79 	event->SetEventType(KLogDataEventTypeUid);
       
    80 	event->SetContact(KTestContact2);
       
    81 	event->SetDirection(KTestDirection2);
       
    82 	event->SetDurationType(KLogDurationValid);
       
    83 	event->SetNumber(KTestNumber2);
       
    84 	event->SetRemoteParty(KTestRemote2);
       
    85 	event->SetStatus(KTestStatus2);
       
    86 
       
    87 	// Add event
       
    88 	active->StartL();
       
    89 	aClient.AddEvent(*event, active->iStatus);
       
    90 	CActiveScheduler::Start();
       
    91 	TEST2(active->iStatus.Int(), KErrNone);
       
    92 
       
    93 	event->SetEventType(KLogFaxEventTypeUid);
       
    94 	event->SetContact(KTestContact3);
       
    95 	event->SetDirection(KTestDirection3);
       
    96 	event->SetDurationType(KLogDurationData);
       
    97 	event->SetNumber(KTestNumber3);
       
    98 	event->SetRemoteParty(KTestRemote3);
       
    99 	event->SetStatus(KTestStatus3);
       
   100 
       
   101 	// Add event
       
   102 	active->StartL();
       
   103 	aClient.AddEvent(*event, active->iStatus);
       
   104 	CActiveScheduler::Start();
       
   105 	TEST2(active->iStatus.Int(), KErrNone);
       
   106 
       
   107 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
   108 	CleanupStack::PushL(list);
       
   109 
       
   110 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
       
   111 	CleanupStack::PushL(view);
       
   112 
       
   113 	CLogFilter* filter = CLogFilter::NewL();
       
   114 	CleanupStack::PushL(filter);
       
   115 	
       
   116 	// Set filter
       
   117 	filter->SetContact(KTestContact1);
       
   118 
       
   119 	list->AppendL(filter);
       
   120 	CleanupStack::Pop(); // filter
       
   121 
       
   122 	// Test View
       
   123 	active->StartL();
       
   124 	TEST(view->SetFilterL(*list, active->iStatus));
       
   125 	CActiveScheduler::Start();
       
   126 	TEST2(view->CountL(),1);
       
   127 
       
   128 	filter = CLogFilter::NewL();
       
   129 	CleanupStack::PushL(filter);
       
   130 	
       
   131 	// Set filter
       
   132 	filter->SetContact(KTestContact2);
       
   133 
       
   134 	list->AppendL(filter);
       
   135 	CleanupStack::Pop(); // filter
       
   136 
       
   137 	// Test View
       
   138 	active->StartL();
       
   139 	TEST(view->SetFilterL(*list, active->iStatus));
       
   140 	CActiveScheduler::Start();
       
   141 	TEST2(view->CountL(), 2);
       
   142 
       
   143 	filter = CLogFilter::NewL();
       
   144 	CleanupStack::PushL(filter);
       
   145 	
       
   146 	// Set filter
       
   147 	filter->SetContact(KTestContact3);
       
   148 
       
   149 	list->AppendL(filter);
       
   150 	CleanupStack::Pop(); // filter
       
   151 
       
   152 	// Test View
       
   153 	active->StartL();
       
   154 	TEST(view->SetFilterL(*list, active->iStatus));
       
   155 	CActiveScheduler::Start();
       
   156 	TEST2(view->CountL(), 3);
       
   157 
       
   158 	list->ResetAndDestroy();
       
   159 
       
   160 	/////////////////////////////////////////
       
   161 
       
   162 	filter = CLogFilter::NewL();
       
   163 	CleanupStack::PushL(filter);
       
   164 	
       
   165 	// Set filter
       
   166 	filter->SetContact(KTestContact1);
       
   167 	filter->SetDirection(KTestDirection1);
       
   168 
       
   169 	list->AppendL(filter);
       
   170 	CleanupStack::Pop(); // filter
       
   171 
       
   172 	// Test View
       
   173 	active->StartL();
       
   174 	TEST(view->SetFilterL(*list, active->iStatus));
       
   175 	CActiveScheduler::Start();
       
   176 	TEST2(view->CountL(), 1);
       
   177 
       
   178 	filter = CLogFilter::NewL();
       
   179 	CleanupStack::PushL(filter);
       
   180 	
       
   181 	// Set filter
       
   182 	filter->SetContact(KTestContact2);
       
   183 	filter->SetDirection(KTestDirection2);
       
   184 
       
   185 	list->AppendL(filter);
       
   186 	CleanupStack::Pop(); // filter
       
   187 
       
   188 	// Test View
       
   189 	active->StartL();
       
   190 	TEST(view->SetFilterL(*list, active->iStatus));
       
   191 	CActiveScheduler::Start();
       
   192 	TEST2(view->CountL(), 2);
       
   193 
       
   194 	filter = CLogFilter::NewL();
       
   195 	CleanupStack::PushL(filter);
       
   196 	
       
   197 	// Set filter
       
   198 	filter->SetContact(KTestContact3);
       
   199 	filter->SetDirection(KTestDirection3);
       
   200 
       
   201 	list->AppendL(filter);
       
   202 	CleanupStack::Pop(); // filter
       
   203 
       
   204 	// Test View
       
   205 	active->StartL();
       
   206 	TEST(view->SetFilterL(*list, active->iStatus));
       
   207 	CActiveScheduler::Start();
       
   208 	TEST2(view->CountL(), 3);
       
   209 
       
   210 	list->ResetAndDestroy();
       
   211 
       
   212 	/////////////////////////////////////////
       
   213 
       
   214 	filter = CLogFilter::NewL();
       
   215 	CleanupStack::PushL(filter);
       
   216 	
       
   217 	// Set filter
       
   218 	filter->SetContact(KTestContact1);
       
   219 	filter->SetDirection(KTestDirection1);
       
   220 	filter->SetDurationType(KLogDurationNone);
       
   221 
       
   222 	list->AppendL(filter);
       
   223 	CleanupStack::Pop(); // filter
       
   224 
       
   225 	// Test View
       
   226 	active->StartL();
       
   227 	TEST(view->SetFilterL(*list, active->iStatus));
       
   228 	CActiveScheduler::Start();
       
   229 	TEST2(view->CountL(), 1);
       
   230 
       
   231 	filter = CLogFilter::NewL();
       
   232 	CleanupStack::PushL(filter);
       
   233 	
       
   234 	// Set filter
       
   235 	filter->SetContact(KTestContact2);
       
   236 	filter->SetDirection(KTestDirection2);
       
   237 	filter->SetDurationType(KLogDurationValid);
       
   238 
       
   239 	list->AppendL(filter);
       
   240 	CleanupStack::Pop(); // filter
       
   241 
       
   242 	// Test View
       
   243 	active->StartL();
       
   244 	TEST(view->SetFilterL(*list, active->iStatus));
       
   245 	CActiveScheduler::Start();
       
   246 	TEST2(view->CountL(), 2);
       
   247 
       
   248 	filter = CLogFilter::NewL();
       
   249 	CleanupStack::PushL(filter);
       
   250 	
       
   251 	// Set filter
       
   252 	filter->SetContact(KTestContact3);
       
   253 	filter->SetDirection(KTestDirection3);
       
   254 	filter->SetDurationType(KLogDurationData);
       
   255 
       
   256 	list->AppendL(filter);
       
   257 	CleanupStack::Pop(); // filter
       
   258 
       
   259 	// Test View
       
   260 	active->StartL();
       
   261 	TEST(view->SetFilterL(*list, active->iStatus));
       
   262 	CActiveScheduler::Start();
       
   263 	TEST2(view->CountL(), 3);
       
   264 
       
   265 	list->ResetAndDestroy();
       
   266 
       
   267 	/////////////////////////////////////////
       
   268 
       
   269 	filter = CLogFilter::NewL();
       
   270 	CleanupStack::PushL(filter);
       
   271 	
       
   272 	// Set filter
       
   273 	filter->SetContact(KTestContact1);
       
   274 	filter->SetDirection(KTestDirection1);
       
   275 	filter->SetDurationType(KLogDurationNone);
       
   276 	filter->SetEventType(KLogCallEventTypeUid);
       
   277 
       
   278 	list->AppendL(filter);
       
   279 	CleanupStack::Pop(); // filter
       
   280 
       
   281 	// Test View
       
   282 	active->StartL();
       
   283 	TEST(view->SetFilterL(*list, active->iStatus));
       
   284 	CActiveScheduler::Start();
       
   285 	TEST2(view->CountL(), 1);
       
   286 
       
   287 	filter = CLogFilter::NewL();
       
   288 	CleanupStack::PushL(filter);
       
   289 	
       
   290 	// Set filter
       
   291 	filter->SetContact(KTestContact2);
       
   292 	filter->SetDirection(KTestDirection2);
       
   293 	filter->SetDurationType(KLogDurationValid);
       
   294 	filter->SetEventType(KLogDataEventTypeUid);
       
   295 
       
   296 	list->AppendL(filter);
       
   297 	CleanupStack::Pop(); // filter
       
   298 
       
   299 	// Test View
       
   300 	active->StartL();
       
   301 	TEST(view->SetFilterL(*list, active->iStatus));
       
   302 	CActiveScheduler::Start();
       
   303 	TEST2(view->CountL(), 2);
       
   304 
       
   305 	filter = CLogFilter::NewL();
       
   306 	CleanupStack::PushL(filter);
       
   307 	
       
   308 	// Set filter
       
   309 	filter->SetContact(KTestContact3);
       
   310 	filter->SetDirection(KTestDirection3);
       
   311 	filter->SetDurationType(KLogDurationData);
       
   312 	filter->SetEventType(KLogFaxEventTypeUid);
       
   313 
       
   314 	list->AppendL(filter);
       
   315 	CleanupStack::Pop(); // filter
       
   316 
       
   317 	// Test View
       
   318 	active->StartL();
       
   319 	TEST(view->SetFilterL(*list, active->iStatus));
       
   320 	CActiveScheduler::Start();
       
   321 	TEST2(view->CountL(), 3);
       
   322 
       
   323 	list->ResetAndDestroy();
       
   324 
       
   325 	/////////////////////////////////////////
       
   326 
       
   327 	filter = CLogFilter::NewL();
       
   328 	CleanupStack::PushL(filter);
       
   329 	
       
   330 	// Set filter
       
   331 	filter->SetContact(KTestContact1);
       
   332 	filter->SetDirection(KTestDirection1);
       
   333 	filter->SetDurationType(KLogDurationNone);
       
   334 	filter->SetEventType(KLogCallEventTypeUid);
       
   335 	filter->SetNumber(KTestNumber1);
       
   336 
       
   337 	list->AppendL(filter);
       
   338 	CleanupStack::Pop(); // filter
       
   339 
       
   340 	// Test View
       
   341 	active->StartL();
       
   342 	TEST(view->SetFilterL(*list, active->iStatus));
       
   343 	CActiveScheduler::Start();
       
   344 	TEST2(view->CountL(), 1);
       
   345 
       
   346 	filter = CLogFilter::NewL();
       
   347 	CleanupStack::PushL(filter);
       
   348 	
       
   349 	// Set filter
       
   350 	filter->SetContact(KTestContact2);
       
   351 	filter->SetDirection(KTestDirection2);
       
   352 	filter->SetDurationType(KLogDurationValid);
       
   353 	filter->SetEventType(KLogDataEventTypeUid);
       
   354 	filter->SetNumber(KTestNumber2);
       
   355 
       
   356 	list->AppendL(filter);
       
   357 	CleanupStack::Pop(); // filter
       
   358 
       
   359 	// Test View
       
   360 	active->StartL();
       
   361 	TEST(view->SetFilterL(*list, active->iStatus));
       
   362 	CActiveScheduler::Start();
       
   363 	TEST2(view->CountL(), 2);
       
   364 
       
   365 	filter = CLogFilter::NewL();
       
   366 	CleanupStack::PushL(filter);
       
   367 	
       
   368 	// Set filter
       
   369 	filter->SetContact(KTestContact3);
       
   370 	filter->SetDirection(KTestDirection3);
       
   371 	filter->SetDurationType(KLogDurationData);
       
   372 	filter->SetEventType(KLogFaxEventTypeUid);
       
   373 	filter->SetNumber(KTestNumber3);
       
   374 
       
   375 	list->AppendL(filter);
       
   376 	CleanupStack::Pop(); // filter
       
   377 
       
   378 	// Test View
       
   379 	active->StartL();
       
   380 	TEST(view->SetFilterL(*list, active->iStatus));
       
   381 	CActiveScheduler::Start();
       
   382 	TEST2(view->CountL(), 3);
       
   383 
       
   384 	list->ResetAndDestroy();
       
   385 
       
   386 	/////////////////////////////////////////
       
   387 
       
   388 	filter = CLogFilter::NewL();
       
   389 	CleanupStack::PushL(filter);
       
   390 	
       
   391 	// Set filter
       
   392 	filter->SetContact(KTestContact1);
       
   393 	filter->SetDirection(KTestDirection1);
       
   394 	filter->SetDurationType(KLogDurationNone);
       
   395 	filter->SetEventType(KLogCallEventTypeUid);
       
   396 	filter->SetNumber(KTestNumber1);
       
   397 	filter->SetRemoteParty(KTestRemote1);
       
   398 
       
   399 	list->AppendL(filter);
       
   400 	CleanupStack::Pop(); // filter
       
   401 
       
   402 	// Test View
       
   403 	active->StartL();
       
   404 	TEST(view->SetFilterL(*list, active->iStatus));
       
   405 	CActiveScheduler::Start();
       
   406 	TEST2(view->CountL(), 1);
       
   407 
       
   408 	filter = CLogFilter::NewL();
       
   409 	CleanupStack::PushL(filter);
       
   410 	
       
   411 	// Set filter
       
   412 	filter->SetContact(KTestContact2);
       
   413 	filter->SetDirection(KTestDirection2);
       
   414 	filter->SetDurationType(KLogDurationValid);
       
   415 	filter->SetEventType(KLogDataEventTypeUid);
       
   416 	filter->SetNumber(KTestNumber2);
       
   417 	filter->SetRemoteParty(KTestRemote2);
       
   418 
       
   419 	list->AppendL(filter);
       
   420 	CleanupStack::Pop(); // filter
       
   421 
       
   422 	// Test View
       
   423 	active->StartL();
       
   424 	TEST(view->SetFilterL(*list, active->iStatus));
       
   425 	CActiveScheduler::Start();
       
   426 	TEST2(view->CountL(), 2);
       
   427 
       
   428 	filter = CLogFilter::NewL();
       
   429 	CleanupStack::PushL(filter);
       
   430 	
       
   431 	// Set filter
       
   432 	filter->SetContact(KTestContact3);
       
   433 	filter->SetDirection(KTestDirection3);
       
   434 	filter->SetDurationType(KLogDurationData);
       
   435 	filter->SetEventType(KLogFaxEventTypeUid);
       
   436 	filter->SetNumber(KTestNumber3);
       
   437 	filter->SetRemoteParty(KTestRemote3);
       
   438 
       
   439 	list->AppendL(filter);
       
   440 	CleanupStack::Pop(); // filter
       
   441 
       
   442 	// Test View
       
   443 	active->StartL();
       
   444 	TEST(view->SetFilterL(*list, active->iStatus));
       
   445 	CActiveScheduler::Start();
       
   446 	TEST2(view->CountL(), 3);
       
   447 
       
   448 	list->ResetAndDestroy();
       
   449 
       
   450 	/////////////////////////////////////////
       
   451 
       
   452 	filter = CLogFilter::NewL();
       
   453 	CleanupStack::PushL(filter);
       
   454 	
       
   455 	// Set filter
       
   456 	filter->SetContact(KTestContact1);
       
   457 	filter->SetDirection(KTestDirection1);
       
   458 	filter->SetDurationType(KLogDurationNone);
       
   459 	filter->SetEventType(KLogCallEventTypeUid);
       
   460 	filter->SetNumber(KTestNumber1);
       
   461 	filter->SetRemoteParty(KTestRemote1);
       
   462 	filter->SetStatus(KTestStatus1);
       
   463 
       
   464 	list->AppendL(filter);
       
   465 	CleanupStack::Pop(); // filter
       
   466 
       
   467 	// Test View
       
   468 	active->StartL();
       
   469 	TEST(view->SetFilterL(*list, active->iStatus));
       
   470 	CActiveScheduler::Start();
       
   471 	TEST2(view->CountL(), 1);
       
   472 
       
   473 	filter = CLogFilter::NewL();
       
   474 	CleanupStack::PushL(filter);
       
   475 	
       
   476 	// Set filter
       
   477 	filter->SetContact(KTestContact2);
       
   478 	filter->SetDirection(KTestDirection2);
       
   479 	filter->SetDurationType(KLogDurationValid);
       
   480 	filter->SetEventType(KLogDataEventTypeUid);
       
   481 	filter->SetNumber(KTestNumber2);
       
   482 	filter->SetRemoteParty(KTestRemote2);
       
   483 	filter->SetStatus(KTestStatus2);
       
   484 
       
   485 	list->AppendL(filter);
       
   486 	CleanupStack::Pop(); // filter
       
   487 
       
   488 	// Test View
       
   489 	active->StartL();
       
   490 	TEST(view->SetFilterL(*list, active->iStatus));
       
   491 	CActiveScheduler::Start();
       
   492 	TEST2(view->CountL(), 2);
       
   493 
       
   494 	filter = CLogFilter::NewL();
       
   495 	CleanupStack::PushL(filter);
       
   496 	
       
   497 	// Set filter
       
   498 	filter->SetContact(KTestContact3);
       
   499 	filter->SetDirection(KTestDirection3);
       
   500 	filter->SetDurationType(KLogDurationData);
       
   501 	filter->SetEventType(KLogFaxEventTypeUid);
       
   502 	filter->SetNumber(KTestNumber3);
       
   503 	filter->SetRemoteParty(KTestRemote3);
       
   504 	filter->SetStatus(KTestStatus3);
       
   505 
       
   506 	list->AppendL(filter);
       
   507 	CleanupStack::Pop(); // filter
       
   508 
       
   509 	// Test View
       
   510 	active->StartL();
       
   511 	TEST(view->SetFilterL(*list, active->iStatus));
       
   512 	CActiveScheduler::Start();
       
   513 	TEST2(view->CountL(), 3);
       
   514 
       
   515 	list->ResetAndDestroy();
       
   516 
       
   517 	CleanupStack::PopAndDestroy(4); // list, view, event, active
       
   518 	}
       
   519 
       
   520 /**
       
   521 @SYMTestCaseID          SYSLIB-LOGENG-CT-3432
       
   522 @SYMTestCaseDesc	    Test the functionality of CLogViewEvent::SetFilterL with the CLogFilterList parameter containing multiple filters with start time and end time.
       
   523 @SYMTestPriority 	    High
       
   524 @SYMTestActions  	    1. Add 2 events.
       
   525 						2. Setup a CLogFilterList with two filters targeting the first event. Both filters have start and end time. Call SetFilterL.
       
   526 						3. Verify view has 1 event and no LogServ panic.
       
   527 						4. Clear the filter list.
       
   528 						5. Setup filter for first event with start and end time. Call SetFilterL.
       
   529 						6. Verify view has one event.
       
   530                         7. Setup second filter for second event with start and end time. Append this filter to filter list and call SetFilterL.
       
   531 						8. Verify view has 2 events and no LogServ panic.
       
   532 @SYMTestExpectedResults Log view has expected number of events and no LogServ panic.
       
   533 @SYMDEF                 INC102412
       
   534 */
       
   535 LOCAL_C void TestEventViewWithTimestampsInFilterListL(CLogClient& aClient)
       
   536 	{
       
   537 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3432 "));
       
   538 	TTime testStartTime;
       
   539 	testStartTime.UniversalTime();
       
   540 	TTime tomorrow = testStartTime + (TTimeIntervalDays)1;
       
   541 	TTime twoDaysFromNow = tomorrow + (TTimeIntervalDays)1;
       
   542 
       
   543 	CTestActive* active = new(ELeave)CTestActive;
       
   544 	CleanupStack::PushL(active);
       
   545 
       
   546 	// Get rid of all the events in the log
       
   547 	active->StartL();
       
   548 	aClient.ClearLog(tomorrow, active->iStatus);
       
   549 	CActiveScheduler::Start();
       
   550 	TEST2(active->iStatus.Int(), KErrNone);
       
   551 	
       
   552 	// Wait a second before adding events to log.
       
   553 	User::After(1100000);
       
   554 
       
   555 	// Add two events to log
       
   556 	CLogEvent* event = CLogEvent::NewL();
       
   557 	CleanupStack::PushL(event);
       
   558 
       
   559 	// Add event 1
       
   560 	event->SetEventType(KLogCallEventTypeUid);
       
   561 	event->SetContact(KTestContact1);
       
   562 	event->SetDirection(KTestDirection1);
       
   563 	event->SetDurationType(KLogDurationNone);
       
   564 	event->SetNumber(KTestNumber1);
       
   565 	event->SetRemoteParty(KTestRemote1);
       
   566 	event->SetStatus(KTestStatus1);
       
   567 
       
   568 	active->StartL();
       
   569 	aClient.AddEvent(*event, active->iStatus);
       
   570 	CActiveScheduler::Start();
       
   571 	TEST2(active->iStatus.Int(), KErrNone);
       
   572 
       
   573 	// Add event 2
       
   574 	event->SetEventType(KLogDataEventTypeUid);
       
   575 	event->SetContact(KTestContact2);
       
   576 	event->SetDirection(KTestDirection2);
       
   577 	event->SetDurationType(KLogDurationValid);
       
   578 	event->SetNumber(KTestNumber2);
       
   579 	event->SetRemoteParty(KTestRemote2);
       
   580 	event->SetStatus(KTestStatus2);
       
   581 
       
   582 	active->StartL();
       
   583 	aClient.AddEvent(*event, active->iStatus);
       
   584 	CActiveScheduler::Start();
       
   585 	TEST2(active->iStatus.Int(), KErrNone);
       
   586 
       
   587 	// Setup filter
       
   588 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
   589 	CleanupStack::PushL(list);
       
   590 
       
   591 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
       
   592 	CleanupStack::PushL(view);
       
   593 
       
   594 	CLogFilter* filter = CLogFilter::NewL();
       
   595 	CleanupStack::PushL(filter);
       
   596 	
       
   597 	// Set half a filter
       
   598 	filter->SetContact(KTestContact1);
       
   599 	filter->SetDirection(KTestDirection1);
       
   600 	filter->SetDurationType(KLogDurationNone);
       
   601 	filter->SetStartTime(testStartTime);
       
   602 	TTime t1 = filter->StartTime();
       
   603 	TEST(t1 == testStartTime);
       
   604 	filter->SetEndTime(tomorrow);
       
   605 	TTime t2 = filter->EndTime();
       
   606 	TEST(t2 == tomorrow);
       
   607 
       
   608 	list->AppendL(filter);
       
   609 	CleanupStack::Pop(); // filter
       
   610 
       
   611 	// set the other half of filter for event 1
       
   612 	filter = CLogFilter::NewL();
       
   613 	CleanupStack::PushL(filter);
       
   614 
       
   615 	filter->SetEventType(KLogCallEventTypeUid);
       
   616 	filter->SetNumber(KTestNumber1);
       
   617 	filter->SetRemoteParty(KTestRemote1);
       
   618 	filter->SetStatus(KTestStatus1);
       
   619 
       
   620 	// start time is duplicate of previous filter, 
       
   621 	// end time is not duplicate
       
   622 	filter->SetStartTime(testStartTime);
       
   623 	filter->SetEndTime(twoDaysFromNow);
       
   624 
       
   625 	list->AppendL(filter);
       
   626 	CleanupStack::Pop(); // filter
       
   627 
       
   628 	// Test View
       
   629 	active->StartL();
       
   630 	TEST(view->SetFilterL(*list, active->iStatus));
       
   631 	CActiveScheduler::Start();
       
   632 	TEST2(view->CountL(),1);
       
   633 
       
   634 	list->ResetAndDestroy();
       
   635 
       
   636 	// check contents of the event.
       
   637 	TBool res = view->FirstL(active->iStatus);
       
   638 	TEST(res);
       
   639 	active->StartL();
       
   640 	CActiveScheduler::Start();
       
   641 	TEST2(active->iStatus.Int(), KErrNone);
       
   642 	
       
   643 	TEST2(view->Event().Contact(), KTestContact1);
       
   644 	TEST( view->Event().Number() == KTestNumber1);
       
   645 	TEST( view->Event().Status() == KTestStatus1);
       
   646 	TEST( view->Event().RemoteParty() == KTestRemote1);
       
   647 
       
   648 	/////////////////////////////////////////
       
   649 
       
   650 	filter = CLogFilter::NewL();
       
   651 	CleanupStack::PushL(filter);
       
   652 	
       
   653 	// Set filter
       
   654 	filter->SetContact(KTestContact1);
       
   655 	filter->SetDirection(KTestDirection1);
       
   656 	filter->SetDurationType(KLogDurationNone);
       
   657 	filter->SetEventType(KLogCallEventTypeUid);
       
   658 	filter->SetNumber(KTestNumber1);
       
   659 	filter->SetRemoteParty(KTestRemote1);
       
   660 	filter->SetStatus(KTestStatus1);
       
   661 	filter->SetStartTime(testStartTime);
       
   662 	filter->SetEndTime(tomorrow);
       
   663 
       
   664 	list->AppendL(filter);
       
   665 	CleanupStack::Pop(); // filter
       
   666 
       
   667 	// Test View
       
   668 	active->StartL();
       
   669 	TEST(view->SetFilterL(*list, active->iStatus));
       
   670 	CActiveScheduler::Start();
       
   671 	TEST2(view->CountL(), 1);
       
   672 
       
   673 	filter = CLogFilter::NewL();
       
   674 	CleanupStack::PushL(filter);
       
   675 	
       
   676 	// Set filter
       
   677 	filter->SetContact(KTestContact2);
       
   678 	filter->SetDirection(KTestDirection2);
       
   679 	filter->SetDurationType(KLogDurationValid);
       
   680 	filter->SetEventType(KLogDataEventTypeUid);
       
   681 	filter->SetNumber(KTestNumber2);
       
   682 	filter->SetRemoteParty(KTestRemote2);
       
   683 	filter->SetStatus(KTestStatus2);
       
   684 
       
   685 	// start time is duplicate,
       
   686 	// end time is not duplicate
       
   687 	filter->SetStartTime(testStartTime);
       
   688 	filter->SetEndTime(twoDaysFromNow);
       
   689 
       
   690 	list->AppendL(filter);
       
   691 	CleanupStack::Pop(); // filter
       
   692 
       
   693 	// Test View
       
   694 	active->StartL();
       
   695 	TEST(view->SetFilterL(*list, active->iStatus));
       
   696 	CActiveScheduler::Start();
       
   697 	TEST2(view->CountL(), 2);
       
   698 
       
   699 	list->ResetAndDestroy();
       
   700 
       
   701 	// check contents of event 2 (most recent)
       
   702 	res = view->FirstL(active->iStatus);
       
   703 	TEST(res);
       
   704 	active->StartL();
       
   705 	CActiveScheduler::Start();
       
   706 	TEST2(active->iStatus.Int(), KErrNone);
       
   707 	
       
   708 	TEST2(view->Event().Contact(), KTestContact2);
       
   709 	TEST( view->Event().Number() == KTestNumber2);
       
   710 	TEST( view->Event().Status() == KTestStatus2);
       
   711 	TEST( view->Event().RemoteParty() == KTestRemote2);
       
   712 
       
   713 	// check contents of event 1 (older)
       
   714 	res = view->NextL(active->iStatus);
       
   715 	TEST(res);
       
   716 	active->StartL();
       
   717 	CActiveScheduler::Start();
       
   718 	TEST2(active->iStatus.Int(), KErrNone);
       
   719 	
       
   720 	TEST2(view->Event().Contact(), KTestContact1);
       
   721 	TEST( view->Event().Number() == KTestNumber1);
       
   722 	TEST( view->Event().Status() == KTestStatus1);
       
   723 	TEST( view->Event().RemoteParty() == KTestRemote1);
       
   724 
       
   725 	CleanupStack::PopAndDestroy(4); // list, view, event, active
       
   726 	}
       
   727 
       
   728 /**
       
   729 @SYMTestCaseID          SYSLIB-LOGENG-CT-0931
       
   730 @SYMTestCaseDesc	    Tests for recent view list with filters 
       
   731 @SYMTestPriority 	    High
       
   732 @SYMTestActions  	    Tests for recent view list,with different settings of the filter. 
       
   733 @SYMTestExpectedResults Test must not fail
       
   734 @SYMREQ                 REQ0000
       
   735 */
       
   736 LOCAL_C void TestRecentViewWithFilterL(CLogClient& aClient)
       
   737 	{
       
   738 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0931 "));
       
   739 	CLogEvent* event = CLogEvent::NewL();
       
   740 	CleanupStack::PushL(event);
       
   741 
       
   742 	CTestActive* active = new(ELeave)CTestActive();
       
   743 	CleanupStack::PushL(active);
       
   744 
       
   745 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
   746 	CleanupStack::PushL(view);
       
   747 
       
   748 	// Incoming
       
   749 	TLogString buf;
       
   750 	aClient.GetString(buf, R_LOG_DIR_IN);
       
   751 
       
   752 	event->SetEventType(KLogCallEventTypeUid);
       
   753 	event->SetDirection(buf);
       
   754 	event->SetNumber(_L("1"));
       
   755 
       
   756 	// Add event
       
   757 	active->StartL();
       
   758 	aClient.AddEvent(*event, active->iStatus);
       
   759 	CActiveScheduler::Start();
       
   760 	TEST2(active->iStatus.Int(), KErrNone);
       
   761 
       
   762 	event->SetDurationType(KLogDurationData);
       
   763 	event->SetNumber(_L("2"));
       
   764 
       
   765 	// Add event
       
   766 	active->StartL();
       
   767 	aClient.AddEvent(*event, active->iStatus);
       
   768 	CActiveScheduler::Start();
       
   769 	TEST2(active->iStatus.Int(), KErrNone);
       
   770 
       
   771 	event->SetStatus(KTestStatus1);
       
   772 	event->SetNumber(_L("3"));
       
   773 
       
   774 	// Add event
       
   775 	active->StartL();
       
   776 	aClient.AddEvent(*event, active->iStatus);
       
   777 	CActiveScheduler::Start();
       
   778 	TEST2(active->iStatus.Int(), KErrNone);
       
   779 
       
   780 	event->SetContact(KTestContact1);
       
   781 	event->SetNumber(_L("4"));
       
   782 
       
   783 	// Add event
       
   784 	active->StartL();
       
   785 	aClient.AddEvent(*event, active->iStatus);
       
   786 	CActiveScheduler::Start();
       
   787 	TEST2(active->iStatus.Int(), KErrNone);
       
   788 
       
   789 	active->StartL();
       
   790 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
   791 	CActiveScheduler::Start();
       
   792 	TEST2(view->CountL(), 4);
       
   793 
       
   794 	CLogFilter* filter = CLogFilter::NewL();
       
   795 	CleanupStack::PushL(filter);
       
   796 
       
   797 	// This should make no difference
       
   798 	filter->SetEventType(KLogCallEventTypeUid);
       
   799 
       
   800 	active->StartL();
       
   801 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   802 	CActiveScheduler::Start();
       
   803 	TEST2(view->CountL(), 4);
       
   804 
       
   805 	// This should make no difference
       
   806 	filter->SetDirection(buf);
       
   807 
       
   808 	active->StartL();
       
   809 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   810 	CActiveScheduler::Start();
       
   811 	TEST2(view->CountL(), 4);
       
   812 
       
   813 	filter->SetDurationType(KLogDurationData);
       
   814 
       
   815 	active->StartL();
       
   816 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   817 	CActiveScheduler::Start();
       
   818 	TEST2(view->CountL(), 3);
       
   819 
       
   820 	filter->SetStatus(KTestStatus1);
       
   821 
       
   822 	active->StartL();
       
   823 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   824 	CActiveScheduler::Start();
       
   825 	TEST2(view->CountL(), 2);
       
   826 
       
   827 	filter->SetContact(KTestContact1);
       
   828 
       
   829 	active->StartL();
       
   830 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   831 	CActiveScheduler::Start();
       
   832 	TEST2(view->CountL(), 1);
       
   833 
       
   834 	filter->SetStatus(_L("Dummy"));
       
   835 	TEST(!view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
   836 
       
   837 	CleanupStack::PopAndDestroy(4); // filter, view, active, event
       
   838 	}
       
   839 
       
   840 /**
       
   841 @SYMTestCaseID          SYSLIB-LOGENG-CT-0932
       
   842 @SYMTestCaseDesc	    Tests for recent view list with filter set for the view
       
   843 @SYMTestPriority 	    High
       
   844 @SYMTestActions  	    Tests for recent view list set by the specified set of filters.
       
   845 @SYMTestExpectedResults Test must not fail
       
   846 @SYMREQ                 REQ0000
       
   847 */
       
   848 LOCAL_C void TestRecentViewWithFilterListL(CLogClient& aClient)
       
   849 	{
       
   850 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0932 "));
       
   851 	CLogEvent* event = CLogEvent::NewL();
       
   852 	CleanupStack::PushL(event);
       
   853 
       
   854 	CTestActive* active = new(ELeave)CTestActive();
       
   855 	CleanupStack::PushL(active);
       
   856 
       
   857 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
   858 	CleanupStack::PushL(view);
       
   859 
       
   860 	// Make sure there are no entries in any recent lists
       
   861 	active->StartL();
       
   862 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
   863 	CActiveScheduler::Start();
       
   864 	TEST2(active->iStatus.Int(), KErrNone);
       
   865 
       
   866 	// Incoming
       
   867 	TLogString buf;
       
   868 	aClient.GetString(buf, R_LOG_DIR_IN);
       
   869 
       
   870 	event->SetEventType(KLogCallEventTypeUid);
       
   871 	event->SetDirection(buf);
       
   872 	event->SetDurationType(KLogDurationNone);
       
   873 	event->SetContact(KTestContact1);
       
   874 	event->SetStatus(KTestStatus1);
       
   875 
       
   876 	// Add event
       
   877 	active->StartL();
       
   878 	aClient.AddEvent(*event, active->iStatus);
       
   879 	CActiveScheduler::Start();
       
   880 	TEST2(active->iStatus.Int(), KErrNone);
       
   881 
       
   882 	event->SetDurationType(KLogDurationValid);
       
   883 	event->SetContact(KTestContact2);
       
   884 	event->SetStatus(KTestStatus2);
       
   885 
       
   886 	// Add event
       
   887 	active->StartL();
       
   888 	aClient.AddEvent(*event, active->iStatus);
       
   889 	CActiveScheduler::Start();
       
   890 	TEST2(active->iStatus.Int(), KErrNone);
       
   891 
       
   892 	event->SetDurationType(KLogDurationData);
       
   893 	event->SetContact(KTestContact3);
       
   894 	event->SetStatus(KTestStatus3);
       
   895 
       
   896 	// Add event
       
   897 	active->StartL();
       
   898 	aClient.AddEvent(*event, active->iStatus);
       
   899 	CActiveScheduler::Start();
       
   900 	TEST2(active->iStatus.Int(), KErrNone);
       
   901 
       
   902 	active->StartL();
       
   903 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
   904 	CActiveScheduler::Start();
       
   905 	TEST2(active->iStatus.Int(), KErrNone);
       
   906 	TEST2(view->CountL(), 3);
       
   907 
       
   908 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
   909 	CleanupStack::PushL(list);
       
   910 
       
   911 	CLogFilter* filter = CLogFilter::NewL();
       
   912 	CleanupStack::PushL(filter);
       
   913 	list->AppendL(filter);
       
   914 	CleanupStack::Pop(); // filter
       
   915 
       
   916 	filter->SetDurationType(KLogDurationNone);
       
   917 	filter->SetStatus(KTestStatus1);
       
   918 	filter->SetContact(KTestContact1);
       
   919 
       
   920 	active->StartL();
       
   921 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
       
   922 	CActiveScheduler::Start();
       
   923 	TEST2(active->iStatus.Int(), KErrNone);
       
   924 	TEST2(view->CountL(), 1);
       
   925 
       
   926 	filter = CLogFilter::NewL();
       
   927 	CleanupStack::PushL(filter);
       
   928 	list->AppendL(filter);
       
   929 	CleanupStack::Pop(); // filter
       
   930 
       
   931 	filter->SetDurationType(KLogDurationValid);
       
   932 	filter->SetStatus(KTestStatus2);
       
   933 	filter->SetContact(KTestContact2);
       
   934 
       
   935 	active->StartL();
       
   936 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
       
   937 	CActiveScheduler::Start();
       
   938 	TEST2(active->iStatus.Int(), KErrNone);
       
   939 	TEST2(view->CountL(), 2);
       
   940 
       
   941 	filter = CLogFilter::NewL();
       
   942 	CleanupStack::PushL(filter);
       
   943 	list->AppendL(filter);
       
   944 	CleanupStack::Pop(); // filter
       
   945 
       
   946 	filter->SetDurationType(KLogDurationData);
       
   947 	filter->SetStatus(KTestStatus3);
       
   948 	filter->SetContact(KTestContact3);
       
   949 
       
   950 	active->StartL();
       
   951 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *list, active->iStatus));
       
   952 	CActiveScheduler::Start();
       
   953 	TEST2(active->iStatus.Int(), KErrNone);
       
   954 	TEST2(view->CountL(), 3);
       
   955 
       
   956 	list->ResetAndDestroy();
       
   957 	CleanupStack::PopAndDestroy(4); // list, view, active, event
       
   958 	}
       
   959 
       
   960 /**
       
   961 @SYMTestCaseID          SYSLIB-LOGENG-CT-0933
       
   962 @SYMTestCaseDesc	    Tests for duplicate event view with filter 
       
   963 @SYMTestPriority 	    High
       
   964 @SYMTestActions  	    Tests for duplicate event view count. 
       
   965 @SYMTestExpectedResults Test must not fail
       
   966 @SYMREQ                 REQ0000
       
   967 */
       
   968 LOCAL_C void TestDuplicateViewWithFilterL(CLogClient& aClient)
       
   969 	{
       
   970 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0933 "));
       
   971 	CLogEvent* event = CLogEvent::NewL();
       
   972 	CleanupStack::PushL(event);
       
   973 
       
   974 	CTestActive* active = new(ELeave)CTestActive();
       
   975 	CleanupStack::PushL(active);
       
   976 
       
   977 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
   978 	CleanupStack::PushL(view);
       
   979 
       
   980 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
   981 	CleanupStack::PushL(duplicate);
       
   982 
       
   983 	// Make sure there are no entries in any recent lists
       
   984 	active->StartL();
       
   985 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
   986 	CActiveScheduler::Start();
       
   987 	TEST2(active->iStatus.Int(), KErrNone);
       
   988 
       
   989 	// Incoming
       
   990 	TLogString buf;
       
   991 	aClient.GetString(buf, R_LOG_DIR_IN);
       
   992 
       
   993 	event->SetEventType(KLogCallEventTypeUid);
       
   994 	event->SetDirection(buf);
       
   995 	event->SetContact(KTestContact1);
       
   996 
       
   997 	// Add event
       
   998 	active->StartL();
       
   999 	aClient.AddEvent(*event, active->iStatus);
       
  1000 	CActiveScheduler::Start();
       
  1001 	TEST2(active->iStatus.Int(), KErrNone);
       
  1002 
       
  1003 	event->SetDurationType(KLogDurationValid);
       
  1004 
       
  1005 	// Add event
       
  1006 	active->StartL();
       
  1007 	aClient.AddEvent(*event, active->iStatus);
       
  1008 	CActiveScheduler::Start();
       
  1009 	TEST2(active->iStatus.Int(), KErrNone);
       
  1010 
       
  1011 	event->SetStatus(KTestStatus1);
       
  1012 
       
  1013 	// Add event
       
  1014 	active->StartL();
       
  1015 	aClient.AddEvent(*event, active->iStatus);
       
  1016 	CActiveScheduler::Start();
       
  1017 	TEST2(active->iStatus.Int(), KErrNone);
       
  1018 
       
  1019 	event->SetDurationType(KLogDurationNone);
       
  1020 	event->SetStatus(KNullDesC);
       
  1021 
       
  1022 	// Add event - This will be the entry in recent list
       
  1023 	active->StartL();
       
  1024 	aClient.AddEvent(*event, active->iStatus);
       
  1025 	CActiveScheduler::Start();
       
  1026 	TEST2(active->iStatus.Int(), KErrNone);
       
  1027 	TLogId logId1 = event->Id();
       
  1028 
       
  1029 	// Should only be one event in recent list - the rest are duplicates
       
  1030 	active->StartL();
       
  1031 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  1032 	CActiveScheduler::Start();
       
  1033 	TEST2(active->iStatus.Int(), KErrNone);
       
  1034 	TEST2(view->CountL(), 1);
       
  1035 	
       
  1036 	TLogRecentList recentList = view->RecentList();
       
  1037 	TEST(recentList == KLogRecentIncomingCalls);
       
  1038 
       
  1039 	// Check duplicate count
       
  1040 	active->StartL();
       
  1041 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  1042 	CActiveScheduler::Start();
       
  1043 	TEST2(active->iStatus.Int(), KErrNone);
       
  1044 	TEST2(duplicate->CountL(), 3);
       
  1045 	
       
  1046 	TLogId logId2 = duplicate->Source();
       
  1047 	TEST(logId1 == logId2);
       
  1048 
       
  1049 	CLogFilter* filter = CLogFilter::NewL();
       
  1050 	CleanupStack::PushL(filter);
       
  1051 
       
  1052 	active->StartL();
       
  1053 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1054 	CActiveScheduler::Start();
       
  1055 	TEST2(active->iStatus.Int(), KErrNone);
       
  1056 	TEST2(duplicate->CountL(), 3);
       
  1057 
       
  1058 	filter->SetDurationType(KLogDurationValid);
       
  1059 
       
  1060 	active->StartL();
       
  1061 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1062 	CActiveScheduler::Start();
       
  1063 	TEST2(active->iStatus.Int(), KErrNone);
       
  1064 	TEST2(duplicate->CountL(), 2);
       
  1065 
       
  1066 	filter->SetStatus(KTestStatus1);
       
  1067 
       
  1068 	active->StartL();
       
  1069 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1070 	CActiveScheduler::Start();
       
  1071 	TEST2(active->iStatus.Int(), KErrNone);
       
  1072 	TEST2(duplicate->CountL(), 1);
       
  1073 
       
  1074 	filter->SetStatus(KTestStatus2);
       
  1075 	TEST(!view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1076 
       
  1077 	CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
       
  1078 	}
       
  1079 
       
  1080 /**
       
  1081 @SYMTestCaseID          SYSLIB-LOGENG-CT-0934
       
  1082 @SYMTestCaseDesc	    Tests for duplicate event view with filter list
       
  1083 @SYMTestPriority 	    High
       
  1084 @SYMTestActions  	    Tests for duplicate event view count,set by the specified set of filters.
       
  1085 @SYMTestExpectedResults Test must not fail
       
  1086 @SYMREQ                 REQ0000
       
  1087 */
       
  1088 LOCAL_C void TestDuplicateViewWithFilterListL(CLogClient& aClient)
       
  1089 	{
       
  1090 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0934 "));
       
  1091 	CLogEvent* event = CLogEvent::NewL();
       
  1092 	CleanupStack::PushL(event);
       
  1093 
       
  1094 	CTestActive* active = new(ELeave)CTestActive();
       
  1095 	CleanupStack::PushL(active);
       
  1096 
       
  1097 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1098 	CleanupStack::PushL(view);
       
  1099 
       
  1100 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  1101 	CleanupStack::PushL(duplicate);
       
  1102 
       
  1103 	// Make sure there are no entries in any recent lists
       
  1104 	active->StartL();
       
  1105 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  1106 	CActiveScheduler::Start();
       
  1107 	TEST2(active->iStatus.Int(), KErrNone);
       
  1108 
       
  1109 	// Incoming
       
  1110 	TLogString buf;
       
  1111 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  1112 
       
  1113 	event->SetEventType(KLogCallEventTypeUid);
       
  1114 	event->SetDirection(buf);
       
  1115 	event->SetContact(KTestContact1);
       
  1116 
       
  1117 	event->SetDurationType(KLogDurationNone);
       
  1118 	event->SetStatus(KNullDesC);
       
  1119 
       
  1120 	// Add event
       
  1121 	active->StartL();
       
  1122 	aClient.AddEvent(*event, active->iStatus);
       
  1123 	CActiveScheduler::Start();
       
  1124 	TEST2(active->iStatus.Int(), KErrNone);
       
  1125 
       
  1126 	event->SetDurationType(KLogDurationValid);
       
  1127 
       
  1128 	active->StartL();
       
  1129 	aClient.AddEvent(*event, active->iStatus);
       
  1130 	CActiveScheduler::Start();
       
  1131 	TEST2(active->iStatus.Int(), KErrNone);
       
  1132 
       
  1133 	event->SetDurationType(KLogDurationData);
       
  1134 
       
  1135 	active->StartL();
       
  1136 	aClient.AddEvent(*event, active->iStatus);
       
  1137 	CActiveScheduler::Start();
       
  1138 	TEST2(active->iStatus.Int(), KErrNone);
       
  1139 
       
  1140 	// Final event will be most recent
       
  1141 	event->SetDurationType(KLogDurationNone);
       
  1142 	event->SetStatus(KNullDesC);
       
  1143 
       
  1144 	// Add event
       
  1145 	active->StartL();
       
  1146 	aClient.AddEvent(*event, active->iStatus);
       
  1147 	CActiveScheduler::Start();
       
  1148 	TEST2(active->iStatus.Int(), KErrNone);
       
  1149 
       
  1150 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
  1151 	CleanupStack::PushL(list);
       
  1152 
       
  1153 	active->StartL();
       
  1154 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  1155 	CActiveScheduler::Start();
       
  1156 	TEST2(active->iStatus.Int(), KErrNone);
       
  1157 	TEST2(view->CountL(), 1);
       
  1158 
       
  1159 	active->StartL();
       
  1160 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  1161 	CActiveScheduler::Start();
       
  1162 	TEST2(active->iStatus.Int(), KErrNone);
       
  1163 	TEST2(duplicate->CountL(), 3);
       
  1164 
       
  1165 	CLogFilter* filter = CLogFilter::NewL();
       
  1166 	CleanupStack::PushL(filter);
       
  1167 	list->AppendL(filter);
       
  1168 	CleanupStack::Pop(); // filter
       
  1169 
       
  1170 	filter->SetDurationType(KLogDurationValid);
       
  1171 
       
  1172 	active->StartL();
       
  1173 	TEST(view->DuplicatesL(*duplicate, *list, active->iStatus));
       
  1174 	CActiveScheduler::Start();
       
  1175 	TEST2(active->iStatus.Int(), KErrNone);
       
  1176 	TEST2(duplicate->CountL(), 1);
       
  1177 
       
  1178 	filter = CLogFilter::NewL();
       
  1179 	CleanupStack::PushL(filter);
       
  1180 	list->AppendL(filter);
       
  1181 	CleanupStack::Pop(); // filter
       
  1182 
       
  1183 	filter->SetDurationType(KLogDurationData);
       
  1184 
       
  1185 	active->StartL();
       
  1186 	TEST(view->DuplicatesL(*duplicate, *list, active->iStatus));
       
  1187 	CActiveScheduler::Start();
       
  1188 	TEST2(active->iStatus.Int(), KErrNone);
       
  1189 	TEST2(duplicate->CountL(), 2);
       
  1190 
       
  1191 	list->ResetAndDestroy();
       
  1192 	CleanupStack::PopAndDestroy(5); // list, duplicate, view, active, event
       
  1193 	}
       
  1194 
       
  1195 /**
       
  1196 @SYMTestCaseID          SYSLIB-LOGENG-CT-0935
       
  1197 @SYMTestCaseDesc	    Tests for null field set on filter in the event view 
       
  1198                         Tests for CLogFilter::SetNullFields() function
       
  1199 @SYMTestPriority 	    High
       
  1200 @SYMTestActions  	    Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
       
  1201 @SYMTestExpectedResults Test must not fail
       
  1202 @SYMREQ                 REQ0000
       
  1203 */
       
  1204 LOCAL_C void TestEventViewForNullFieldsL(CLogClient& aClient)
       
  1205 	{
       
  1206 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0935 "));
       
  1207 	CTestActive* active = new(ELeave)CTestActive;
       
  1208 	CleanupStack::PushL(active);
       
  1209 
       
  1210 	CLogEvent* event = CLogEvent::NewL();
       
  1211 	CleanupStack::PushL(event);
       
  1212 	event->SetEventType(KLogCallEventTypeUid);
       
  1213 
       
  1214 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
       
  1215 	CleanupStack::PushL(view);
       
  1216 
       
  1217 	CLogFilter* filter = CLogFilter::NewL();
       
  1218 	CleanupStack::PushL(filter);
       
  1219 
       
  1220 	// Wait a second
       
  1221 	User::After(1000000);
       
  1222 
       
  1223 	TTime now;
       
  1224 	now.UniversalTime();
       
  1225 	now += (TTimeIntervalDays)+1;
       
  1226 	// Get rid of all the events in the log
       
  1227 	active->StartL();
       
  1228 	aClient.ClearLog(now, active->iStatus);
       
  1229 	CActiveScheduler::Start();
       
  1230 	TEST2(active->iStatus.Int(), KErrNone);
       
  1231 	
       
  1232 	// Make sure there are no events
       
  1233 	TEST(!view->SetFilterL(*filter, active->iStatus));
       
  1234 
       
  1235 	active->StartL();
       
  1236 	aClient.AddEvent(*event, active->iStatus);
       
  1237 	CActiveScheduler::Start();
       
  1238 	TEST2(active->iStatus.Int(), KErrNone);
       
  1239 
       
  1240 	event->SetContact(KTestContact1);
       
  1241 
       
  1242 	active->StartL();
       
  1243 	aClient.AddEvent(*event, active->iStatus);
       
  1244 	CActiveScheduler::Start();
       
  1245 	TEST2(active->iStatus.Int(), KErrNone);
       
  1246 
       
  1247 	event->SetDirection(KTestDirection1);
       
  1248 
       
  1249 	active->StartL();
       
  1250 	aClient.AddEvent(*event, active->iStatus);
       
  1251 	CActiveScheduler::Start();
       
  1252 	TEST2(active->iStatus.Int(), KErrNone);
       
  1253 
       
  1254 	event->SetNumber(KTestNumber1);
       
  1255 
       
  1256 	active->StartL();
       
  1257 	aClient.AddEvent(*event, active->iStatus);
       
  1258 	CActiveScheduler::Start();
       
  1259 	TEST2(active->iStatus.Int(), KErrNone);
       
  1260 
       
  1261 	event->SetRemoteParty(KTestRemote1);
       
  1262 
       
  1263 	active->StartL();
       
  1264 	aClient.AddEvent(*event, active->iStatus);
       
  1265 	CActiveScheduler::Start();
       
  1266 	TEST2(active->iStatus.Int(), KErrNone);
       
  1267 
       
  1268 	event->SetStatus(KTestStatus1);
       
  1269 
       
  1270 	active->StartL();
       
  1271 	aClient.AddEvent(*event, active->iStatus);
       
  1272 	CActiveScheduler::Start();
       
  1273 	TEST2(active->iStatus.Int(), KErrNone);
       
  1274 
       
  1275 	event->SetSubject(KTestSubject);
       
  1276 
       
  1277 	active->StartL();
       
  1278 	aClient.AddEvent(*event, active->iStatus);
       
  1279 	CActiveScheduler::Start();
       
  1280 	TEST2(active->iStatus.Int(), KErrNone);
       
  1281 
       
  1282 	event->SetLink(KTestLink);
       
  1283 
       
  1284 	active->StartL();
       
  1285 	aClient.AddEvent(*event, active->iStatus);
       
  1286 	CActiveScheduler::Start();
       
  1287 	TEST2(active->iStatus.Int(), KErrNone);
       
  1288 
       
  1289 	event->SetDataL(KTestData);
       
  1290 
       
  1291 	active->StartL();
       
  1292 	aClient.AddEvent(*event, active->iStatus);
       
  1293 	CActiveScheduler::Start();
       
  1294 	TEST2(active->iStatus.Int(), KErrNone);
       
  1295 
       
  1296 	// Test for NULL fields
       
  1297 
       
  1298 	active->StartL();
       
  1299 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1300 	CActiveScheduler::Start();
       
  1301 	TEST2(active->iStatus.Int(), KErrNone);
       
  1302 	TEST2(view->CountL(), 9);
       
  1303 
       
  1304 	filter->SetNullFields(ELogContactField);
       
  1305 
       
  1306 	active->StartL();
       
  1307 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1308 	CActiveScheduler::Start();
       
  1309 	TEST2(active->iStatus.Int(), KErrNone);
       
  1310 	TEST2(view->CountL(), 1);
       
  1311 
       
  1312 	filter->SetNullFields(ELogContactField | ELogDirectionField);
       
  1313 
       
  1314 	active->StartL();
       
  1315 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1316 	CActiveScheduler::Start();
       
  1317 	TEST2(active->iStatus.Int(), KErrNone);
       
  1318 	TEST2(view->CountL(), 1);
       
  1319 
       
  1320 	filter->SetNullFields(ELogContactField | ELogDirectionField);
       
  1321 
       
  1322 	active->StartL();
       
  1323 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1324 	CActiveScheduler::Start();
       
  1325 	TEST2(active->iStatus.Int(), KErrNone);
       
  1326 	TEST2(view->CountL(), 1);
       
  1327 
       
  1328 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField);
       
  1329 
       
  1330 	active->StartL();
       
  1331 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1332 	CActiveScheduler::Start();
       
  1333 	TEST2(active->iStatus.Int(), KErrNone);
       
  1334 	TEST2(view->CountL(), 1);
       
  1335 
       
  1336 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField);
       
  1337 
       
  1338 	active->StartL();
       
  1339 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1340 	CActiveScheduler::Start();
       
  1341 	TEST2(active->iStatus.Int(), KErrNone);
       
  1342 	TEST2(view->CountL(), 1);
       
  1343 
       
  1344 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField);
       
  1345 
       
  1346 	active->StartL();
       
  1347 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1348 	CActiveScheduler::Start();
       
  1349 	TEST2(active->iStatus.Int(), KErrNone);
       
  1350 	TEST2(view->CountL(), 1);
       
  1351 
       
  1352 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField);
       
  1353 
       
  1354 	active->StartL();
       
  1355 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1356 	CActiveScheduler::Start();
       
  1357 	TEST2(active->iStatus.Int(), KErrNone);
       
  1358 	TEST2(view->CountL(), 1);
       
  1359 
       
  1360 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField | ELogLinkField);
       
  1361 
       
  1362 	active->StartL();
       
  1363 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1364 	CActiveScheduler::Start();
       
  1365 	TEST2(active->iStatus.Int(), KErrNone);
       
  1366 	TEST2(view->CountL(), 1);
       
  1367 
       
  1368 	filter->SetNullFields(ELogContactField | ELogDirectionField | ELogNumberField | ELogRemotePartyField | ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
       
  1369 
       
  1370 	active->StartL();
       
  1371 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  1372 	CActiveScheduler::Start();
       
  1373 	TEST2(active->iStatus.Int(), KErrNone);
       
  1374 	TEST2(view->CountL(), 1);
       
  1375 
       
  1376 	CleanupStack::PopAndDestroy(4); // filter, view, event, active
       
  1377 	}
       
  1378 
       
  1379 /**
       
  1380 @SYMTestCaseID          SYSLIB-LOGENG-CT-0936
       
  1381 @SYMTestCaseDesc	    Tests for null field set on filter for the recent event view list 
       
  1382 @SYMTestPriority 	    High
       
  1383 @SYMTestActions  	    Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
       
  1384 @SYMTestExpectedResults Test must not fail
       
  1385 @SYMREQ                 REQ0000
       
  1386 */
       
  1387 LOCAL_C void TestRecentViewForNullFieldsL(CLogClient& aClient)
       
  1388 	{
       
  1389 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0936 "));
       
  1390 	CLogEvent* event = CLogEvent::NewL();
       
  1391 	CleanupStack::PushL(event);
       
  1392 
       
  1393 	CTestActive* active = new(ELeave)CTestActive();
       
  1394 	CleanupStack::PushL(active);
       
  1395 
       
  1396 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1397 	CleanupStack::PushL(view);
       
  1398 
       
  1399 	// Incoming
       
  1400 	TLogString buf;
       
  1401 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  1402 
       
  1403 	event->SetEventType(KLogCallEventTypeUid);
       
  1404 	event->SetDirection(buf);
       
  1405 	event->SetNumber(_L("1"));
       
  1406 
       
  1407 	// Add event
       
  1408 	active->StartL();
       
  1409 	aClient.AddEvent(*event, active->iStatus);
       
  1410 	CActiveScheduler::Start();
       
  1411 	TEST2(active->iStatus.Int(), KErrNone);
       
  1412 
       
  1413 	event->SetStatus(KTestStatus1);
       
  1414 	event->SetNumber(_L("2"));
       
  1415 
       
  1416 	// Add event
       
  1417 	active->StartL();
       
  1418 	aClient.AddEvent(*event, active->iStatus);
       
  1419 	CActiveScheduler::Start();
       
  1420 	TEST2(active->iStatus.Int(), KErrNone);
       
  1421 
       
  1422 	event->SetSubject(KTestSubject);
       
  1423 	event->SetNumber(_L("3"));
       
  1424 
       
  1425 	active->StartL();
       
  1426 	aClient.AddEvent(*event, active->iStatus);
       
  1427 	CActiveScheduler::Start();
       
  1428 	TEST2(active->iStatus.Int(), KErrNone);
       
  1429 
       
  1430 	event->SetLink(KTestLink);
       
  1431 	event->SetNumber(_L("4"));
       
  1432 
       
  1433 	active->StartL();
       
  1434 	aClient.AddEvent(*event, active->iStatus);
       
  1435 	CActiveScheduler::Start();
       
  1436 	TEST2(active->iStatus.Int(), KErrNone);
       
  1437 
       
  1438 	event->SetDataL(KTestData);
       
  1439 	event->SetNumber(_L("5"));
       
  1440 
       
  1441 	active->StartL();
       
  1442 	aClient.AddEvent(*event, active->iStatus);
       
  1443 	CActiveScheduler::Start();
       
  1444 	TEST2(active->iStatus.Int(), KErrNone);
       
  1445 
       
  1446 	active->StartL();
       
  1447 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  1448 	CActiveScheduler::Start();
       
  1449 	TEST2(view->CountL(), 5);
       
  1450 
       
  1451 	CLogFilter* filter = CLogFilter::NewL();
       
  1452 	CleanupStack::PushL(filter);
       
  1453 	
       
  1454 	// Test for NULL fields
       
  1455 
       
  1456 	filter->SetNullFields(ELogStatusField);
       
  1457 
       
  1458 	active->StartL();
       
  1459 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1460 	CActiveScheduler::Start();
       
  1461 	TEST2(view->CountL(), 1);
       
  1462 
       
  1463 	filter->SetNullFields(ELogStatusField | ELogSubjectField);
       
  1464 
       
  1465 	active->StartL();
       
  1466 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1467 	CActiveScheduler::Start();
       
  1468 	TEST2(view->CountL(), 1);
       
  1469 
       
  1470 	filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField);
       
  1471 
       
  1472 	active->StartL();
       
  1473 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1474 	CActiveScheduler::Start();
       
  1475 	TEST2(view->CountL(), 1);
       
  1476 
       
  1477 	filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
       
  1478 
       
  1479 	active->StartL();
       
  1480 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1481 	CActiveScheduler::Start();
       
  1482 	TEST2(view->CountL(), 1);
       
  1483 
       
  1484 	CleanupStack::PopAndDestroy(4); // filter, view, active, event
       
  1485 	}
       
  1486 
       
  1487 /**
       
  1488 @SYMTestCaseID          SYSLIB-LOGENG-CT-0937
       
  1489 @SYMTestCaseDesc	    Tests for null field set on filter for the duplicate event view list 
       
  1490 @SYMTestPriority 	    High
       
  1491 @SYMTestActions  	    Clear the log events and add new events with fields set in.Define null fields in the filter and check the view
       
  1492 @SYMTestExpectedResults Test must not fail
       
  1493 @SYMREQ                 REQ0000
       
  1494 */
       
  1495 LOCAL_C void TestDuplicateViewForNullFieldsL(CLogClient& aClient)
       
  1496 	{
       
  1497 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0937 "));
       
  1498 	CLogEvent* event = CLogEvent::NewL();
       
  1499 	CleanupStack::PushL(event);
       
  1500 
       
  1501 	CTestActive* active = new(ELeave)CTestActive();
       
  1502 	CleanupStack::PushL(active);
       
  1503 
       
  1504 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1505 	CleanupStack::PushL(view);
       
  1506 
       
  1507 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  1508 	CleanupStack::PushL(duplicate);
       
  1509 
       
  1510 	// Make sure there are no entries in any recent lists
       
  1511 	active->StartL();
       
  1512 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  1513 	CActiveScheduler::Start();
       
  1514 	TEST2(active->iStatus.Int(), KErrNone);
       
  1515 
       
  1516 	// Incoming
       
  1517 	TLogString buf;
       
  1518 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  1519 
       
  1520 	event->SetEventType(KLogCallEventTypeUid);
       
  1521 	event->SetDirection(buf);
       
  1522 	event->SetContact(KTestContact1);
       
  1523 
       
  1524 	// Add event
       
  1525 	active->StartL();
       
  1526 	aClient.AddEvent(*event, active->iStatus);
       
  1527 	CActiveScheduler::Start();
       
  1528 	TEST2(active->iStatus.Int(), KErrNone);
       
  1529 
       
  1530 	event->SetStatus(KTestStatus1);
       
  1531 
       
  1532 	// Add event
       
  1533 	active->StartL();
       
  1534 	aClient.AddEvent(*event, active->iStatus);
       
  1535 	CActiveScheduler::Start();
       
  1536 	TEST2(active->iStatus.Int(), KErrNone);
       
  1537 
       
  1538 	event->SetSubject(KTestSubject);
       
  1539 
       
  1540 	// Add event
       
  1541 	active->StartL();
       
  1542 	aClient.AddEvent(*event, active->iStatus);
       
  1543 	CActiveScheduler::Start();
       
  1544 	TEST2(active->iStatus.Int(), KErrNone);
       
  1545 
       
  1546 	event->SetLink(KTestLink);
       
  1547 
       
  1548 	// Add event
       
  1549 	active->StartL();
       
  1550 	aClient.AddEvent(*event, active->iStatus);
       
  1551 	CActiveScheduler::Start();
       
  1552 	TEST2(active->iStatus.Int(), KErrNone);
       
  1553 
       
  1554 	event->SetDataL(KTestData);
       
  1555 
       
  1556 	// Add event
       
  1557 	active->StartL();
       
  1558 	aClient.AddEvent(*event, active->iStatus);
       
  1559 	CActiveScheduler::Start();
       
  1560 	TEST2(active->iStatus.Int(), KErrNone);
       
  1561 
       
  1562 	event->SetDurationType(KLogDurationNone);
       
  1563 	event->SetStatus(KNullDesC);
       
  1564 
       
  1565 	// Add event - This will be the entry in recent list
       
  1566 	active->StartL();
       
  1567 	aClient.AddEvent(*event, active->iStatus);
       
  1568 	CActiveScheduler::Start();
       
  1569 	TEST2(active->iStatus.Int(), KErrNone);
       
  1570 
       
  1571 	// Should only be one event in recent list - the rest are duplicates
       
  1572 	active->StartL();
       
  1573 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  1574 	CActiveScheduler::Start();
       
  1575 	TEST2(active->iStatus.Int(), KErrNone);
       
  1576 	TEST2(view->CountL(), 1);
       
  1577 
       
  1578 	// Check duplicate count
       
  1579 	active->StartL();
       
  1580 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  1581 	CActiveScheduler::Start();
       
  1582 	TEST2(active->iStatus.Int(), KErrNone);
       
  1583 	TEST2(duplicate->CountL(), 5);
       
  1584 
       
  1585 	CLogFilter* filter = CLogFilter::NewL();
       
  1586 	CleanupStack::PushL(filter);
       
  1587 
       
  1588 	filter->SetNullFields(ELogStatusField);
       
  1589 
       
  1590 	active->StartL();
       
  1591 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1592 	CActiveScheduler::Start();
       
  1593 	TEST2(active->iStatus.Int(), KErrNone);
       
  1594 	TEST2(duplicate->CountL(), 1);
       
  1595 
       
  1596 	filter->SetNullFields(ELogStatusField | ELogSubjectField);
       
  1597 
       
  1598 	active->StartL();
       
  1599 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1600 	CActiveScheduler::Start();
       
  1601 	TEST2(active->iStatus.Int(), KErrNone);
       
  1602 	TEST2(duplicate->CountL(), 1);
       
  1603 
       
  1604 	filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField);
       
  1605 
       
  1606 	active->StartL();
       
  1607 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1608 	CActiveScheduler::Start();
       
  1609 	TEST2(active->iStatus.Int(), KErrNone);
       
  1610 	TEST2(duplicate->CountL(), 1);
       
  1611 
       
  1612 	filter->SetNullFields(ELogStatusField | ELogSubjectField | ELogLinkField | ELogDataField);
       
  1613 
       
  1614 	active->StartL();
       
  1615 	TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1616 	CActiveScheduler::Start();
       
  1617 	TEST2(active->iStatus.Int(), KErrNone);
       
  1618 	TEST2(duplicate->CountL(), 1);
       
  1619 
       
  1620 	CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
       
  1621 	}
       
  1622 
       
  1623 /**
       
  1624 @SYMTestCaseID          SYSLIB-LOGENG-CT-0938
       
  1625 @SYMTestCaseDesc	    Querying event view for flags test
       
  1626 @SYMTestPriority 	    High
       
  1627 @SYMTestActions  	    Clear the log events and add new events with fields set in.Define null fields and set flags in the filter and check the view
       
  1628 @SYMTestExpectedResults Test must not fail
       
  1629 @SYMREQ                 REQ0000
       
  1630 */
       
  1631 LOCAL_C void TestEventViewForFlagsL(CLogClient& aClient)
       
  1632 	{
       
  1633 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0938 "));
       
  1634 	CLogEvent* event = CLogEvent::NewL();
       
  1635 	CleanupStack::PushL(event);
       
  1636 
       
  1637 	CTestActive* active = new(ELeave)CTestActive();
       
  1638 	CleanupStack::PushL(active);
       
  1639 
       
  1640 	CLogViewEvent* view = CLogViewEvent::NewL(aClient);
       
  1641 	CleanupStack::PushL(view);
       
  1642 
       
  1643 	CLogFilter* filter = CLogFilter::NewL();
       
  1644 	CleanupStack::PushL(filter);
       
  1645 
       
  1646 	// Wait a second
       
  1647 	User::After(1000000);
       
  1648 
       
  1649 	TTime now;
       
  1650 	now.UniversalTime();
       
  1651 	now += (TTimeIntervalDays)+1;
       
  1652 	
       
  1653 	// Get rid of all the events in the log
       
  1654 	active->StartL();
       
  1655 	aClient.ClearLog(now, active->iStatus);
       
  1656 	CActiveScheduler::Start();
       
  1657 	TEST2(active->iStatus.Int(), KErrNone);
       
  1658 	
       
  1659 	// Make sure there are now events
       
  1660 	TEST(!view->SetFilterL(*filter, active->iStatus));
       
  1661 
       
  1662 	// Add some events
       
  1663 	event->SetEventType(KLogCallEventTypeUid);
       
  1664 	TLogFlags flags = KLogFlagsMask + 1;
       
  1665 	TLogFlags flags2;
       
  1666 
       
  1667 	while(flags--)
       
  1668 		{
       
  1669 		event->ClearFlags(0xF);
       
  1670 		event->SetFlags(flags);
       
  1671 
       
  1672 		// Add event
       
  1673 		active->StartL();
       
  1674 		aClient.AddEvent(*event, active->iStatus);
       
  1675 		CActiveScheduler::Start();
       
  1676 		TEST2(active->iStatus.Int(), KErrNone);
       
  1677 		}
       
  1678 
       
  1679 	flags = KLogFlagsMask + 1;
       
  1680 	while(flags--)
       
  1681 		{
       
  1682 		filter->ClearFlags(0xF);
       
  1683 		// we use this because, since the events were all created without contact ids
       
  1684 		// the log engine looked each one up in the contacts DB and set the flag so we
       
  1685 		// need to set it in the flags being looked for
       
  1686 		flags2 = static_cast<TLogFlags>(flags | KLogEventContactSearched);
       
  1687 		filter->SetFlags(flags2);
       
  1688 		active->StartL();
       
  1689 		TEST(view->SetFilterL(*filter, active->iStatus));
       
  1690 		CActiveScheduler::Start();
       
  1691 		TEST2(active->iStatus.Int(), KErrNone);
       
  1692 		TEST((view->Event().Flags() & flags2) == flags2);
       
  1693 
       
  1694 		while(view->NextL(active->iStatus))
       
  1695 			{
       
  1696 			active->StartL();
       
  1697 			CActiveScheduler::Start();
       
  1698 			TEST2(active->iStatus.Int(), KErrNone);
       
  1699 			TEST((view->Event().Flags() & flags2) == flags2);
       
  1700 			}
       
  1701 		}
       
  1702 	
       
  1703 	// Now TEST we can query for the inverse
       
  1704 	filter->SetNullFields(ELogFlagsField);
       
  1705 
       
  1706 	flags = KLogFlagsMask + 1;
       
  1707 	while(flags--)
       
  1708 		{
       
  1709 		filter->ClearFlags(0xF);
       
  1710 		// we use this because, since the events were all created without contact ids
       
  1711 		// the log engine looked each one up in the contacts DB and set the flag so we
       
  1712 		// need to unset it in the flags being excluded
       
  1713 		flags2 = static_cast<TLogFlags>(flags & ~KLogEventContactSearched);
       
  1714 		filter->SetFlags(flags2);
       
  1715 
       
  1716 		active->StartL();
       
  1717 		TEST(view->SetFilterL(*filter, active->iStatus));
       
  1718 		CActiveScheduler::Start();
       
  1719 		TEST2(active->iStatus.Int(), KErrNone);
       
  1720 		TEST((~view->Event().Flags() & flags2) == flags2);
       
  1721 
       
  1722 		while(view->NextL(active->iStatus))
       
  1723 			{
       
  1724 			active->StartL();
       
  1725 			CActiveScheduler::Start();
       
  1726 			TEST2(active->iStatus.Int(), KErrNone);
       
  1727 			TEST((~view->Event().Flags() & flags2) == flags2);
       
  1728 			}
       
  1729 		}
       
  1730 
       
  1731 	CleanupStack::PopAndDestroy(4); // filter, view, active, event
       
  1732 	}
       
  1733 
       
  1734 /**
       
  1735 @SYMTestCaseID          SYSLIB-LOGENG-CT-0939
       
  1736 @SYMTestCaseDesc	    Querying recent event view for flags test
       
  1737 @SYMTestPriority 	    High
       
  1738 @SYMTestActions  	    Change the log configuration.Clear the log for any recent list and add some events.Query for flags in the recent view list
       
  1739 @SYMTestExpectedResults Test must not fail
       
  1740 @SYMREQ                 REQ0000
       
  1741 */
       
  1742 LOCAL_C void TestRecentViewForFlagsL(CLogClient& aClient)
       
  1743 	{
       
  1744 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0939 "));
       
  1745 	CLogEvent* event = CLogEvent::NewL();
       
  1746 	CleanupStack::PushL(event);
       
  1747 
       
  1748 	CTestActive* active = new(ELeave)CTestActive();
       
  1749 	CleanupStack::PushL(active);
       
  1750 
       
  1751 	TLogConfig config;
       
  1752 
       
  1753 	// Change the log engine config
       
  1754 	active->StartL();
       
  1755 	aClient.GetConfig(config, active->iStatus);
       
  1756 	CActiveScheduler::Start();
       
  1757 	TEST2(active->iStatus.Int(), KErrNone);
       
  1758 
       
  1759 	config.iMaxRecentLogSize = KLogFlagsMask + 1;
       
  1760 
       
  1761 	// Change the log engine config
       
  1762 	active->StartL();
       
  1763 	aClient.ChangeConfig(config, active->iStatus);
       
  1764 	CActiveScheduler::Start();
       
  1765 	TEST2(active->iStatus.Int(), KErrNone);
       
  1766 
       
  1767 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1768 	CleanupStack::PushL(view);
       
  1769 
       
  1770 	CLogFilter* filter = CLogFilter::NewL();
       
  1771 	CleanupStack::PushL(filter);
       
  1772 
       
  1773 	// Make sure there are no entries in any recent lists
       
  1774 	active->StartL();
       
  1775 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  1776 	CActiveScheduler::Start();
       
  1777 	TEST2(active->iStatus.Int(), KErrNone);
       
  1778 
       
  1779 	// Make sure there are no events
       
  1780 	TEST(!view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  1781 
       
  1782 	// Incoming
       
  1783 	TLogString buf;
       
  1784 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  1785 
       
  1786 	// Add some events
       
  1787 	event->SetEventType(KLogCallEventTypeUid);
       
  1788 	event->SetDirection(buf);
       
  1789 
       
  1790 	TLogFlags flags = KLogFlagsMask + 1;
       
  1791 	while(flags--)
       
  1792 		{
       
  1793 		event->ClearFlags(0xF);
       
  1794 		event->SetFlags(flags);
       
  1795 		event->SetContact(flags);
       
  1796 
       
  1797 		// Add event
       
  1798 		active->StartL();
       
  1799 		aClient.AddEvent(*event, active->iStatus);
       
  1800 		CActiveScheduler::Start();
       
  1801 		TEST2(active->iStatus.Int(), KErrNone);
       
  1802 		}
       
  1803 
       
  1804 	flags = KLogFlagsMask + 1;
       
  1805 	while(flags--)
       
  1806 		{
       
  1807 		filter->ClearFlags(0xF);
       
  1808 		filter->SetFlags(flags);
       
  1809 
       
  1810 		active->StartL();
       
  1811 		TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1812 		CActiveScheduler::Start();
       
  1813 		TEST2(active->iStatus.Int(), KErrNone);
       
  1814 		TEST((view->Event().Flags() & flags) == flags);
       
  1815 
       
  1816 		while(view->NextL(active->iStatus))
       
  1817 			{
       
  1818 			active->StartL();
       
  1819 			CActiveScheduler::Start();
       
  1820 			TEST2(active->iStatus.Int(), KErrNone);
       
  1821 			TEST((view->Event().Flags() & flags) == flags);
       
  1822 			}
       
  1823 		}
       
  1824 	
       
  1825 	// Now TEST we can query for the inverse
       
  1826 	filter->SetNullFields(ELogFlagsField);
       
  1827 
       
  1828 	flags = KLogFlagsMask + 1;
       
  1829 	while(flags--)
       
  1830 		{
       
  1831 		filter->ClearFlags(0xF);
       
  1832 		filter->SetFlags(flags);
       
  1833 
       
  1834 		active->StartL();
       
  1835 		TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1836 		CActiveScheduler::Start();
       
  1837 		TEST2(active->iStatus.Int(), KErrNone);
       
  1838 		TEST((~view->Event().Flags() & flags) == flags);
       
  1839 
       
  1840 		while(view->NextL(active->iStatus))
       
  1841 			{
       
  1842 			active->StartL();
       
  1843 			CActiveScheduler::Start();
       
  1844 			TEST2(active->iStatus.Int(), KErrNone);
       
  1845 			TEST((~view->Event().Flags() & flags) == flags);
       
  1846 			}
       
  1847 		}
       
  1848 
       
  1849 	CleanupStack::PopAndDestroy(4); // filter, view, active, event
       
  1850 	}
       
  1851 
       
  1852 /**
       
  1853 @SYMTestCaseID          SYSLIB-LOGENG-CT-0940
       
  1854 @SYMTestCaseDesc	    Querying duplicate event view for flags test
       
  1855 @SYMTestPriority 	    High
       
  1856 @SYMTestActions  	    Change the log configuration.Clear the log for any recent list and add some events.Query for flags in the duplicate view list
       
  1857 @SYMTestExpectedResults Test must not fail
       
  1858 @SYMREQ                 REQ0000
       
  1859 */
       
  1860 LOCAL_C void TestDuplicateViewForFlagsL(CLogClient& aClient)
       
  1861 	{
       
  1862 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0940 "));
       
  1863 	CLogEvent* event = CLogEvent::NewL();
       
  1864 	CleanupStack::PushL(event);
       
  1865 
       
  1866 	CTestActive* active = new(ELeave)CTestActive();
       
  1867 	CleanupStack::PushL(active);
       
  1868 
       
  1869 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1870 	CleanupStack::PushL(view);
       
  1871 
       
  1872 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  1873 	CleanupStack::PushL(duplicate);
       
  1874 
       
  1875 	CLogFilter* filter = CLogFilter::NewL();
       
  1876 	CleanupStack::PushL(filter);
       
  1877 
       
  1878 	// Make sure there are no entries in any recent lists
       
  1879 	active->StartL();
       
  1880 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  1881 	CActiveScheduler::Start();
       
  1882 	TEST2(active->iStatus.Int(), KErrNone);
       
  1883 
       
  1884 	// Make sure there are now events
       
  1885 	TEST(!view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  1886 
       
  1887 	// Incoming
       
  1888 	TLogString buf;
       
  1889 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  1890 
       
  1891 	// Add some events
       
  1892 	event->SetEventType(KLogCallEventTypeUid);
       
  1893 	event->SetDirection(buf);
       
  1894 	event->SetDurationType(KLogDurationNone);
       
  1895 	event->SetContact(KTestContact1);
       
  1896 	event->SetStatus(KTestStatus1);
       
  1897 
       
  1898 	TLogFlags flags = KLogFlagsMask + 1;
       
  1899 	while(flags--)
       
  1900 		{
       
  1901 		event->ClearFlags(0xF);
       
  1902 		event->SetFlags(flags);
       
  1903 
       
  1904 		// Add event
       
  1905 		active->StartL();
       
  1906 		aClient.AddEvent(*event, active->iStatus);
       
  1907 		CActiveScheduler::Start();
       
  1908 		TEST2(active->iStatus.Int(), KErrNone);
       
  1909 		}
       
  1910 
       
  1911 	// Add an extra event which will be the most recent
       
  1912 	active->StartL();
       
  1913 	aClient.AddEvent(*event, active->iStatus);
       
  1914 	CActiveScheduler::Start();
       
  1915 	TEST2(active->iStatus.Int(), KErrNone);
       
  1916 
       
  1917 	active->StartL();
       
  1918 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, *filter, active->iStatus));
       
  1919 	CActiveScheduler::Start();
       
  1920 	TEST2(active->iStatus.Int(), KErrNone);
       
  1921 	TEST2(view->CountL(), 1);
       
  1922 
       
  1923 	flags = KLogFlagsMask + 1;
       
  1924 	while(flags--)
       
  1925 		{
       
  1926 		filter->ClearFlags(0xF);
       
  1927 		filter->SetFlags(flags);
       
  1928 
       
  1929 		active->StartL();
       
  1930 		TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1931 		CActiveScheduler::Start();
       
  1932 		TEST2(active->iStatus.Int(), KErrNone);
       
  1933 		TEST((duplicate->Event().Flags() & flags) == flags);
       
  1934 
       
  1935 		while(duplicate->NextL(active->iStatus))
       
  1936 			{
       
  1937 			active->StartL();
       
  1938 			CActiveScheduler::Start();
       
  1939 			TEST2(active->iStatus.Int(), KErrNone);
       
  1940 			TEST((duplicate->Event().Flags() & flags) == flags);
       
  1941 			}
       
  1942 		}
       
  1943 	
       
  1944 	// Now TEST we can query for the inverse
       
  1945 	filter->SetNullFields(ELogFlagsField);
       
  1946 
       
  1947 	flags = KLogFlagsMask + 1;
       
  1948 	while(flags--)
       
  1949 		{
       
  1950 		filter->ClearFlags(0xF);
       
  1951 		filter->SetFlags(flags);
       
  1952 
       
  1953 		active->StartL();
       
  1954 		TEST(view->DuplicatesL(*duplicate, *filter, active->iStatus));
       
  1955 		CActiveScheduler::Start();
       
  1956 		TEST2(active->iStatus.Int(), KErrNone);
       
  1957 		TEST((~duplicate->Event().Flags() & flags) == flags);
       
  1958 
       
  1959 		while(duplicate->NextL(active->iStatus))
       
  1960 			{
       
  1961 			active->StartL();
       
  1962 			CActiveScheduler::Start();
       
  1963 			TEST2(active->iStatus.Int(), KErrNone);
       
  1964 			TEST((~duplicate->Event().Flags() & flags) == flags);
       
  1965 			}
       
  1966 		}
       
  1967 
       
  1968 	CleanupStack::PopAndDestroy(5); // filter, duplicate, view, active, event
       
  1969 	}
       
  1970 
       
  1971 /**
       
  1972 @SYMTestCaseID          SYSLIB-LOGENG-CT-0941
       
  1973 @SYMTestCaseDesc	    Tests for removing recent events.Tests for CLogClient::ClearLog() function 
       
  1974 @SYMTestPriority 	    High
       
  1975 @SYMTestActions  	    Clear log for any recent entries.Add events and create the view.Test for removing the recent events from the view
       
  1976 @SYMTestExpectedResults Test must not fail
       
  1977 @SYMREQ                 REQ0000
       
  1978 */
       
  1979 LOCAL_C void TestRemovingRecentEventsL(CLogClient& aClient)
       
  1980 	{
       
  1981 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0941 "));
       
  1982 	CLogEvent* event = CLogEvent::NewL();
       
  1983 	CleanupStack::PushL(event);
       
  1984 
       
  1985 	CTestActive* active = new(ELeave)CTestActive();
       
  1986 	CleanupStack::PushL(active);
       
  1987 
       
  1988 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  1989 	CleanupStack::PushL(view);
       
  1990 
       
  1991 	// Make sure there are no entries in any recent lists
       
  1992 	active->StartL();
       
  1993 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  1994 	CActiveScheduler::Start();
       
  1995 	TEST2(active->iStatus.Int(), KErrNone);
       
  1996 
       
  1997 	// Make sure there are no events
       
  1998 	TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
       
  1999 
       
  2000 	// Incoming
       
  2001 	TLogString buf;
       
  2002 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  2003 
       
  2004 	// Add some events
       
  2005 	event->SetEventType(KLogCallEventTypeUid);
       
  2006 	event->SetDirection(buf);
       
  2007 
       
  2008 	TInt count = 10;
       
  2009 	while(count--)
       
  2010 		{
       
  2011 		// Add event
       
  2012 		active->StartL();
       
  2013 		aClient.AddEvent(*event, active->iStatus);
       
  2014 		CActiveScheduler::Start();
       
  2015 		TEST2(active->iStatus.Int(), KErrNone);
       
  2016 		}
       
  2017 
       
  2018 	// Create the view
       
  2019 	active->StartL();
       
  2020 	TEST(view->SetRecentListL(KLogNullRecentList, active->iStatus));
       
  2021 	CActiveScheduler::Start();
       
  2022 	TEST2(active->iStatus.Int(), KErrNone);
       
  2023 
       
  2024 	TLogId id = view->Event().Id();
       
  2025 	while(view->NextL(active->iStatus))
       
  2026 		{
       
  2027 		active->StartL();
       
  2028 		CActiveScheduler::Start();
       
  2029 		TEST2(active->iStatus.Int(), KErrNone);
       
  2030 
       
  2031 		// Try removing the previous event
       
  2032 		view->RemoveL(id);
       
  2033 		id = view->Event().Id();
       
  2034 		}
       
  2035 
       
  2036 	// Try removing the current event
       
  2037 	view->RemoveL(id);
       
  2038 	TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
       
  2039 
       
  2040 	CleanupStack::PopAndDestroy(3); // view, active, event
       
  2041 	}
       
  2042 
       
  2043 /**
       
  2044 @SYMTestCaseID          SYSLIB-LOGENG-CT-0942
       
  2045 @SYMTestCaseDesc	    Removing duplicate events from the duplicate view
       
  2046                         Tests for CLogViewRecent::DuplicatesL() function
       
  2047 @SYMTestPriority 	    High
       
  2048 @SYMTestActions  	    Clear log for any recent entries.Add events and create the view and duplicate view.
       
  2049 @SYMTestExpectedResults Test must not fail
       
  2050 @SYMREQ                 REQ0000
       
  2051 */
       
  2052 LOCAL_C void TestRemovingDuplicateEventsL(CLogClient& aClient)
       
  2053 	{
       
  2054 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0942 "));
       
  2055 	CLogEvent* event = CLogEvent::NewL();
       
  2056 	CleanupStack::PushL(event);
       
  2057 
       
  2058 	CTestActive* active = new(ELeave)CTestActive();
       
  2059 	CleanupStack::PushL(active);
       
  2060 
       
  2061 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  2062 	CleanupStack::PushL(view);
       
  2063 
       
  2064 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  2065 	CleanupStack::PushL(duplicate);
       
  2066 
       
  2067 	// Make sure there are no entries in any recent lists
       
  2068 	active->StartL();
       
  2069 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  2070 	CActiveScheduler::Start();
       
  2071 	TEST2(active->iStatus.Int(), KErrNone);
       
  2072 
       
  2073 	// Make sure there are no events
       
  2074 	TEST(!view->SetRecentListL(KLogNullRecentList, active->iStatus));
       
  2075 
       
  2076 	// Incoming
       
  2077 	TLogString buf;
       
  2078 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  2079 
       
  2080 	// Add some events
       
  2081 	event->SetEventType(KLogCallEventTypeUid);
       
  2082 	event->SetDirection(buf);
       
  2083 	event->SetDurationType(KLogDurationNone);
       
  2084 	event->SetContact(KTestContact1);
       
  2085 	event->SetStatus(KTestStatus1);
       
  2086 
       
  2087 	TInt count = 10;
       
  2088 	while(count--)
       
  2089 		{
       
  2090 		// Add event
       
  2091 		active->StartL();
       
  2092 		aClient.AddEvent(*event, active->iStatus);
       
  2093 		CActiveScheduler::Start();
       
  2094 		TEST2(active->iStatus.Int(), KErrNone);
       
  2095 		RDebug::Print(_L("EVENT ID: %d\n"), event->Id());
       
  2096 		}
       
  2097 
       
  2098 	// Create the view
       
  2099 	active->StartL();
       
  2100 	TEST(view->SetRecentListL(KLogNullRecentList, active->iStatus));
       
  2101 	CActiveScheduler::Start();
       
  2102 	TEST2(active->iStatus.Int(), KErrNone);
       
  2103 
       
  2104 	// Create the duplicate view
       
  2105 	active->StartL();
       
  2106 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  2107 	CActiveScheduler::Start();
       
  2108 	TEST2(active->iStatus.Int(), KErrNone);
       
  2109 	TEST2(view->CountL(), 1);
       
  2110 	count = duplicate->CountL();
       
  2111 	TEST2(count, 9);
       
  2112 
       
  2113 	TLogId id = duplicate->Event().Id();
       
  2114 	while(duplicate->NextL(active->iStatus))
       
  2115 		{
       
  2116 		active->StartL();
       
  2117 		CActiveScheduler::Start();
       
  2118 		TEST2(active->iStatus.Int(), KErrNone);
       
  2119 
       
  2120 		// Try removing the previous event
       
  2121 		duplicate->RemoveL(id);
       
  2122 		id = duplicate->Event().Id();
       
  2123 		}
       
  2124 
       
  2125 	// Try removing the current event
       
  2126 	duplicate->RemoveL(id);
       
  2127 	count = duplicate->CountL();
       
  2128 	TEST2(count, 0);
       
  2129 	//
       
  2130 	TEST(!view->DuplicatesL(*duplicate, active->iStatus));
       
  2131 
       
  2132 	CleanupStack::PopAndDestroy(4); // duplicate, view, active, event
       
  2133 	}
       
  2134 
       
  2135 /**
       
  2136 @SYMTestCaseID          SYSLIB-LOGENG-CT-0943
       
  2137 s@SYMTestCaseDesc	    Multiple log event views test
       
  2138 @SYMTestPriority 	    High
       
  2139 @SYMTestActions  	    Add events and set the filter with different fields.Check for log event views
       
  2140 @SYMTestExpectedResults Test must not fail
       
  2141 @SYMREQ                 REQ0000
       
  2142 */
       
  2143 LOCAL_C void TestMultipleViews1L(CLogClient& aClient)
       
  2144 	{
       
  2145 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0943 "));
       
  2146 	CTestActive* active1 = new(ELeave)CTestActive;
       
  2147 	CleanupStack::PushL(active1);
       
  2148 
       
  2149 	// Wait a second
       
  2150 	User::After(1000000);
       
  2151 
       
  2152 	TTime now;
       
  2153 	now.UniversalTime();
       
  2154 	now += (TTimeIntervalDays)+1;
       
  2155 
       
  2156 	// Get rid of all the events in the log
       
  2157 	active1->StartL();
       
  2158 	aClient.ClearLog(now, active1->iStatus);
       
  2159 	CActiveScheduler::Start();
       
  2160 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2161 
       
  2162 	CTestActive* active2 = new(ELeave)CTestActive;
       
  2163 	CleanupStack::PushL(active2);
       
  2164 
       
  2165 	CLogEvent* event = CLogEvent::NewL();
       
  2166 	CleanupStack::PushL(event);
       
  2167 
       
  2168 	event->SetEventType(KLogCallEventTypeUid);
       
  2169 	event->SetContact(KTestContact1);
       
  2170 	event->SetDirection(KTestDirection1);
       
  2171 	event->SetDurationType(KLogDurationNone);
       
  2172 	event->SetNumber(KTestNumber1);
       
  2173 	event->SetRemoteParty(KTestRemote1);
       
  2174 	event->SetStatus(KTestStatus1);
       
  2175 
       
  2176 	// Add event
       
  2177 	active1->StartL();
       
  2178 	aClient.AddEvent(*event, active1->iStatus);
       
  2179 	CActiveScheduler::Start();
       
  2180 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2181 
       
  2182 	event->SetEventType(KLogDataEventTypeUid);
       
  2183 	event->SetContact(KTestContact2);
       
  2184 	event->SetDirection(KTestDirection2);
       
  2185 	event->SetDurationType(KLogDurationValid);
       
  2186 	event->SetNumber(KTestNumber2);
       
  2187 	event->SetRemoteParty(KTestRemote2);
       
  2188 	event->SetStatus(KTestStatus2);
       
  2189 
       
  2190 	// Add event
       
  2191 	active1->StartL();
       
  2192 	aClient.AddEvent(*event, active1->iStatus);
       
  2193 	CActiveScheduler::Start();
       
  2194 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2195 
       
  2196 	event->SetEventType(KLogFaxEventTypeUid);
       
  2197 	event->SetContact(KTestContact3);
       
  2198 	event->SetDirection(KTestDirection3);
       
  2199 	event->SetDurationType(KLogDurationData);
       
  2200 	event->SetNumber(KTestNumber3);
       
  2201 	event->SetRemoteParty(KTestRemote3);
       
  2202 	event->SetStatus(KTestStatus3);
       
  2203 
       
  2204 	// Add event
       
  2205 	active1->StartL();
       
  2206 	aClient.AddEvent(*event, active1->iStatus);
       
  2207 	CActiveScheduler::Start();
       
  2208 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2209 
       
  2210 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
  2211 	CleanupStack::PushL(list);
       
  2212 
       
  2213 	CLogViewEvent* view1 = CLogViewEvent::NewL(aClient);
       
  2214 	CleanupStack::PushL(view1);
       
  2215 
       
  2216 	CLogViewEvent* view2 = CLogViewEvent::NewL(aClient);
       
  2217 	CleanupStack::PushL(view2);
       
  2218 
       
  2219 	CLogFilter* filter = CLogFilter::NewL();
       
  2220 	CleanupStack::PushL(filter);
       
  2221 	
       
  2222 	// Set filter
       
  2223 	filter->SetContact(KTestContact1);
       
  2224 
       
  2225 	list->AppendL(filter);
       
  2226 	CleanupStack::Pop(); // filter
       
  2227 
       
  2228 	// Test Views
       
  2229 	active1->StartL();
       
  2230 	active2->StartL();
       
  2231 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2232 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2233 	CActiveScheduler::Start();
       
  2234 	CActiveScheduler::Start();
       
  2235 	TEST2(view1->CountL(), 1);
       
  2236 	TEST2(view2->CountL(), 1);
       
  2237 
       
  2238 	filter = CLogFilter::NewL();
       
  2239 	CleanupStack::PushL(filter);
       
  2240 	
       
  2241 	// Set filter
       
  2242 	filter->SetContact(KTestContact2);
       
  2243 
       
  2244 	list->AppendL(filter);
       
  2245 	CleanupStack::Pop(); // filter
       
  2246 
       
  2247 	// Test View
       
  2248 	active1->StartL();
       
  2249 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2250 	CActiveScheduler::Start();
       
  2251 	TEST2(view1->CountL(), 2);
       
  2252 
       
  2253 	filter = CLogFilter::NewL();
       
  2254 	CleanupStack::PushL(filter);
       
  2255 	
       
  2256 	// Set filter
       
  2257 	filter->SetContact(KTestContact3);
       
  2258 
       
  2259 	list->AppendL(filter);
       
  2260 	CleanupStack::Pop(); // filter
       
  2261 
       
  2262 	// Test View
       
  2263 	active1->StartL();
       
  2264 	active2->StartL();
       
  2265 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2266 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2267 	CActiveScheduler::Start();
       
  2268 	CActiveScheduler::Start();
       
  2269 	TEST2(view1->CountL(), 3);
       
  2270 	TEST2(view2->CountL(), 3);
       
  2271 
       
  2272 	list->ResetAndDestroy();
       
  2273 
       
  2274 	/////////////////////////////////////////
       
  2275 
       
  2276 	filter = CLogFilter::NewL();
       
  2277 	CleanupStack::PushL(filter);
       
  2278 	
       
  2279 	// Set filter
       
  2280 	filter->SetContact(KTestContact1);
       
  2281 	filter->SetDirection(KTestDirection1);
       
  2282 
       
  2283 	list->AppendL(filter);
       
  2284 	CleanupStack::Pop(); // filter
       
  2285 
       
  2286 	// Test View
       
  2287 	active1->StartL();
       
  2288 	active2->StartL();
       
  2289 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2290 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2291 	CActiveScheduler::Start();
       
  2292 	CActiveScheduler::Start();
       
  2293 	TEST2(view1->CountL(), 1);
       
  2294 	TEST2(view2->CountL(), 1);
       
  2295 
       
  2296 	filter = CLogFilter::NewL();
       
  2297 	CleanupStack::PushL(filter);
       
  2298 	
       
  2299 	// Set filter
       
  2300 	filter->SetContact(KTestContact2);
       
  2301 	filter->SetDirection(KTestDirection2);
       
  2302 
       
  2303 	list->AppendL(filter);
       
  2304 	CleanupStack::Pop(); // filter
       
  2305 
       
  2306 	// Test View
       
  2307 	active1->StartL();
       
  2308 	active2->StartL();
       
  2309 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2310 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2311 	CActiveScheduler::Start();
       
  2312 	CActiveScheduler::Start();
       
  2313 	TEST2(view1->CountL(), 2);
       
  2314 	TEST2(view2->CountL(), 2);
       
  2315 
       
  2316 	filter = CLogFilter::NewL();
       
  2317 	CleanupStack::PushL(filter);
       
  2318 	
       
  2319 	// Set filter
       
  2320 	filter->SetContact(KTestContact3);
       
  2321 	filter->SetDirection(KTestDirection3);
       
  2322 
       
  2323 	list->AppendL(filter);
       
  2324 	CleanupStack::Pop(); // filter
       
  2325 
       
  2326 	// Test View
       
  2327 	active1->StartL();
       
  2328 	active2->StartL();
       
  2329 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2330 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2331 	CActiveScheduler::Start();
       
  2332 	CActiveScheduler::Start();
       
  2333 	TEST2(view1->CountL(), 3);
       
  2334 	TEST2(view2->CountL(), 3);
       
  2335 
       
  2336 	list->ResetAndDestroy();
       
  2337 
       
  2338 	/////////////////////////////////////////
       
  2339 
       
  2340 	filter = CLogFilter::NewL();
       
  2341 	CleanupStack::PushL(filter);
       
  2342 	
       
  2343 	// Set filter
       
  2344 	filter->SetContact(KTestContact1);
       
  2345 	filter->SetDirection(KTestDirection1);
       
  2346 	filter->SetDurationType(KLogDurationNone);
       
  2347 
       
  2348 	list->AppendL(filter);
       
  2349 	CleanupStack::Pop(); // filter
       
  2350 
       
  2351 	// Test View
       
  2352 	active1->StartL();
       
  2353 	active2->StartL();
       
  2354 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2355 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2356 	CActiveScheduler::Start();
       
  2357 	CActiveScheduler::Start();
       
  2358 	TEST2(view1->CountL(), 1);
       
  2359 	TEST2(view2->CountL(), 1);
       
  2360 
       
  2361 	filter = CLogFilter::NewL();
       
  2362 	CleanupStack::PushL(filter);
       
  2363 	
       
  2364 	// Set filter
       
  2365 	filter->SetContact(KTestContact2);
       
  2366 	filter->SetDirection(KTestDirection2);
       
  2367 	filter->SetDurationType(KLogDurationValid);
       
  2368 
       
  2369 	list->AppendL(filter);
       
  2370 	CleanupStack::Pop(); // filter
       
  2371 
       
  2372 	// Test View
       
  2373 	active1->StartL();
       
  2374 	active2->StartL();
       
  2375 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2376 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2377 	CActiveScheduler::Start();
       
  2378 	CActiveScheduler::Start();
       
  2379 	TEST2(view1->CountL(), 2);
       
  2380 	TEST2(view2->CountL(), 2);
       
  2381 
       
  2382 	filter = CLogFilter::NewL();
       
  2383 	CleanupStack::PushL(filter);
       
  2384 	
       
  2385 	// Set filter
       
  2386 	filter->SetContact(KTestContact3);
       
  2387 	filter->SetDirection(KTestDirection3);
       
  2388 	filter->SetDurationType(KLogDurationData);
       
  2389 
       
  2390 	list->AppendL(filter);
       
  2391 	CleanupStack::Pop(); // filter
       
  2392 
       
  2393 	// Test View
       
  2394 	active1->StartL();
       
  2395 	active2->StartL();
       
  2396 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2397 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2398 	CActiveScheduler::Start();
       
  2399 	CActiveScheduler::Start();
       
  2400 	TEST2(view1->CountL(), 3);
       
  2401 	TEST2(view2->CountL(), 3);
       
  2402 
       
  2403 	list->ResetAndDestroy();
       
  2404 
       
  2405 	/////////////////////////////////////////
       
  2406 
       
  2407 	filter = CLogFilter::NewL();
       
  2408 	CleanupStack::PushL(filter);
       
  2409 	
       
  2410 	// Set filter
       
  2411 	filter->SetContact(KTestContact1);
       
  2412 	filter->SetDirection(KTestDirection1);
       
  2413 	filter->SetDurationType(KLogDurationNone);
       
  2414 	filter->SetEventType(KLogCallEventTypeUid);
       
  2415 
       
  2416 	list->AppendL(filter);
       
  2417 	CleanupStack::Pop(); // filter
       
  2418 
       
  2419 	// Test View
       
  2420 	active1->StartL();
       
  2421 	active2->StartL();
       
  2422 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2423 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2424 	CActiveScheduler::Start();
       
  2425 	CActiveScheduler::Start();
       
  2426 	TEST2(view1->CountL(), 1);
       
  2427 	TEST2(view2->CountL(), 1);
       
  2428 
       
  2429 	filter = CLogFilter::NewL();
       
  2430 	CleanupStack::PushL(filter);
       
  2431 	
       
  2432 	// Set filter
       
  2433 	filter->SetContact(KTestContact2);
       
  2434 	filter->SetDirection(KTestDirection2);
       
  2435 	filter->SetDurationType(KLogDurationValid);
       
  2436 	filter->SetEventType(KLogDataEventTypeUid);
       
  2437 
       
  2438 	list->AppendL(filter);
       
  2439 	CleanupStack::Pop(); // filter
       
  2440 
       
  2441 	// Test View
       
  2442 	active1->StartL();
       
  2443 	active2->StartL();
       
  2444 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2445 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2446 	CActiveScheduler::Start();
       
  2447 	CActiveScheduler::Start();
       
  2448 	TEST2(view1->CountL(), 2);
       
  2449 	TEST2(view2->CountL(), 2);
       
  2450 
       
  2451 	filter = CLogFilter::NewL();
       
  2452 	CleanupStack::PushL(filter);
       
  2453 	
       
  2454 	// Set filter
       
  2455 	filter->SetContact(KTestContact3);
       
  2456 	filter->SetDirection(KTestDirection3);
       
  2457 	filter->SetDurationType(KLogDurationData);
       
  2458 	filter->SetEventType(KLogFaxEventTypeUid);
       
  2459 
       
  2460 	list->AppendL(filter);
       
  2461 	CleanupStack::Pop(); // filter
       
  2462 
       
  2463 	// Test View
       
  2464 	active1->StartL();
       
  2465 	active2->StartL();
       
  2466 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2467 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2468 	CActiveScheduler::Start();
       
  2469 	CActiveScheduler::Start();
       
  2470 	TEST2(view1->CountL(), 3);
       
  2471 	TEST2(view2->CountL(), 3);
       
  2472 
       
  2473 	list->ResetAndDestroy();
       
  2474 
       
  2475 	/////////////////////////////////////////
       
  2476 
       
  2477 	filter = CLogFilter::NewL();
       
  2478 	CleanupStack::PushL(filter);
       
  2479 	
       
  2480 	// Set filter
       
  2481 	filter->SetContact(KTestContact1);
       
  2482 	filter->SetDirection(KTestDirection1);
       
  2483 	filter->SetDurationType(KLogDurationNone);
       
  2484 	filter->SetEventType(KLogCallEventTypeUid);
       
  2485 	filter->SetNumber(KTestNumber1);
       
  2486 
       
  2487 	list->AppendL(filter);
       
  2488 	CleanupStack::Pop(); // filter
       
  2489 
       
  2490 	// Test View
       
  2491 	active1->StartL();
       
  2492 	active2->StartL();
       
  2493 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2494 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2495 	CActiveScheduler::Start();
       
  2496 	CActiveScheduler::Start();
       
  2497 	TEST2(view1->CountL(), 1);
       
  2498 	TEST2(view2->CountL(), 1);
       
  2499 
       
  2500 	filter = CLogFilter::NewL();
       
  2501 	CleanupStack::PushL(filter);
       
  2502 	
       
  2503 	// Set filter
       
  2504 	filter->SetContact(KTestContact2);
       
  2505 	filter->SetDirection(KTestDirection2);
       
  2506 	filter->SetDurationType(KLogDurationValid);
       
  2507 	filter->SetEventType(KLogDataEventTypeUid);
       
  2508 	filter->SetNumber(KTestNumber2);
       
  2509 
       
  2510 	list->AppendL(filter);
       
  2511 	CleanupStack::Pop(); // filter
       
  2512 
       
  2513 	// Test View
       
  2514 	active1->StartL();
       
  2515 	active2->StartL();
       
  2516 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2517 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2518 	CActiveScheduler::Start();
       
  2519 	CActiveScheduler::Start();
       
  2520 	TEST2(view1->CountL(), 2);
       
  2521 	TEST2(view2->CountL(), 2);
       
  2522 
       
  2523 	filter = CLogFilter::NewL();
       
  2524 	CleanupStack::PushL(filter);
       
  2525 	
       
  2526 	// Set filter
       
  2527 	filter->SetContact(KTestContact3);
       
  2528 	filter->SetDirection(KTestDirection3);
       
  2529 	filter->SetDurationType(KLogDurationData);
       
  2530 	filter->SetEventType(KLogFaxEventTypeUid);
       
  2531 	filter->SetNumber(KTestNumber3);
       
  2532 
       
  2533 	list->AppendL(filter);
       
  2534 	CleanupStack::Pop(); // filter
       
  2535 
       
  2536 	// Test View
       
  2537 	active1->StartL();
       
  2538 	active2->StartL();
       
  2539 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2540 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2541 	CActiveScheduler::Start();
       
  2542 	CActiveScheduler::Start();
       
  2543 	TEST2(view1->CountL(), 3);
       
  2544 	TEST2(view2->CountL(), 3);
       
  2545 
       
  2546 	list->ResetAndDestroy();
       
  2547 
       
  2548 	/////////////////////////////////////////
       
  2549 
       
  2550 	filter = CLogFilter::NewL();
       
  2551 	CleanupStack::PushL(filter);
       
  2552 	
       
  2553 	// Set filter
       
  2554 	filter->SetContact(KTestContact1);
       
  2555 	filter->SetDirection(KTestDirection1);
       
  2556 	filter->SetDurationType(KLogDurationNone);
       
  2557 	filter->SetEventType(KLogCallEventTypeUid);
       
  2558 	filter->SetNumber(KTestNumber1);
       
  2559 	filter->SetRemoteParty(KTestRemote1);
       
  2560 
       
  2561 	list->AppendL(filter);
       
  2562 	CleanupStack::Pop(); // filter
       
  2563 
       
  2564 	// Test View
       
  2565 	active1->StartL();
       
  2566 	active2->StartL();
       
  2567 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2568 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2569 	CActiveScheduler::Start();
       
  2570 	CActiveScheduler::Start();
       
  2571 	TEST2(view1->CountL(), 1);
       
  2572 	TEST2(view2->CountL(), 1);
       
  2573 
       
  2574 	filter = CLogFilter::NewL();
       
  2575 	CleanupStack::PushL(filter);
       
  2576 	
       
  2577 	// Set filter
       
  2578 	filter->SetContact(KTestContact2);
       
  2579 	filter->SetDirection(KTestDirection2);
       
  2580 	filter->SetDurationType(KLogDurationValid);
       
  2581 	filter->SetEventType(KLogDataEventTypeUid);
       
  2582 	filter->SetNumber(KTestNumber2);
       
  2583 	filter->SetRemoteParty(KTestRemote2);
       
  2584 
       
  2585 	list->AppendL(filter);
       
  2586 	CleanupStack::Pop(); // filter
       
  2587 
       
  2588 	// Test View
       
  2589 	active1->StartL();
       
  2590 	active2->StartL();
       
  2591 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2592 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2593 	CActiveScheduler::Start();
       
  2594 	CActiveScheduler::Start();
       
  2595 	TEST2(view1->CountL(), 2);
       
  2596 	TEST2(view2->CountL(), 2);
       
  2597 
       
  2598 	filter = CLogFilter::NewL();
       
  2599 	CleanupStack::PushL(filter);
       
  2600 	
       
  2601 	// Set filter
       
  2602 	filter->SetContact(KTestContact3);
       
  2603 	filter->SetDirection(KTestDirection3);
       
  2604 	filter->SetDurationType(KLogDurationData);
       
  2605 	filter->SetEventType(KLogFaxEventTypeUid);
       
  2606 	filter->SetNumber(KTestNumber3);
       
  2607 	filter->SetRemoteParty(KTestRemote3);
       
  2608 
       
  2609 	list->AppendL(filter);
       
  2610 	CleanupStack::Pop(); // filter
       
  2611 
       
  2612 	// Test View
       
  2613 	active1->StartL();
       
  2614 	active2->StartL();
       
  2615 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2616 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2617 	CActiveScheduler::Start();
       
  2618 	CActiveScheduler::Start();
       
  2619 	TEST2(view1->CountL(), 3);
       
  2620 	TEST2(view2->CountL(), 3);
       
  2621 
       
  2622 	list->ResetAndDestroy();
       
  2623 
       
  2624 	/////////////////////////////////////////
       
  2625 
       
  2626 	filter = CLogFilter::NewL();
       
  2627 	CleanupStack::PushL(filter);
       
  2628 	
       
  2629 	// Set filter
       
  2630 	filter->SetContact(KTestContact1);
       
  2631 	filter->SetDirection(KTestDirection1);
       
  2632 	filter->SetDurationType(KLogDurationNone);
       
  2633 	filter->SetEventType(KLogCallEventTypeUid);
       
  2634 	filter->SetNumber(KTestNumber1);
       
  2635 	filter->SetRemoteParty(KTestRemote1);
       
  2636 	filter->SetStatus(KTestStatus1);
       
  2637 
       
  2638 	list->AppendL(filter);
       
  2639 	CleanupStack::Pop(); // filter
       
  2640 
       
  2641 	// Test View
       
  2642 	active1->StartL();
       
  2643 	active2->StartL();
       
  2644 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2645 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2646 	CActiveScheduler::Start();
       
  2647 	CActiveScheduler::Start();
       
  2648 	TEST2(view1->CountL(), 1);
       
  2649 	TEST2(view2->CountL(), 1);
       
  2650 
       
  2651 	filter = CLogFilter::NewL();
       
  2652 	CleanupStack::PushL(filter);
       
  2653 	
       
  2654 	// Set filter
       
  2655 	filter->SetContact(KTestContact2);
       
  2656 	filter->SetDirection(KTestDirection2);
       
  2657 	filter->SetDurationType(KLogDurationValid);
       
  2658 	filter->SetEventType(KLogDataEventTypeUid);
       
  2659 	filter->SetNumber(KTestNumber2);
       
  2660 	filter->SetRemoteParty(KTestRemote2);
       
  2661 	filter->SetStatus(KTestStatus2);
       
  2662 
       
  2663 	list->AppendL(filter);
       
  2664 	CleanupStack::Pop(); // filter
       
  2665 
       
  2666 	// Test View
       
  2667 	active1->StartL();
       
  2668 	active2->StartL();
       
  2669 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2670 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2671 	CActiveScheduler::Start();
       
  2672 	CActiveScheduler::Start();
       
  2673 	TEST2(view1->CountL(), 2);
       
  2674 	TEST2(view2->CountL(), 2);
       
  2675 
       
  2676 	filter = CLogFilter::NewL();
       
  2677 	CleanupStack::PushL(filter);
       
  2678 	
       
  2679 	// Set filter
       
  2680 	filter->SetContact(KTestContact3);
       
  2681 	filter->SetDirection(KTestDirection3);
       
  2682 	filter->SetDurationType(KLogDurationData);
       
  2683 	filter->SetEventType(KLogFaxEventTypeUid);
       
  2684 	filter->SetNumber(KTestNumber3);
       
  2685 	filter->SetRemoteParty(KTestRemote3);
       
  2686 	filter->SetStatus(KTestStatus3);
       
  2687 
       
  2688 	list->AppendL(filter);
       
  2689 	CleanupStack::Pop(); // filter
       
  2690 
       
  2691 	// Test View
       
  2692 	active1->StartL();
       
  2693 	active2->StartL();
       
  2694 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2695 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2696 	CActiveScheduler::Start();
       
  2697 	CActiveScheduler::Start();
       
  2698 	TEST2(view1->CountL(), 3);
       
  2699 	TEST2(view2->CountL(), 3);
       
  2700 
       
  2701 	list->ResetAndDestroy();
       
  2702 
       
  2703 	CleanupStack::PopAndDestroy(6); // list, view1, view2, event, active1, active2
       
  2704 	}
       
  2705 
       
  2706 /**
       
  2707 @SYMTestCaseID          SYSLIB-LOGENG-CT-0944
       
  2708 @SYMTestCaseDesc	    Multiple log event views test
       
  2709 @SYMTestPriority 	    High
       
  2710 @SYMTestActions  	    Add events and set the filter with different fields.
       
  2711 						Check for log event views and the test for the count of events
       
  2712 @SYMTestExpectedResults Test must not fail
       
  2713 @SYMREQ                 REQ0000
       
  2714 */
       
  2715 LOCAL_C void TestMultipleViews2L(CLogClient& aClient)
       
  2716 	{
       
  2717 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0944 "));
       
  2718 	CTestActive* active1 = new(ELeave)CTestActive;
       
  2719 	CleanupStack::PushL(active1);
       
  2720 
       
  2721 	// Wait a second
       
  2722 	User::After(1000000);
       
  2723 
       
  2724 	TTime now;
       
  2725 	now.UniversalTime();
       
  2726 	now += (TTimeIntervalDays)+1;
       
  2727 
       
  2728 	// Get rid of all the events in the log
       
  2729 	active1->StartL();
       
  2730 	aClient.ClearLog(now, active1->iStatus);
       
  2731 	CActiveScheduler::Start();
       
  2732 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2733 
       
  2734 	CTestActive* active2 = new(ELeave)CTestActive;
       
  2735 	CleanupStack::PushL(active2);
       
  2736 
       
  2737 	CLogEvent* event = CLogEvent::NewL();
       
  2738 	CleanupStack::PushL(event);
       
  2739 
       
  2740 	event->SetEventType(KLogCallEventTypeUid);
       
  2741 	event->SetContact(KTestContact1);
       
  2742 	event->SetDirection(KTestDirection1);
       
  2743 	event->SetDurationType(KLogDurationNone);
       
  2744 	event->SetNumber(KTestNumber1);
       
  2745 	event->SetRemoteParty(KTestRemote1);
       
  2746 	event->SetStatus(KTestStatus1);
       
  2747 
       
  2748 	// Add event
       
  2749 	active1->StartL();
       
  2750 	aClient.AddEvent(*event, active1->iStatus);
       
  2751 	CActiveScheduler::Start();
       
  2752 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2753 
       
  2754 	event->SetEventType(KLogDataEventTypeUid);
       
  2755 	event->SetContact(KTestContact2);
       
  2756 	event->SetDirection(KTestDirection2);
       
  2757 	event->SetDurationType(KLogDurationValid);
       
  2758 	event->SetNumber(KTestNumber2);
       
  2759 	event->SetRemoteParty(KTestRemote2);
       
  2760 	event->SetStatus(KTestStatus2);
       
  2761 
       
  2762 	// Add event
       
  2763 	active1->StartL();
       
  2764 	aClient.AddEvent(*event, active1->iStatus);
       
  2765 	CActiveScheduler::Start();
       
  2766 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2767 
       
  2768 	event->SetEventType(KLogFaxEventTypeUid);
       
  2769 	event->SetContact(KTestContact3);
       
  2770 	event->SetDirection(KTestDirection3);
       
  2771 	event->SetDurationType(KLogDurationData);
       
  2772 	event->SetNumber(KTestNumber3);
       
  2773 	event->SetRemoteParty(KTestRemote3);
       
  2774 	event->SetStatus(KTestStatus3);
       
  2775 
       
  2776 	// Add event
       
  2777 	active1->StartL();
       
  2778 	aClient.AddEvent(*event, active1->iStatus);
       
  2779 	CActiveScheduler::Start();
       
  2780 	TEST2(active1->iStatus.Int(), KErrNone);
       
  2781 
       
  2782 	CLogFilterList* list = new(ELeave)CLogFilterList;
       
  2783 	CleanupStack::PushL(list);
       
  2784 
       
  2785 	CLogViewEvent* view1 = CLogViewEvent::NewL(aClient);
       
  2786 	CleanupStack::PushL(view1);
       
  2787 
       
  2788 	CLogClient* client2 = CLogClient::NewL(theFs);
       
  2789 	CleanupStack::PushL(client2);
       
  2790 
       
  2791 	CLogViewEvent* view2 = CLogViewEvent::NewL(*client2);
       
  2792 	CleanupStack::PushL(view2);
       
  2793 
       
  2794 	CLogFilter* filter = CLogFilter::NewL();
       
  2795 	CleanupStack::PushL(filter);
       
  2796 	
       
  2797 	// Set filter
       
  2798 	filter->SetContact(KTestContact1);
       
  2799 
       
  2800 	list->AppendL(filter);
       
  2801 	CleanupStack::Pop(); // filter
       
  2802 
       
  2803 	// Test Views
       
  2804 	active1->StartL();
       
  2805 	active2->StartL();
       
  2806 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2807 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2808 	CActiveScheduler::Start();
       
  2809 	CActiveScheduler::Start();
       
  2810 	TEST2(view1->CountL(), 1);
       
  2811 	TEST2(view2->CountL(), 1);
       
  2812 
       
  2813 	filter = CLogFilter::NewL();
       
  2814 	CleanupStack::PushL(filter);
       
  2815 	
       
  2816 	// Set filter
       
  2817 	filter->SetContact(KTestContact2);
       
  2818 
       
  2819 	list->AppendL(filter);
       
  2820 	CleanupStack::Pop(); // filter
       
  2821 
       
  2822 	// Test View
       
  2823 	active1->StartL();
       
  2824 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2825 	CActiveScheduler::Start();
       
  2826 	TEST2(view1->CountL(), 2);
       
  2827 
       
  2828 	filter = CLogFilter::NewL();
       
  2829 	CleanupStack::PushL(filter);
       
  2830 	
       
  2831 	// Set filter
       
  2832 	filter->SetContact(KTestContact3);
       
  2833 
       
  2834 	list->AppendL(filter);
       
  2835 	CleanupStack::Pop(); // filter
       
  2836 
       
  2837 	// Test View
       
  2838 	active1->StartL();
       
  2839 	active2->StartL();
       
  2840 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2841 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2842 	CActiveScheduler::Start();
       
  2843 	CActiveScheduler::Start();
       
  2844 	TEST2(view1->CountL(), 3);
       
  2845 	TEST2(view2->CountL(), 3);
       
  2846 
       
  2847 	list->ResetAndDestroy();
       
  2848 
       
  2849 	/////////////////////////////////////////
       
  2850 
       
  2851 	filter = CLogFilter::NewL();
       
  2852 	CleanupStack::PushL(filter);
       
  2853 	
       
  2854 	// Set filter
       
  2855 	filter->SetContact(KTestContact1);
       
  2856 	filter->SetDirection(KTestDirection1);
       
  2857 
       
  2858 	list->AppendL(filter);
       
  2859 	CleanupStack::Pop(); // filter
       
  2860 
       
  2861 	// Test View
       
  2862 	active1->StartL();
       
  2863 	active2->StartL();
       
  2864 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2865 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2866 	CActiveScheduler::Start();
       
  2867 	CActiveScheduler::Start();
       
  2868 	TEST2(view1->CountL(), 1);
       
  2869 	TEST2(view2->CountL(), 1);
       
  2870 
       
  2871 	filter = CLogFilter::NewL();
       
  2872 	CleanupStack::PushL(filter);
       
  2873 	
       
  2874 	// Set filter
       
  2875 	filter->SetContact(KTestContact2);
       
  2876 	filter->SetDirection(KTestDirection2);
       
  2877 
       
  2878 	list->AppendL(filter);
       
  2879 	CleanupStack::Pop(); // filter
       
  2880 
       
  2881 	// Test View
       
  2882 	active1->StartL();
       
  2883 	active2->StartL();
       
  2884 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2885 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2886 	CActiveScheduler::Start();
       
  2887 	CActiveScheduler::Start();
       
  2888 	TEST2(view1->CountL(), 2);
       
  2889 	TEST2(view2->CountL(), 2);
       
  2890 
       
  2891 	filter = CLogFilter::NewL();
       
  2892 	CleanupStack::PushL(filter);
       
  2893 	
       
  2894 	// Set filter
       
  2895 	filter->SetContact(KTestContact3);
       
  2896 	filter->SetDirection(KTestDirection3);
       
  2897 
       
  2898 	list->AppendL(filter);
       
  2899 	CleanupStack::Pop(); // filter
       
  2900 
       
  2901 	// Test View
       
  2902 	active1->StartL();
       
  2903 	active2->StartL();
       
  2904 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2905 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2906 	CActiveScheduler::Start();
       
  2907 	CActiveScheduler::Start();
       
  2908 	TEST2(view1->CountL(), 3);
       
  2909 	TEST2(view2->CountL(), 3);
       
  2910 
       
  2911 	list->ResetAndDestroy();
       
  2912 
       
  2913 	/////////////////////////////////////////
       
  2914 
       
  2915 	filter = CLogFilter::NewL();
       
  2916 	CleanupStack::PushL(filter);
       
  2917 	
       
  2918 	// Set filter
       
  2919 	filter->SetContact(KTestContact1);
       
  2920 	filter->SetDirection(KTestDirection1);
       
  2921 	filter->SetDurationType(KLogDurationNone);
       
  2922 
       
  2923 	list->AppendL(filter);
       
  2924 	CleanupStack::Pop(); // filter
       
  2925 
       
  2926 	// Test View
       
  2927 	active1->StartL();
       
  2928 	active2->StartL();
       
  2929 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2930 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2931 	CActiveScheduler::Start();
       
  2932 	CActiveScheduler::Start();
       
  2933 	TEST2(view1->CountL(), 1);
       
  2934 	TEST2(view2->CountL(), 1);
       
  2935 
       
  2936 	filter = CLogFilter::NewL();
       
  2937 	CleanupStack::PushL(filter);
       
  2938 	
       
  2939 	// Set filter
       
  2940 	filter->SetContact(KTestContact2);
       
  2941 	filter->SetDirection(KTestDirection2);
       
  2942 	filter->SetDurationType(KLogDurationValid);
       
  2943 
       
  2944 	list->AppendL(filter);
       
  2945 	CleanupStack::Pop(); // filter
       
  2946 
       
  2947 	// Test View
       
  2948 	active1->StartL();
       
  2949 	active2->StartL();
       
  2950 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2951 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2952 	CActiveScheduler::Start();
       
  2953 	CActiveScheduler::Start();
       
  2954 	TEST2(view1->CountL(), 2);
       
  2955 	TEST2(view2->CountL(), 2);
       
  2956 
       
  2957 	filter = CLogFilter::NewL();
       
  2958 	CleanupStack::PushL(filter);
       
  2959 	
       
  2960 	// Set filter
       
  2961 	filter->SetContact(KTestContact3);
       
  2962 	filter->SetDirection(KTestDirection3);
       
  2963 	filter->SetDurationType(KLogDurationData);
       
  2964 
       
  2965 	list->AppendL(filter);
       
  2966 	CleanupStack::Pop(); // filter
       
  2967 
       
  2968 	// Test View
       
  2969 	active1->StartL();
       
  2970 	active2->StartL();
       
  2971 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2972 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2973 	CActiveScheduler::Start();
       
  2974 	CActiveScheduler::Start();
       
  2975 	TEST2(view1->CountL(), 3);
       
  2976 	TEST2(view2->CountL(), 3);
       
  2977 
       
  2978 	list->ResetAndDestroy();
       
  2979 
       
  2980 	/////////////////////////////////////////
       
  2981 
       
  2982 	filter = CLogFilter::NewL();
       
  2983 	CleanupStack::PushL(filter);
       
  2984 	
       
  2985 	// Set filter
       
  2986 	filter->SetContact(KTestContact1);
       
  2987 	filter->SetDirection(KTestDirection1);
       
  2988 	filter->SetDurationType(KLogDurationNone);
       
  2989 	filter->SetEventType(KLogCallEventTypeUid);
       
  2990 
       
  2991 	list->AppendL(filter);
       
  2992 	CleanupStack::Pop(); // filter
       
  2993 
       
  2994 	// Test View
       
  2995 	active1->StartL();
       
  2996 	active2->StartL();
       
  2997 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  2998 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  2999 	CActiveScheduler::Start();
       
  3000 	CActiveScheduler::Start();
       
  3001 	TEST2(view1->CountL(), 1);
       
  3002 	TEST2(view2->CountL(), 1);
       
  3003 
       
  3004 	filter = CLogFilter::NewL();
       
  3005 	CleanupStack::PushL(filter);
       
  3006 	
       
  3007 	// Set filter
       
  3008 	filter->SetContact(KTestContact2);
       
  3009 	filter->SetDirection(KTestDirection2);
       
  3010 	filter->SetDurationType(KLogDurationValid);
       
  3011 	filter->SetEventType(KLogDataEventTypeUid);
       
  3012 
       
  3013 	list->AppendL(filter);
       
  3014 	CleanupStack::Pop(); // filter
       
  3015 
       
  3016 	// Test View
       
  3017 	active1->StartL();
       
  3018 	active2->StartL();
       
  3019 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3020 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3021 	CActiveScheduler::Start();
       
  3022 	CActiveScheduler::Start();
       
  3023 	TEST2(view1->CountL(), 2);
       
  3024 	TEST2(view2->CountL(), 2);
       
  3025 
       
  3026 	filter = CLogFilter::NewL();
       
  3027 	CleanupStack::PushL(filter);
       
  3028 	
       
  3029 	// Set filter
       
  3030 	filter->SetContact(KTestContact3);
       
  3031 	filter->SetDirection(KTestDirection3);
       
  3032 	filter->SetDurationType(KLogDurationData);
       
  3033 	filter->SetEventType(KLogFaxEventTypeUid);
       
  3034 
       
  3035 	list->AppendL(filter);
       
  3036 	CleanupStack::Pop(); // filter
       
  3037 
       
  3038 	// Test View
       
  3039 	active1->StartL();
       
  3040 	active2->StartL();
       
  3041 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3042 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3043 	CActiveScheduler::Start();
       
  3044 	CActiveScheduler::Start();
       
  3045 	TEST2(view1->CountL(), 3);
       
  3046 	TEST2(view2->CountL(), 3);
       
  3047 
       
  3048 	list->ResetAndDestroy();
       
  3049 
       
  3050 	/////////////////////////////////////////
       
  3051 
       
  3052 	filter = CLogFilter::NewL();
       
  3053 	CleanupStack::PushL(filter);
       
  3054 	
       
  3055 	// Set filter
       
  3056 	filter->SetContact(KTestContact1);
       
  3057 	filter->SetDirection(KTestDirection1);
       
  3058 	filter->SetDurationType(KLogDurationNone);
       
  3059 	filter->SetEventType(KLogCallEventTypeUid);
       
  3060 	filter->SetNumber(KTestNumber1);
       
  3061 
       
  3062 	list->AppendL(filter);
       
  3063 	CleanupStack::Pop(); // filter
       
  3064 
       
  3065 	// Test View
       
  3066 	active1->StartL();
       
  3067 	active2->StartL();
       
  3068 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3069 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3070 	CActiveScheduler::Start();
       
  3071 	CActiveScheduler::Start();
       
  3072 	TEST2(view1->CountL(), 1);
       
  3073 	TEST2(view2->CountL(), 1);
       
  3074 
       
  3075 	filter = CLogFilter::NewL();
       
  3076 	CleanupStack::PushL(filter);
       
  3077 	
       
  3078 	// Set filter
       
  3079 	filter->SetContact(KTestContact2);
       
  3080 	filter->SetDirection(KTestDirection2);
       
  3081 	filter->SetDurationType(KLogDurationValid);
       
  3082 	filter->SetEventType(KLogDataEventTypeUid);
       
  3083 	filter->SetNumber(KTestNumber2);
       
  3084 
       
  3085 	list->AppendL(filter);
       
  3086 	CleanupStack::Pop(); // filter
       
  3087 
       
  3088 	// Test View
       
  3089 	active1->StartL();
       
  3090 	active2->StartL();
       
  3091 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3092 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3093 	CActiveScheduler::Start();
       
  3094 	CActiveScheduler::Start();
       
  3095 	TEST2(view1->CountL(), 2);
       
  3096 	TEST2(view2->CountL(), 2);
       
  3097 
       
  3098 	filter = CLogFilter::NewL();
       
  3099 	CleanupStack::PushL(filter);
       
  3100 	
       
  3101 	// Set filter
       
  3102 	filter->SetContact(KTestContact3);
       
  3103 	filter->SetDirection(KTestDirection3);
       
  3104 	filter->SetDurationType(KLogDurationData);
       
  3105 	filter->SetEventType(KLogFaxEventTypeUid);
       
  3106 	filter->SetNumber(KTestNumber3);
       
  3107 
       
  3108 	list->AppendL(filter);
       
  3109 	CleanupStack::Pop(); // filter
       
  3110 
       
  3111 	// Test View
       
  3112 	active1->StartL();
       
  3113 	active2->StartL();
       
  3114 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3115 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3116 	CActiveScheduler::Start();
       
  3117 	CActiveScheduler::Start();
       
  3118 	TEST2(view1->CountL(), 3);
       
  3119 	TEST2(view2->CountL(), 3);
       
  3120 
       
  3121 	list->ResetAndDestroy();
       
  3122 
       
  3123 	/////////////////////////////////////////
       
  3124 
       
  3125 	filter = CLogFilter::NewL();
       
  3126 	CleanupStack::PushL(filter);
       
  3127 	
       
  3128 	// Set filter
       
  3129 	filter->SetContact(KTestContact1);
       
  3130 	filter->SetDirection(KTestDirection1);
       
  3131 	filter->SetDurationType(KLogDurationNone);
       
  3132 	filter->SetEventType(KLogCallEventTypeUid);
       
  3133 	filter->SetNumber(KTestNumber1);
       
  3134 	filter->SetRemoteParty(KTestRemote1);
       
  3135 
       
  3136 	list->AppendL(filter);
       
  3137 	CleanupStack::Pop(); // filter
       
  3138 
       
  3139 	// Test View
       
  3140 	active1->StartL();
       
  3141 	active2->StartL();
       
  3142 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3143 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3144 	CActiveScheduler::Start();
       
  3145 	CActiveScheduler::Start();
       
  3146 	TEST2(view1->CountL(), 1);
       
  3147 	TEST2(view2->CountL(), 1);
       
  3148 
       
  3149 	filter = CLogFilter::NewL();
       
  3150 	CleanupStack::PushL(filter);
       
  3151 	
       
  3152 	// Set filter
       
  3153 	filter->SetContact(KTestContact2);
       
  3154 	filter->SetDirection(KTestDirection2);
       
  3155 	filter->SetDurationType(KLogDurationValid);
       
  3156 	filter->SetEventType(KLogDataEventTypeUid);
       
  3157 	filter->SetNumber(KTestNumber2);
       
  3158 	filter->SetRemoteParty(KTestRemote2);
       
  3159 
       
  3160 	list->AppendL(filter);
       
  3161 	CleanupStack::Pop(); // filter
       
  3162 
       
  3163 	// Test View
       
  3164 	active1->StartL();
       
  3165 	active2->StartL();
       
  3166 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3167 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3168 	CActiveScheduler::Start();
       
  3169 	CActiveScheduler::Start();
       
  3170 	TEST2(view1->CountL(), 2);
       
  3171 	TEST2(view2->CountL(), 2);
       
  3172 
       
  3173 	filter = CLogFilter::NewL();
       
  3174 	CleanupStack::PushL(filter);
       
  3175 	
       
  3176 	// Set filter
       
  3177 	filter->SetContact(KTestContact3);
       
  3178 	filter->SetDirection(KTestDirection3);
       
  3179 	filter->SetDurationType(KLogDurationData);
       
  3180 	filter->SetEventType(KLogFaxEventTypeUid);
       
  3181 	filter->SetNumber(KTestNumber3);
       
  3182 	filter->SetRemoteParty(KTestRemote3);
       
  3183 
       
  3184 	list->AppendL(filter);
       
  3185 	CleanupStack::Pop(); // filter
       
  3186 
       
  3187 	// Test View
       
  3188 	active1->StartL();
       
  3189 	active2->StartL();
       
  3190 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3191 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3192 	CActiveScheduler::Start();
       
  3193 	CActiveScheduler::Start();
       
  3194 	TEST2(view1->CountL(), 3);
       
  3195 	TEST2(view2->CountL(), 3);
       
  3196 
       
  3197 	list->ResetAndDestroy();
       
  3198 
       
  3199 	/////////////////////////////////////////
       
  3200 
       
  3201 	filter = CLogFilter::NewL();
       
  3202 	CleanupStack::PushL(filter);
       
  3203 	
       
  3204 	// Set filter
       
  3205 	filter->SetContact(KTestContact1);
       
  3206 	filter->SetDirection(KTestDirection1);
       
  3207 	filter->SetDurationType(KLogDurationNone);
       
  3208 	filter->SetEventType(KLogCallEventTypeUid);
       
  3209 	filter->SetNumber(KTestNumber1);
       
  3210 	filter->SetRemoteParty(KTestRemote1);
       
  3211 	filter->SetStatus(KTestStatus1);
       
  3212 
       
  3213 	list->AppendL(filter);
       
  3214 	CleanupStack::Pop(); // filter
       
  3215 
       
  3216 	// Test View
       
  3217 	active1->StartL();
       
  3218 	active2->StartL();
       
  3219 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3220 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3221 	CActiveScheduler::Start();
       
  3222 	CActiveScheduler::Start();
       
  3223 	TEST2(view1->CountL(), 1);
       
  3224 	TEST2(view2->CountL(), 1);
       
  3225 
       
  3226 	filter = CLogFilter::NewL();
       
  3227 	CleanupStack::PushL(filter);
       
  3228 	
       
  3229 	// Set filter
       
  3230 	filter->SetContact(KTestContact2);
       
  3231 	filter->SetDirection(KTestDirection2);
       
  3232 	filter->SetDurationType(KLogDurationValid);
       
  3233 	filter->SetEventType(KLogDataEventTypeUid);
       
  3234 	filter->SetNumber(KTestNumber2);
       
  3235 	filter->SetRemoteParty(KTestRemote2);
       
  3236 	filter->SetStatus(KTestStatus2);
       
  3237 
       
  3238 	list->AppendL(filter);
       
  3239 	CleanupStack::Pop(); // filter
       
  3240 
       
  3241 	// Test View
       
  3242 	active1->StartL();
       
  3243 	active2->StartL();
       
  3244 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3245 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3246 	CActiveScheduler::Start();
       
  3247 	CActiveScheduler::Start();
       
  3248 	TEST2(view1->CountL(), 2);
       
  3249 	TEST2(view2->CountL(), 2);
       
  3250 
       
  3251 	filter = CLogFilter::NewL();
       
  3252 	CleanupStack::PushL(filter);
       
  3253 	
       
  3254 	// Set filter
       
  3255 	filter->SetContact(KTestContact3);
       
  3256 	filter->SetDirection(KTestDirection3);
       
  3257 	filter->SetDurationType(KLogDurationData);
       
  3258 	filter->SetEventType(KLogFaxEventTypeUid);
       
  3259 	filter->SetNumber(KTestNumber3);
       
  3260 	filter->SetRemoteParty(KTestRemote3);
       
  3261 	filter->SetStatus(KTestStatus3);
       
  3262 
       
  3263 	list->AppendL(filter);
       
  3264 	CleanupStack::Pop(); // filter
       
  3265 
       
  3266 	// Test View
       
  3267 	active1->StartL();
       
  3268 	active2->StartL();
       
  3269 	TEST(view1->SetFilterL(*list, active1->iStatus));
       
  3270 	TEST(view2->SetFilterL(*list, active2->iStatus));
       
  3271 	CActiveScheduler::Start();
       
  3272 	CActiveScheduler::Start();
       
  3273 	TEST2(view1->CountL(), 3);
       
  3274 	TEST2(view2->CountL(), 3);
       
  3275 
       
  3276 	list->ResetAndDestroy();
       
  3277 
       
  3278 	CleanupStack::PopAndDestroy(7); // list, view1, view2, client2, event, active1, active2
       
  3279 	}
       
  3280 
       
  3281 /**
       
  3282 @SYMTestCaseID          SYSLIB-LOGENG-CT-0945
       
  3283 @SYMTestCaseDesc	    Tests for notification on changes done to the view
       
  3284                         Tests for CLogViewChangeObserver::iStatus 
       
  3285 @SYMTestPriority 	    High
       
  3286 @SYMTestActions  	    Tests for setting a filter on the view.Check for receiving notifications on adding events to the view
       
  3287 @SYMTestExpectedResults Test must not fail
       
  3288 @SYMREQ                 REQ0000
       
  3289 */
       
  3290 LOCAL_C void TestViewChangeEventsL(CLogClient& aClient)
       
  3291 	{
       
  3292 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0945 "));
       
  3293 	TestUtils::DeleteDatabaseL();
       
  3294 
       
  3295 	CLogEvent* event = CLogEvent::NewL();
       
  3296 	CleanupStack::PushL(event);
       
  3297 	event->SetEventType(KLogCallEventTypeUid);
       
  3298 
       
  3299 	CTestActive* active = new(ELeave) CTestActive();
       
  3300 	CleanupStack::PushL(active);
       
  3301 
       
  3302 	CLogViewChangeObserver* changeObs = CLogViewChangeObserver::NewLC();
       
  3303 
       
  3304 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs);
       
  3305 	CleanupStack::PushL(view);
       
  3306 
       
  3307 	CLogFilter* filter = CLogFilter::NewL();
       
  3308 	CleanupStack::PushL(filter);
       
  3309 	TEST(!view->SetFilterL(*filter, active->iStatus));
       
  3310 
       
  3311 	// Add some events and check we receive change notifications
       
  3312 	TInt count;
       
  3313 	TLogId logId;
       
  3314 	TInt viewIndex;
       
  3315 	//
       
  3316 	for(count = 0; count < KTestEventNum; count++)
       
  3317 		{
       
  3318 		aClient.AddEvent(*event, changeObs->iStatus);
       
  3319 		CLogChangeDefinition* changes = changeObs->WaitForChangesLC(CLogViewChangeObserver::EStopOnBoth);
       
  3320 		TEST2(changeObs->iStatus.Int(), KErrNone);
       
  3321 		TEST(event->Id() == (TLogId) count);
       
  3322 		//
       
  3323 		User::After(1);
       
  3324 		//
       
  3325 		TEST2(changes->Count(), 1);
       
  3326 		TEST2(changes->At(0, logId, viewIndex), ELogChangeTypeEventAdded);
       
  3327 		TEST(logId == (TLogId) count);
       
  3328 		TEST2(viewIndex, 0);
       
  3329 		CleanupStack::PopAndDestroy(changes);
       
  3330 		}
       
  3331 
       
  3332 	CleanupStack::PopAndDestroy(5, event); // filter, view, changeObs, active, event
       
  3333 	}
       
  3334 
       
  3335 /**
       
  3336 @SYMTestCaseID          SYSLIB-LOGENG-CT-0946
       
  3337 @SYMTestCaseDesc	    Tests for events in the recent view list 
       
  3338 @SYMTestPriority 	    High
       
  3339 @SYMTestActions  	    Tests for events in the recent view list after setting the filters for incoming,outgoing and missed calls
       
  3340 @SYMTestExpectedResults Test must not fail
       
  3341 @SYMREQ                 REQ0000
       
  3342 */
       
  3343 LOCAL_C void TestAltEventsInRecentListL(CLogClient& aClient)
       
  3344 	{
       
  3345 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0946 "));
       
  3346 	CLogEvent* event = CLogEvent::NewL();
       
  3347 	CleanupStack::PushL(event);
       
  3348 
       
  3349 	CTestActive* active = new(ELeave)CTestActive();
       
  3350 	CleanupStack::PushL(active);
       
  3351 
       
  3352 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  3353 	CleanupStack::PushL(view);
       
  3354 
       
  3355 	// Clear recent lists
       
  3356 	active->StartL();
       
  3357 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  3358 	CActiveScheduler::Start();
       
  3359 	TEST2(active->iStatus.Int(), KErrNone);
       
  3360 
       
  3361 	TLogString buf;
       
  3362 	event->SetEventType(KLogCallEventTypeUid);
       
  3363 	
       
  3364 	// Add Incoming events
       
  3365 	aClient.GetString(buf, R_LOG_DIR_IN);	
       
  3366 	event->SetDirection(buf);
       
  3367 	event->SetContact(1);
       
  3368 	active->StartL();
       
  3369 	aClient.AddEvent(*event, active->iStatus);
       
  3370 	CActiveScheduler::Start();
       
  3371 	TEST2(active->iStatus.Int(), KErrNone);	
       
  3372 	aClient.GetString(buf, R_LOG_DIR_IN_ALT);
       
  3373 	event->SetDirection(buf);
       
  3374 	event->SetContact(2);
       
  3375 	active->StartL();
       
  3376 	aClient.AddEvent(*event, active->iStatus);
       
  3377 	CActiveScheduler::Start();
       
  3378 	TEST2(active->iStatus.Int(), KErrNone);
       
  3379 	// Verify both events in recent list
       
  3380 	active->StartL();
       
  3381 	TEST(view->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3382 	CActiveScheduler::Start();
       
  3383 	TEST2(active->iStatus.Int(), KErrNone);  
       
  3384 	TEST2(view->CountL(), 2);
       
  3385 
       
  3386 	// Add Outgoing events
       
  3387 	aClient.GetString(buf, R_LOG_DIR_OUT);
       
  3388 	event->SetDirection(buf);
       
  3389 	event->SetContact(3);
       
  3390 	active->StartL();
       
  3391 	aClient.AddEvent(*event, active->iStatus);
       
  3392 	CActiveScheduler::Start();
       
  3393 	TEST2(active->iStatus.Int(), KErrNone);
       
  3394 	aClient.GetString(buf, R_LOG_DIR_OUT_ALT);
       
  3395 	event->SetDirection(buf);
       
  3396 	event->SetContact(4);
       
  3397 	active->StartL();
       
  3398 	aClient.AddEvent(*event, active->iStatus);
       
  3399 	CActiveScheduler::Start();
       
  3400 	TEST2(active->iStatus.Int(), KErrNone);
       
  3401 	// Verify both events in recent list
       
  3402 	active->StartL();
       
  3403 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  3404 	CActiveScheduler::Start();
       
  3405 	TEST2(active->iStatus.Int(), KErrNone);
       
  3406 	TEST2(view->CountL(), 2);
       
  3407 
       
  3408 	// Add Missed events
       
  3409 	aClient.GetString(buf, R_LOG_DIR_MISSED);
       
  3410 	event->SetDirection(buf);
       
  3411 	event->SetContact(5);
       
  3412 	active->StartL();
       
  3413 	aClient.AddEvent(*event, active->iStatus);
       
  3414 	CActiveScheduler::Start();
       
  3415 	TEST2(active->iStatus.Int(), KErrNone);
       
  3416 	aClient.GetString(buf, R_LOG_DIR_MISSED_ALT);
       
  3417 	event->SetDirection(buf);
       
  3418 	event->SetContact(6);
       
  3419 	active->StartL();
       
  3420 	aClient.AddEvent(*event, active->iStatus);
       
  3421 	CActiveScheduler::Start();
       
  3422 	TEST2(active->iStatus.Int(), KErrNone);
       
  3423 	// Verify both events in recent list
       
  3424 	active->StartL();
       
  3425 	TEST(view->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  3426 	CActiveScheduler::Start();
       
  3427 	TEST2(active->iStatus.Int(), KErrNone);
       
  3428 	TEST2(view->CountL(), 2);
       
  3429 
       
  3430 	CleanupStack::PopAndDestroy(3); // view, active, event, 
       
  3431 	}
       
  3432 
       
  3433 /**
       
  3434 @SYMTestCaseID          SYSLIB-LOGENG-CT-0947
       
  3435 @SYMTestCaseDesc	    Tests for view with filter by time 
       
  3436 @SYMTestPriority 	    High
       
  3437 @SYMTestActions  	    Tests for view with filters set by different time
       
  3438 @SYMTestExpectedResults Test must not fail
       
  3439 @SYMREQ                 REQ0000
       
  3440 */
       
  3441 LOCAL_C void TestFilterByTimeL(CLogClient& aClient)
       
  3442 	{
       
  3443 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0947 "));
       
  3444 	CLogEvent* event = CLogEvent::NewL();
       
  3445 	CleanupStack::PushL(event);
       
  3446 
       
  3447 	CTestActive* active = new(ELeave)CTestActive();
       
  3448 	CleanupStack::PushL(active);
       
  3449 
       
  3450 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  3451 	CleanupStack::PushL(view);
       
  3452 
       
  3453 	// Clear recent lists
       
  3454 	active->StartL();
       
  3455 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  3456 	CActiveScheduler::Start();
       
  3457 	TEST2(active->iStatus.Int(), KErrNone);
       
  3458 
       
  3459 	event->SetEventType(KLogCallEventTypeUid);
       
  3460 	TLogString buf;
       
  3461 	aClient.GetString(buf, R_LOG_DIR_IN);	
       
  3462 	event->SetDirection(buf);
       
  3463 	
       
  3464 	// add first event (events following are added on successive days)
       
  3465 	event->SetContact(1);  // ensures events are not duplicates
       
  3466 	active->StartL();
       
  3467 	aClient.AddEvent(*event, active->iStatus);
       
  3468 	CActiveScheduler::Start();
       
  3469 	TEST2(active->iStatus.Int(), KErrNone);		
       
  3470 
       
  3471 	TTime systemTime;
       
  3472 	systemTime.UniversalTime();
       
  3473 
       
  3474 	// set filter startDate
       
  3475 	TTime startDate = systemTime + (TTimeIntervalHours)+1;
       
  3476 
       
  3477 	// add event 2	
       
  3478 	systemTime += (TTimeIntervalDays)+1;
       
  3479 	event->SetContact(2);
       
  3480 	active->StartL();
       
  3481 	aClient.AddEvent(*event, active->iStatus);
       
  3482 	CActiveScheduler::Start();
       
  3483 	TEST2(active->iStatus.Int(), KErrNone);	
       
  3484 
       
  3485 	event->SetTime(systemTime);
       
  3486 	active->StartL();
       
  3487 	aClient.ChangeEvent(*event, active->iStatus);
       
  3488 	CActiveScheduler::Start();
       
  3489 	TEST2(active->iStatus.Int(), KErrNone);
       
  3490 	
       
  3491 	// add event 3
       
  3492 	systemTime += (TTimeIntervalDays)+1;
       
  3493 	event->SetContact(3);
       
  3494 	active->StartL();
       
  3495 	aClient.AddEvent(*event, active->iStatus);
       
  3496 	CActiveScheduler::Start();
       
  3497 	TEST2(active->iStatus.Int(), KErrNone);
       
  3498 
       
  3499 	event->SetTime(systemTime);
       
  3500 	active->StartL();
       
  3501 	aClient.ChangeEvent(*event, active->iStatus);
       
  3502 	CActiveScheduler::Start();
       
  3503 	TEST2(active->iStatus.Int(), KErrNone);
       
  3504 
       
  3505 	// set filter endDate 
       
  3506 	TTime endDate = systemTime + (TTimeIntervalHours)+1;
       
  3507 
       
  3508 	// add event 4
       
  3509 	systemTime += (TTimeIntervalDays)+1;
       
  3510 	event->SetContact(4);
       
  3511 	active->StartL();
       
  3512 	aClient.AddEvent(*event, active->iStatus);
       
  3513 	CActiveScheduler::Start();
       
  3514 	TEST2(active->iStatus.Int(), KErrNone);
       
  3515 
       
  3516 	event->SetTime(systemTime);
       
  3517 	active->StartL();
       
  3518 	aClient.ChangeEvent(*event, active->iStatus);
       
  3519 	CActiveScheduler::Start();
       
  3520 	TEST2(active->iStatus.Int(), KErrNone);
       
  3521 
       
  3522 	CLogFilter* filter = CLogFilter::NewL();
       
  3523 	CleanupStack::PushL(filter);
       
  3524 	
       
  3525 	// check using both start and end
       
  3526 	filter->SetStartTime(startDate);	
       
  3527 	filter->SetEndTime(endDate);		
       
  3528 	active->StartL();
       
  3529 	TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  3530 	CActiveScheduler::Start();
       
  3531 	TEST2(active->iStatus.Int(), KErrNone);  
       
  3532 	TEST2(view->CountL(), 2); 
       
  3533 
       
  3534 	//  only end filter
       
  3535 	filter->SetStartTime(TTime(0));	// reset	
       
  3536 	filter->SetEndTime(endDate);		
       
  3537 	active->StartL();
       
  3538 	TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  3539 	CActiveScheduler::Start();
       
  3540 	TEST2(active->iStatus.Int(), KErrNone);  
       
  3541 	TEST2(view->CountL(), 3); 
       
  3542 
       
  3543 	//  only start filter
       
  3544 	filter->SetStartTime(startDate); 
       
  3545 	filter->SetEndTime(TTime(0));		
       
  3546 	active->StartL();
       
  3547 	TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  3548 	CActiveScheduler::Start();
       
  3549 	TEST2(active->iStatus.Int(), KErrNone);  
       
  3550 	TEST2(view->CountL(), 3); 	
       
  3551 
       
  3552 	//  no time filter
       
  3553 	filter->SetStartTime(TTime(0)); 
       
  3554 	filter->SetEndTime(TTime(0));		
       
  3555 	active->StartL();
       
  3556 	TEST(view->SetRecentListL(KLogNullRecentList, *filter, active->iStatus));
       
  3557 	CActiveScheduler::Start();
       
  3558 	TEST2(active->iStatus.Int(), KErrNone);  
       
  3559 	TEST2(view->CountL(), 4); 	
       
  3560 
       
  3561 	CleanupStack::PopAndDestroy(4); // view, active, event, filter 
       
  3562 	}
       
  3563 
       
  3564 /**
       
  3565 @SYMTestCaseID          SYSLIB-LOGENG-CT-0948
       
  3566 @SYMTestCaseDesc	    Tests for log view change observer
       
  3567 @SYMTestPriority 	    High
       
  3568 @SYMTestActions  	    Check that a view doesn't get change events for duplicates
       
  3569 @SYMTestExpectedResults Test must not fail
       
  3570 @SYMREQ                 REQ0000
       
  3571 */
       
  3572 LOCAL_C void TestHiddenChangeEvents1L(CLogClient& aClient)
       
  3573 	{
       
  3574 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0948 "));
       
  3575 	TLogId logId;
       
  3576 	TInt viewIndex;
       
  3577 	TLogDatabaseChangeType type;
       
  3578 
       
  3579 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  3580 	changeObs1->StartCollectingChanges();
       
  3581 
       
  3582 
       
  3583 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  3584 	CleanupStack::PushL(view);
       
  3585 
       
  3586 	CLogFilter* filter = CLogFilter::NewL();
       
  3587 	CleanupStack::PushL(filter);
       
  3588 
       
  3589 	CLogEvent* event = CLogEvent::NewL();
       
  3590 	CleanupStack::PushL(event);
       
  3591 
       
  3592 	CTestActive* active = new(ELeave)CTestActive();
       
  3593 	CleanupStack::PushL(active);
       
  3594 
       
  3595 	TTime now;
       
  3596 	now.UniversalTime();
       
  3597 	now += (TTimeIntervalDays)+1;
       
  3598 
       
  3599 	// Get rid of all the events in the log
       
  3600 	active->StartL();
       
  3601 	aClient.ClearLog(now, active->iStatus);
       
  3602 	CActiveScheduler::Start();
       
  3603 	TEST2(active->iStatus.Int(), KErrNone);
       
  3604 
       
  3605 	// Incoming call event
       
  3606 	event->SetEventType(KLogCallEventTypeUid);
       
  3607 	TBuf<KLogMaxDirectionLength> buf;
       
  3608 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  3609 	event->SetDirection(buf);
       
  3610 
       
  3611 	// Add an event
       
  3612 	active->StartL();
       
  3613 	aClient.AddEvent(*event, active->iStatus);
       
  3614 	CActiveScheduler::Start();
       
  3615 	TEST2(active->iStatus.Int(), KErrNone);
       
  3616 
       
  3617 	// Setup normal event view
       
  3618 	active->StartL();
       
  3619 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  3620 	CActiveScheduler::Start();
       
  3621 	TEST2(active->iStatus.Int(), KErrNone);
       
  3622 
       
  3623 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  3624 	changeObs2->StartCollectingChanges();
       
  3625 
       
  3626 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  3627 	CleanupStack::PushL(recent);
       
  3628 
       
  3629 	// Check recent view
       
  3630 	active->StartL();
       
  3631 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3632 	CActiveScheduler::Start();
       
  3633 	TEST2(active->iStatus.Int(), KErrNone);
       
  3634 	TEST2(recent->CountL(), 1);
       
  3635 
       
  3636 	// Add a new event
       
  3637 	active->StartL();
       
  3638 	aClient.AddEvent(*event, active->iStatus);
       
  3639 	CActiveScheduler::Start();
       
  3640 	TEST2(active->iStatus.Int(), KErrNone);
       
  3641 
       
  3642 	// Check change events
       
  3643 	CTestTimer* timer = CTestTimer::NewL();
       
  3644 	timer->After(100000);
       
  3645 	CActiveScheduler::Start();
       
  3646 	delete timer;
       
  3647 	
       
  3648 	TEST2(changeObs2->Changes().Count(), 2);
       
  3649 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  3650 	TEST2(type, ELogChangeTypeEventAdded);
       
  3651 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  3652 	TEST2(type, ELogChangeTypeEventDeleted);
       
  3653 
       
  3654 	// Check recent view
       
  3655 	active->StartL();
       
  3656 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3657 	CActiveScheduler::Start();
       
  3658 	TEST2(active->iStatus.Int(), KErrNone);
       
  3659 	TEST2(recent->CountL(), 1);
       
  3660 
       
  3661 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  3662 	CleanupStack::PushL(duplicate);
       
  3663 
       
  3664 	// Check duplicate count
       
  3665 	active->StartL();
       
  3666 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  3667 	CActiveScheduler::Start();
       
  3668 	TEST2(active->iStatus.Int(), KErrNone);
       
  3669 	TEST2(duplicate->CountL(), 1);
       
  3670 
       
  3671 	// Check change events
       
  3672 	User::After(100000);
       
  3673 	TEST2(changeObs1->Changes().Count(), 1);
       
  3674 	type = changeObs1->Changes().At(0, logId, viewIndex);
       
  3675 	TEST2(type, ELogChangeTypeEventAdded);
       
  3676 
       
  3677 	CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  3678 	}
       
  3679 
       
  3680 /**
       
  3681 @SYMTestCaseID          SYSLIB-LOGENG-CT-0949
       
  3682 @SYMTestCaseDesc	    Tests for log view change observer
       
  3683 @SYMTestPriority 	    High
       
  3684 @SYMTestActions  	    Check that a view doesn't get change events when recent list purged
       
  3685 @SYMTestExpectedResults Test must not fail
       
  3686 @SYMREQ                 REQ0000
       
  3687 */
       
  3688 LOCAL_C void TestHiddenChangeEvents2L(CLogClient& aClient)
       
  3689 	{
       
  3690 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0949 "));
       
  3691 	TLogId logId;
       
  3692 	TInt viewIndex;
       
  3693 	TLogDatabaseChangeType type;
       
  3694 
       
  3695 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  3696 	changeObs1->StartCollectingChanges();
       
  3697 
       
  3698 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  3699 	CleanupStack::PushL(view);
       
  3700 
       
  3701 	CLogFilter* filter = CLogFilter::NewL();
       
  3702 	CleanupStack::PushL(filter);
       
  3703 
       
  3704 	CLogEvent* event = CLogEvent::NewL();
       
  3705 	CleanupStack::PushL(event);
       
  3706 
       
  3707 	CTestActive* active = new(ELeave)CTestActive();
       
  3708 	CleanupStack::PushL(active);
       
  3709 
       
  3710 	TTime now;
       
  3711 	now.UniversalTime();
       
  3712 	now += (TTimeIntervalDays)+1;
       
  3713 
       
  3714 	// Get rid of all the events in the log
       
  3715 	active->StartL();
       
  3716 	aClient.ClearLog(now, active->iStatus);
       
  3717 	CActiveScheduler::Start();
       
  3718 	TEST2(active->iStatus.Int(), KErrNone);
       
  3719 
       
  3720 	// Get config
       
  3721 	TLogConfig config;
       
  3722 	active->StartL();
       
  3723 	aClient.GetConfig(config, active->iStatus);
       
  3724 	CActiveScheduler::Start();
       
  3725 	TEST2(active->iStatus.Int(), KErrNone);
       
  3726 
       
  3727 	// Incoming call event
       
  3728 	event->SetEventType(KLogCallEventTypeUid);
       
  3729 	TBuf<KLogMaxDirectionLength> buf;
       
  3730 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  3731 	event->SetDirection(buf);
       
  3732 
       
  3733 	// Add max allowed events
       
  3734 	TInt count = config.iMaxRecentLogSize;
       
  3735 	while(count--)
       
  3736 		{
       
  3737 		event->SetContact(count+1);
       
  3738 		active->StartL();
       
  3739 		aClient.AddEvent(*event, active->iStatus);
       
  3740 		CActiveScheduler::Start();
       
  3741 		TEST2(active->iStatus.Int(), KErrNone);
       
  3742 		}
       
  3743 
       
  3744 	// Setup normal event view
       
  3745 	active->StartL();
       
  3746 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  3747 	CActiveScheduler::Start();
       
  3748 	TEST2(active->iStatus.Int(), KErrNone);
       
  3749 
       
  3750 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  3751 	changeObs2->StartCollectingChanges();
       
  3752 
       
  3753 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  3754 	CleanupStack::PushL(recent);
       
  3755 
       
  3756 	// Check recent view
       
  3757 	active->StartL();
       
  3758 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3759 	CActiveScheduler::Start();
       
  3760 	TEST2(active->iStatus.Int(), KErrNone);
       
  3761 	TEST2(recent->CountL(), config.iMaxRecentLogSize);
       
  3762 
       
  3763 	// Add a new event, will cause one to be purged from recent view
       
  3764 	event->SetContact(1234);
       
  3765 	active->StartL();
       
  3766 	aClient.AddEvent(*event, active->iStatus);
       
  3767 	CActiveScheduler::Start();
       
  3768 	TEST2(active->iStatus.Int(), KErrNone);
       
  3769 
       
  3770 	// Check change events
       
  3771 	CTestTimer *timer = CTestTimer::NewL();
       
  3772  	timer->After(100000);
       
  3773  	CActiveScheduler::Start();
       
  3774  	delete timer;
       
  3775 		
       
  3776 	TEST2(changeObs2->Changes().Count(), 2);
       
  3777 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  3778 	TEST2(type, ELogChangeTypeEventAdded);
       
  3779 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  3780 	TEST2(type, ELogChangeTypeEventDeleted);
       
  3781 
       
  3782 	// Check recent view
       
  3783 	active->StartL();
       
  3784 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3785 	CActiveScheduler::Start();
       
  3786 	TEST2(active->iStatus.Int(), KErrNone);
       
  3787 	TEST2(recent->CountL(), config.iMaxRecentLogSize);
       
  3788 
       
  3789 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  3790 	CleanupStack::PushL(duplicate);
       
  3791 
       
  3792 	// Check duplicate count
       
  3793 	TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
       
  3794 
       
  3795 	// Check change events
       
  3796 	User::After(100000);
       
  3797 	TEST2(changeObs1->Changes().Count(), 1);
       
  3798 	type = changeObs1->Changes().At(0, logId, viewIndex);
       
  3799 	TEST2(type, ELogChangeTypeEventAdded);
       
  3800 
       
  3801 	CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  3802 	}
       
  3803 /**
       
  3804 @SYMTestCaseID          SYSLIB-LOGENG-CT-0950
       
  3805 @SYMTestCaseDesc	    Tests for log view change observer
       
  3806 @SYMTestPriority 	    High
       
  3807 @SYMTestActions  	    Check that a view doesn't get change events when recent list purged after changing config
       
  3808 @SYMTestExpectedResults Test must not fail
       
  3809 @SYMREQ                 REQ0000
       
  3810 */
       
  3811 LOCAL_C void TestHiddenChangeEvents3L(CLogClient& aClient)
       
  3812 	{
       
  3813 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0950 "));
       
  3814 	TLogId logId;
       
  3815 	TInt viewIndex;
       
  3816 	TLogDatabaseChangeType type;
       
  3817 
       
  3818 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  3819 	changeObs1->StartCollectingChanges();
       
  3820 
       
  3821 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  3822 	CleanupStack::PushL(view);
       
  3823 
       
  3824 	CLogFilter* filter = CLogFilter::NewL();
       
  3825 	CleanupStack::PushL(filter);
       
  3826 
       
  3827 	CLogEvent* event = CLogEvent::NewL();
       
  3828 	CleanupStack::PushL(event);
       
  3829 
       
  3830 	CTestActive* active = new(ELeave)CTestActive();
       
  3831 	CleanupStack::PushL(active);
       
  3832 
       
  3833 	TTime now;
       
  3834 	now.UniversalTime();
       
  3835 	now += (TTimeIntervalDays)+1;
       
  3836 
       
  3837 	// Get rid of all the events in the log
       
  3838 	active->StartL();
       
  3839 	aClient.ClearLog(now, active->iStatus);
       
  3840 	CActiveScheduler::Start();
       
  3841 	TEST2(active->iStatus.Int(), KErrNone);
       
  3842 
       
  3843 	// Get and set config
       
  3844 	TLogConfig config;
       
  3845 	active->StartL();
       
  3846 	aClient.GetConfig(config, active->iStatus);
       
  3847 	CActiveScheduler::Start();
       
  3848 	TEST2(active->iStatus.Int(), KErrNone);
       
  3849 	config.iMaxRecentLogSize = 2;
       
  3850 	active->StartL();
       
  3851 	aClient.ChangeConfig(config, active->iStatus);
       
  3852 	CActiveScheduler::Start();
       
  3853 	TEST2(active->iStatus.Int(), KErrNone);
       
  3854 
       
  3855 	// Incoming call event
       
  3856 	event->SetEventType(KLogCallEventTypeUid);
       
  3857 	TBuf<KLogMaxDirectionLength> buf;
       
  3858 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  3859 	event->SetDirection(buf);
       
  3860 
       
  3861 	// Add max allowed events
       
  3862 	TInt count = config.iMaxRecentLogSize;
       
  3863 	while(count--)
       
  3864 		{
       
  3865 		event->SetContact(count+1);
       
  3866 		active->StartL();
       
  3867 		aClient.AddEvent(*event, active->iStatus);
       
  3868 		CActiveScheduler::Start();
       
  3869 		TEST2(active->iStatus.Int(), KErrNone);
       
  3870 		}
       
  3871 
       
  3872 	// Setup normal event view
       
  3873 	active->StartL();
       
  3874 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  3875 	CActiveScheduler::Start();
       
  3876 	TEST2(active->iStatus.Int(), KErrNone);
       
  3877 
       
  3878 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  3879 	changeObs2->StartCollectingChanges();
       
  3880 
       
  3881 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  3882 	CleanupStack::PushL(recent);
       
  3883 
       
  3884 	// Check recent view
       
  3885 	active->StartL();
       
  3886 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3887 	CActiveScheduler::Start();
       
  3888 	TEST2(active->iStatus.Int(), KErrNone);
       
  3889 	TEST2(recent->CountL(), config.iMaxRecentLogSize);
       
  3890 
       
  3891 	// Change config, will cause one event to be purged from recent view
       
  3892 	config.iMaxRecentLogSize = 1;
       
  3893 	active->StartL();
       
  3894 	aClient.ChangeConfig(config, active->iStatus);
       
  3895 	CActiveScheduler::Start();
       
  3896 	TEST2(active->iStatus.Int(), KErrNone);
       
  3897 
       
  3898 	// Check change events
       
  3899 	User::After(100000);
       
  3900 	TEST2(changeObs2->Changes().Count(), 1);
       
  3901 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  3902 	TEST2(type, ELogChangeTypeEventDeleted);
       
  3903 
       
  3904 	// Check recent view
       
  3905 	active->StartL();
       
  3906 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  3907 	CActiveScheduler::Start();
       
  3908 	TEST2(active->iStatus.Int(), KErrNone);
       
  3909 	TEST2(recent->CountL(), config.iMaxRecentLogSize);
       
  3910 
       
  3911 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  3912 	CleanupStack::PushL(duplicate);
       
  3913 
       
  3914 	// Check duplicate count
       
  3915 	TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
       
  3916 
       
  3917 	// Check change events
       
  3918 	User::After(100000);
       
  3919 	TEST(!changeObs1->HaveChanges());
       
  3920 
       
  3921 	CleanupStack::PopAndDestroy(8); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  3922 	}
       
  3923 
       
  3924 /**
       
  3925 @SYMTestCaseID          SYSLIB-LOGENG-CT-0951
       
  3926 @SYMTestCaseDesc	    Test for log view change observer
       
  3927 @SYMTestPriority 	    High
       
  3928 @SYMTestActions  	    Check that when deleting an event causing recent lists to be updated,views don't get unnecessary change events
       
  3929 @SYMTestExpectedResults Test must not fail
       
  3930 @SYMREQ                 REQ0000
       
  3931 */
       
  3932 LOCAL_C void TestHiddenChangeEvents4L(CLogClient& aClient)
       
  3933 	{
       
  3934 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0951 "));
       
  3935 	TLogId logId;
       
  3936 	TInt viewIndex;
       
  3937 	TLogDatabaseChangeType type;
       
  3938 
       
  3939 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  3940 	changeObs1->StartCollectingChanges();
       
  3941 
       
  3942 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  3943 	CleanupStack::PushL(view);
       
  3944 
       
  3945 	CLogFilter* filter = CLogFilter::NewL();
       
  3946 	CleanupStack::PushL(filter);
       
  3947 	filter->SetFlags(1); // Need to hide an event from the view
       
  3948 
       
  3949 	CLogEvent* event = CLogEvent::NewL();
       
  3950 	CleanupStack::PushL(event);
       
  3951 
       
  3952 	CTestActive* active = new(ELeave)CTestActive();
       
  3953 	CleanupStack::PushL(active);
       
  3954 
       
  3955 	TTime now;
       
  3956 	now.UniversalTime();
       
  3957 	now += (TTimeIntervalDays)+1;
       
  3958 
       
  3959 	// Get rid of all the events in the log
       
  3960 	active->StartL();
       
  3961 	aClient.ClearLog(now, active->iStatus);
       
  3962 	CActiveScheduler::Start();
       
  3963 	TEST2(active->iStatus.Int(), KErrNone);
       
  3964 
       
  3965 	// Incoming call event
       
  3966 	event->SetEventType(KLogCallEventTypeUid);
       
  3967 	TBuf<KLogMaxDirectionLength> buf;
       
  3968 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  3969 	event->SetDirection(buf);
       
  3970 
       
  3971 	event->SetFlags(1);
       
  3972 
       
  3973 	// Add an event
       
  3974 	active->StartL();
       
  3975 	aClient.AddEvent(*event, active->iStatus);
       
  3976 	CActiveScheduler::Start();
       
  3977 	TEST2(active->iStatus.Int(), KErrNone);
       
  3978 
       
  3979 	// Add an event
       
  3980 	active->StartL();
       
  3981 	aClient.AddEvent(*event, active->iStatus);
       
  3982 	CActiveScheduler::Start();
       
  3983 	TEST2(active->iStatus.Int(), KErrNone);
       
  3984 
       
  3985 	event->ClearFlags(0xF);
       
  3986 
       
  3987 	// Add an event
       
  3988 	active->StartL();
       
  3989 	aClient.AddEvent(*event, active->iStatus);
       
  3990 	CActiveScheduler::Start();
       
  3991 	TEST2(active->iStatus.Int(), KErrNone);
       
  3992 
       
  3993 	// Setup normal event view
       
  3994 	active->StartL();
       
  3995 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  3996 	CActiveScheduler::Start();
       
  3997 	TEST2(active->iStatus.Int(), KErrNone);
       
  3998 	TEST2(view->CountL(), 2);
       
  3999 
       
  4000 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  4001 	changeObs2->StartCollectingChanges();
       
  4002 
       
  4003 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  4004 	CleanupStack::PushL(recent);
       
  4005 
       
  4006 	// Check recent view
       
  4007 	active->StartL();
       
  4008 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4009 	CActiveScheduler::Start();
       
  4010 	TEST2(active->iStatus.Int(), KErrNone);
       
  4011 	TEST2(recent->CountL(), 1);
       
  4012 
       
  4013 	changeObs1->StartCollectingChanges();
       
  4014 	changeObs2->StartCollectingChanges();
       
  4015 
       
  4016 	// Delete the event in recent list
       
  4017 	active->StartL();
       
  4018 	aClient.DeleteEvent(event->Id(), active->iStatus);
       
  4019 	CActiveScheduler::Start();
       
  4020 	TEST2(active->iStatus.Int(), KErrNone);
       
  4021 
       
  4022 	// Check change events
       
  4023 	User::After(1000000);
       
  4024 	TEST2(changeObs2->Changes().Count(), 2);
       
  4025 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  4026 	TEST2(type, ELogChangeTypeEventAdded);
       
  4027 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  4028 	TEST2(type, ELogChangeTypeEventDeleted);
       
  4029 
       
  4030 	TEST(!changeObs1->HaveChanges());
       
  4031 
       
  4032 	CleanupStack::PopAndDestroy(7); // changeObs1, changeObs2, view, filter, event, active, recent
       
  4033 	}
       
  4034 
       
  4035 /**
       
  4036 @SYMTestCaseID          SYSLIB-LOGENG-CT-0952
       
  4037 @SYMTestCaseDesc	    Tests for log view change observer
       
  4038 @SYMTestPriority 	    High
       
  4039 @SYMTestActions  	    Check that a view doesn't get change events when recent list cleared
       
  4040 @SYMTestExpectedResults Test must not fail
       
  4041 @SYMREQ                 REQ0000
       
  4042 */
       
  4043 LOCAL_C void TestHiddenChangeEvents5L(CLogClient& aClient)
       
  4044 	{
       
  4045 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0952 "));
       
  4046 	TLogId logId;
       
  4047 	TInt viewIndex;
       
  4048 	TLogDatabaseChangeType type;
       
  4049 
       
  4050 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  4051 	changeObs1->StartCollectingChanges();
       
  4052 
       
  4053 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  4054 	CleanupStack::PushL(view);
       
  4055 
       
  4056 	CLogFilter* filter = CLogFilter::NewL();
       
  4057 	CleanupStack::PushL(filter);
       
  4058 
       
  4059 	CLogEvent* event = CLogEvent::NewL();
       
  4060 	CleanupStack::PushL(event);
       
  4061 
       
  4062 	CTestActive* active = new(ELeave)CTestActive();
       
  4063 	CleanupStack::PushL(active);
       
  4064 
       
  4065 	TTime now;
       
  4066 	now.UniversalTime();
       
  4067 	now += (TTimeIntervalDays)+1;
       
  4068 
       
  4069 	// Get rid of all the events in the log
       
  4070 	active->StartL();
       
  4071 	aClient.ClearLog(now, active->iStatus);
       
  4072 	CActiveScheduler::Start();
       
  4073 	TEST2(active->iStatus.Int(), KErrNone);
       
  4074 
       
  4075 	// Get config
       
  4076 	TLogConfig config;
       
  4077 	active->StartL();
       
  4078 	aClient.GetConfig(config, active->iStatus);
       
  4079 	CActiveScheduler::Start();
       
  4080 	TEST2(active->iStatus.Int(), KErrNone);
       
  4081 
       
  4082 	// Incoming call event
       
  4083 	event->SetEventType(KLogCallEventTypeUid);
       
  4084 	TBuf<KLogMaxDirectionLength> buf;
       
  4085 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  4086 	event->SetDirection(buf);
       
  4087 
       
  4088 	// Add max allowed events
       
  4089 	TInt count = config.iMaxRecentLogSize;
       
  4090 	while(count--)
       
  4091 		{
       
  4092 		event->SetContact(count+1);
       
  4093 		active->StartL();
       
  4094 		aClient.AddEvent(*event, active->iStatus);
       
  4095 		CActiveScheduler::Start();
       
  4096 		TEST2(active->iStatus.Int(), KErrNone);
       
  4097 		}
       
  4098 
       
  4099 	// Setup normal event view
       
  4100 	active->StartL();
       
  4101 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  4102 	CActiveScheduler::Start();
       
  4103 	TEST2(active->iStatus.Int(), KErrNone);
       
  4104 
       
  4105 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  4106 	changeObs2->StartCollectingChanges();
       
  4107 
       
  4108 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  4109 	CleanupStack::PushL(recent);
       
  4110 
       
  4111 	// Check recent view
       
  4112 	active->StartL();
       
  4113 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4114 	CActiveScheduler::Start();
       
  4115 	TEST2(active->iStatus.Int(), KErrNone);
       
  4116 	TEST2(recent->CountL(), config.iMaxRecentLogSize);
       
  4117 
       
  4118 	// Clear recent view
       
  4119 	active->StartL();
       
  4120 	aClient.ClearLog(KLogRecentIncomingCalls, active->iStatus);
       
  4121 	CActiveScheduler::Start();
       
  4122 	TEST2(active->iStatus.Int(), KErrNone);
       
  4123 
       
  4124 	// Check change events
       
  4125 	User::After(100000);
       
  4126 
       
  4127 	count = config.iMaxRecentLogSize;
       
  4128 	TEST2(changeObs2->Changes().Count(), count);
       
  4129 	while(count--)
       
  4130 		{
       
  4131 		type = changeObs2->Changes().At(count, logId, viewIndex);
       
  4132 		TEST2(type, ELogChangeTypeEventDeleted);
       
  4133 		}
       
  4134 
       
  4135 	// Check recent view
       
  4136 	TEST(!recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4137 
       
  4138 	// Check change events
       
  4139 	User::After(100000);
       
  4140 	TEST(!changeObs1->HaveChanges());
       
  4141 
       
  4142 	CleanupStack::PopAndDestroy(7); // changeObs1, changeObs2, view, filter, event, active, recent
       
  4143 	}
       
  4144 
       
  4145 /**
       
  4146 @SYMTestCaseID          SYSLIB-LOGENG-CT-0953
       
  4147 @SYMTestCaseDesc	    Tests for log view change observer
       
  4148 @SYMTestPriority 	    High
       
  4149 @SYMTestActions  	    Check that a view doesn't get change events when removing events from a recent or duplicate view
       
  4150 @SYMTestExpectedResults Test must not fail
       
  4151 @SYMREQ                 REQ0000
       
  4152 */
       
  4153 LOCAL_C void TestHiddenChangeEvents6L(CLogClient& aClient)
       
  4154 	{
       
  4155 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0953 "));
       
  4156 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  4157 	changeObs1->StartCollectingChanges();
       
  4158 
       
  4159 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  4160 	CleanupStack::PushL(view);
       
  4161 
       
  4162 	CLogFilter* filter = CLogFilter::NewL();
       
  4163 	CleanupStack::PushL(filter);
       
  4164 
       
  4165 	CLogEvent* event = CLogEvent::NewL();
       
  4166 	CleanupStack::PushL(event);
       
  4167 
       
  4168 	CTestActive* active = new(ELeave)CTestActive();
       
  4169 	CleanupStack::PushL(active);
       
  4170 
       
  4171 	TTime now;
       
  4172 	now.UniversalTime();
       
  4173 	now += (TTimeIntervalDays)+1;
       
  4174 
       
  4175 	// Get rid of all the events in the log
       
  4176 	active->StartL();
       
  4177 	aClient.ClearLog(now, active->iStatus);
       
  4178 	CActiveScheduler::Start();
       
  4179 	TEST2(active->iStatus.Int(), KErrNone);
       
  4180 
       
  4181 	// Incoming call event
       
  4182 	event->SetEventType(KLogCallEventTypeUid);
       
  4183 	TBuf<KLogMaxDirectionLength> buf;
       
  4184 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  4185 	event->SetDirection(buf);
       
  4186 
       
  4187 	// Add an event
       
  4188 	active->StartL();
       
  4189 	aClient.AddEvent(*event, active->iStatus);
       
  4190 	CActiveScheduler::Start();
       
  4191 	TEST2(active->iStatus.Int(), KErrNone);
       
  4192 
       
  4193 	// Add a duplicate
       
  4194 	active->StartL();
       
  4195 	aClient.AddEvent(*event, active->iStatus);
       
  4196 	CActiveScheduler::Start();
       
  4197 	TEST2(active->iStatus.Int(), KErrNone);
       
  4198 
       
  4199 	// Setup normal event view
       
  4200 	active->StartL();
       
  4201 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  4202 	CActiveScheduler::Start();
       
  4203 	TEST2(active->iStatus.Int(), KErrNone);
       
  4204 	TEST2(view->CountL(), 2);
       
  4205 
       
  4206 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  4207 	changeObs2->StartCollectingChanges();
       
  4208 
       
  4209 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  4210 	CleanupStack::PushL(recent);
       
  4211 
       
  4212 	// Check recent view
       
  4213 	active->StartL();
       
  4214 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4215 	CActiveScheduler::Start();
       
  4216 	TEST2(active->iStatus.Int(), KErrNone);
       
  4217 	TEST2(recent->CountL(), 1);
       
  4218 
       
  4219 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  4220 	CleanupStack::PushL(duplicate);
       
  4221 
       
  4222 	// Check duplicate count
       
  4223 	active->StartL();
       
  4224 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  4225 	CActiveScheduler::Start();
       
  4226 	TEST2(active->iStatus.Int(), KErrNone);
       
  4227 	TEST2(recent->CountL(), 1);
       
  4228 
       
  4229 	// Remove duplicate
       
  4230 	duplicate->RemoveL(duplicate->Event().Id());
       
  4231 
       
  4232 	CTestTimer* timer = CTestTimer::NewL();
       
  4233 	CleanupStack::PushL(timer);
       
  4234 	timer->After(100000);
       
  4235 	CActiveScheduler::Start();
       
  4236 
       
  4237 	// Check change events
       
  4238 	TEST(!changeObs1->HaveChanges());
       
  4239 	TEST(!changeObs2->HaveChanges());
       
  4240 
       
  4241 	// Remove recent
       
  4242 	recent->RemoveL(recent->Event().Id());
       
  4243 
       
  4244 	// Check change events
       
  4245 	timer->After(100000);
       
  4246 	CActiveScheduler::Start();
       
  4247 
       
  4248 	TEST(!changeObs1->HaveChanges());
       
  4249 	TEST(!changeObs2->HaveChanges()); // No event because we should know we called Remove on ourselves
       
  4250 
       
  4251 	CleanupStack::PopAndDestroy(9); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate, timer
       
  4252 	}
       
  4253 
       
  4254 /**
       
  4255 @SYMTestCaseID          SYSLIB-LOGENG-CT-0954
       
  4256 @SYMTestCaseDesc	    Tests for log view change observer
       
  4257 @SYMTestPriority 	    High
       
  4258 @SYMTestActions  	    Check that a view doesn't get change events when clearing duplicates
       
  4259 @SYMTestExpectedResults Test must not fail
       
  4260 @SYMREQ                 REQ0000
       
  4261 */
       
  4262 LOCAL_C void TestHiddenChangeEvents7L(CLogClient& aClient)
       
  4263 	{
       
  4264 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0954 "));
       
  4265 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  4266 	changeObs1->StartCollectingChanges();
       
  4267 
       
  4268 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  4269 	CleanupStack::PushL(view);
       
  4270 
       
  4271 	CLogFilter* filter = CLogFilter::NewL();
       
  4272 	CleanupStack::PushL(filter);
       
  4273 
       
  4274 	CLogEvent* event = CLogEvent::NewL();
       
  4275 	CleanupStack::PushL(event);
       
  4276 
       
  4277 	CTestActive* active = new(ELeave)CTestActive();
       
  4278 	CleanupStack::PushL(active);
       
  4279 
       
  4280 	TTime now;
       
  4281 	now.UniversalTime();
       
  4282 	now += (TTimeIntervalDays)+1;
       
  4283 
       
  4284 	// Get rid of all the events in the log
       
  4285 	active->StartL();
       
  4286 	aClient.ClearLog(now, active->iStatus);
       
  4287 	CActiveScheduler::Start();
       
  4288 	TEST2(active->iStatus.Int(), KErrNone);
       
  4289 
       
  4290 	// Incoming call event
       
  4291 	event->SetEventType(KLogCallEventTypeUid);
       
  4292 	TBuf<KLogMaxDirectionLength> buf;
       
  4293 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  4294 	event->SetDirection(buf);
       
  4295 
       
  4296 	// Add an event
       
  4297 	active->StartL();
       
  4298 	aClient.AddEvent(*event, active->iStatus);
       
  4299 	CActiveScheduler::Start();
       
  4300 	TEST2(active->iStatus.Int(), KErrNone);
       
  4301 
       
  4302 	// Add a duplicate
       
  4303 	active->StartL();
       
  4304 	aClient.AddEvent(*event, active->iStatus);
       
  4305 	CActiveScheduler::Start();
       
  4306 	TEST2(active->iStatus.Int(), KErrNone);
       
  4307 
       
  4308 	// Setup normal event view
       
  4309 	active->StartL();
       
  4310 	TEST(view->SetFilterL(*filter, active->iStatus));
       
  4311 	CActiveScheduler::Start();
       
  4312 	TEST2(active->iStatus.Int(), KErrNone);
       
  4313 	TEST2(view->CountL(), 2);
       
  4314 
       
  4315 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  4316 	changeObs2->StartCollectingChanges();
       
  4317 
       
  4318 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  4319 	CleanupStack::PushL(recent);
       
  4320 
       
  4321 	// Check recent view
       
  4322 	active->StartL();
       
  4323 	TEST(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4324 	CActiveScheduler::Start();
       
  4325 	TEST2(active->iStatus.Int(), KErrNone);
       
  4326 	TEST2(recent->CountL(), 1);
       
  4327 
       
  4328 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  4329 	CleanupStack::PushL(duplicate);
       
  4330 
       
  4331 	// Check duplicate count
       
  4332 	active->StartL();
       
  4333 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  4334 	CActiveScheduler::Start();
       
  4335 	TEST2(active->iStatus.Int(), KErrNone);
       
  4336 	TEST2(recent->CountL(), 1);
       
  4337 
       
  4338 	// Remove duplicate
       
  4339 	recent->ClearDuplicatesL();
       
  4340 
       
  4341 	CTestTimer* timer = CTestTimer::NewL();
       
  4342 	CleanupStack::PushL(timer);
       
  4343 	timer->After(100000);
       
  4344 	CActiveScheduler::Start();
       
  4345 
       
  4346 	// Check change events
       
  4347 	TEST(!changeObs1->HaveChanges());
       
  4348 	TEST(!changeObs2->HaveChanges());
       
  4349 
       
  4350 	CleanupStack::PopAndDestroy(9); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate, timer
       
  4351 	}
       
  4352 
       
  4353 /**
       
  4354 @SYMTestCaseID          SYSLIB-LOGENG-CT-1363
       
  4355 @SYMTestCaseDesc	    Tests for log view change observer 
       
  4356 						Making a call from recent call list causes total freeze if log 
       
  4357 						has been cleared
       
  4358 @SYMTestPriority 	    High
       
  4359 @SYMTestActions  	    Test that editing a recent event does not cause a panic if 
       
  4360 						part of the log has been cleared
       
  4361 @SYMTestExpectedResults Test must not fail
       
  4362 @SYMDEF                 DEF066296
       
  4363 */
       
  4364 LOCAL_C void DEF066296L(CLogClient& aClient)
       
  4365 	{
       
  4366 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1363 "));
       
  4367 	TBuf<KLogMaxDirectionLength> buf;
       
  4368 
       
  4369 	CLogEvent* event = CLogEvent::NewL();
       
  4370 	CleanupStack::PushL(event);
       
  4371 
       
  4372 	CTestActive* active = new(ELeave)CTestActive();
       
  4373 	CleanupStack::PushL(active);
       
  4374 
       
  4375 	// To reproduce this defect, we need a view to be updated
       
  4376 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  4377 	CleanupStack::PushL(view);
       
  4378 
       
  4379 	// Set up the event and log a call from number 444
       
  4380 	event->SetEventType(KLogCallEventTypeUid);
       
  4381 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  4382 	event->SetDirection(buf);
       
  4383 	event->SetNumber(_L("444"));
       
  4384 	active->StartL();
       
  4385 	aClient.AddEvent(*event, active->iStatus);
       
  4386 	CActiveScheduler::Start();
       
  4387 	TEST2(active->iStatus.Int(), KErrNone);
       
  4388 	
       
  4389 	// Set up the view to display the recent call list
       
  4390 	active->StartL();
       
  4391 	test(view->SetRecentListL(-1, active->iStatus));
       
  4392 	CActiveScheduler::Start();
       
  4393 	TEST2(active->iStatus.Int(), KErrNone);
       
  4394 
       
  4395 	// Get and print current UTC time
       
  4396 	TTime now;
       
  4397 	now.UniversalTime();
       
  4398 	TBuf<0x80> testString;
       
  4399 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4400 	RDebug::Print(_L("Current  UTC  time    - %S\n"), &testString);
       
  4401 
       
  4402 	// Move the UTC time forward by one day
       
  4403 	now += TTimeIntervalDays(1);
       
  4404 	User::SetUTCTime(now);
       
  4405 
       
  4406 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4407 	RDebug::Print(_L("Changed  UTC  time to - %S\n"), &testString);
       
  4408 	
       
  4409 	// Set up the event and log a call from number 555
       
  4410 	event->SetNumber(_L("555"));
       
  4411 	active->StartL();
       
  4412 	aClient.AddEvent(*event, active->iStatus);
       
  4413 	CActiveScheduler::Start();
       
  4414 	TEST2(active->iStatus.Int(), KErrNone);
       
  4415 	
       
  4416 	// Set up the event and log a call from number 611
       
  4417 	event->SetNumber(_L("611"));
       
  4418 	active->StartL();
       
  4419 	aClient.AddEvent(*event, active->iStatus);
       
  4420 	CActiveScheduler::Start();
       
  4421 	TEST2(active->iStatus.Int(), KErrNone);
       
  4422 	
       
  4423 	//remember this Id - we will try to change this log event later
       
  4424 	TInt logId = event->Id();
       
  4425 
       
  4426 	// Set up the event and log a call from number 777
       
  4427 	event->SetNumber(_L("777"));
       
  4428 	active->StartL();
       
  4429 	aClient.AddEvent(*event, active->iStatus);
       
  4430 	CActiveScheduler::Start();
       
  4431 	TEST2(active->iStatus.Int(), KErrNone);
       
  4432 
       
  4433 	// Delete all events occurring before today
       
  4434 	// this should remove only the first call to number 444
       
  4435 	TDateTime midnight = now.DateTime();
       
  4436 	midnight.SetHour(0);
       
  4437 	midnight.SetMinute(0);
       
  4438 	midnight.SetSecond(0);
       
  4439 	midnight.SetMicroSecond(0);
       
  4440 
       
  4441 	active->StartL();
       
  4442 	aClient.ClearLog(midnight, active->iStatus);
       
  4443 	CActiveScheduler::Start();
       
  4444 	TEST2(active->iStatus.Int(), KErrNone);
       
  4445 
       
  4446 	// Attempt to change an entry from the recent list - that for the call to number 611 
       
  4447 	// without this defect fix, the call to ChangeEvent() will panic with EBadArrayPosition
       
  4448 	event->SetNumber(_L("555"));
       
  4449 	event->SetId(logId);
       
  4450 	active->StartL();
       
  4451 	aClient.ChangeEvent(*event, active->iStatus);
       
  4452 	CActiveScheduler::Start();
       
  4453 	TEST2(active->iStatus.Int(), KErrNone);
       
  4454 
       
  4455 	// Restore and print UTC time
       
  4456 	now.UniversalTime();
       
  4457 	now -= TTimeIntervalDays(1);
       
  4458 	User::SetUTCTime(now);
       
  4459 
       
  4460 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4461 	RDebug::Print(_L("Restored UTC  time to - %S\n"), &testString);
       
  4462 
       
  4463 	CleanupStack::PopAndDestroy(3, event); //event, active, view
       
  4464 	}
       
  4465 
       
  4466 /**
       
  4467 @SYMTestCaseID          SYSLIB-LOGENG-CT-1807
       
  4468 @SYMTestCaseDesc	    Tests that DEF087459 works between 00:00 and 01:00am hometime
       
  4469 @SYMTestPriority 	    Medium
       
  4470 @SYMTestActions  	    Change the home time to 00:30 and run DEF066296 test
       
  4471 @SYMTestExpectedResults Test must not fail
       
  4472 @SYMDEF                 DEF087459
       
  4473 */
       
  4474 LOCAL_C void DEF087459L(CLogClient& aClient)
       
  4475 	{
       
  4476 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1807 "));
       
  4477 	RTz tz;				
       
  4478 	TInt err = tz.Connect();
       
  4479 	TEST2(err, KErrNone);
       
  4480 	CleanupClosePushL(tz);
       
  4481 	TTime now, saveNow;
       
  4482 	
       
  4483 	// Get and print current home time and save it
       
  4484 	now.HomeTime();
       
  4485 	saveNow=now;
       
  4486 	
       
  4487 	TBuf<0x80> testString;
       
  4488 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4489 	RDebug::Print(_L("Current  home time    - %S\n"), &testString);
       
  4490 
       
  4491 	// Problem occurred between midnight and 01:00am hometime, so change home time to
       
  4492 	// be 00:30am
       
  4493 	TDateTime midnight = now.DateTime();
       
  4494 	midnight.SetHour(0);
       
  4495 	midnight.SetMinute(30);
       
  4496 	midnight.SetSecond(0);
       
  4497 	midnight.SetMicroSecond(0);
       
  4498 	
       
  4499 	TTime newTime=midnight;
       
  4500 
       
  4501 	err = tz.SetHomeTime(midnight);
       
  4502 	TEST2(err, KErrNone);
       
  4503 
       
  4504 	// Get and print new home time
       
  4505 	now.HomeTime();
       
  4506 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4507 	RDebug::Print(_L("Changed  home time to - %S\n"), &testString);
       
  4508 	RDebug::Print(_L("Re-running DEF066296 test\n"));
       
  4509 	
       
  4510 	DEF066296L(aClient);
       
  4511 	
       
  4512 	// Restore and print hometime
       
  4513 	err = tz.SetHomeTime(saveNow);
       
  4514 	TEST2(err, KErrNone);
       
  4515 	now.HomeTime();
       
  4516 	now.FormatL(testString,(_L("%H:%T %1\\%2\\%3 %E")));
       
  4517 	RDebug::Print(_L("Restored home time to - %S\n"), &testString);
       
  4518 	
       
  4519 	CleanupStack::PopAndDestroy(); //tz
       
  4520 	}
       
  4521 
       
  4522 /**
       
  4523 @SYMTestCaseID          SYSLIB-LOGENG-CT-0955
       
  4524 @SYMTestCaseDesc	    Tests that events can be changed to move them between recent lists
       
  4525 @SYMTestPriority 	    High
       
  4526 @SYMTestActions  	    Add the events to the view.Move most recent event to another recent list
       
  4527 @SYMTestExpectedResults Test must not fail
       
  4528 @SYMREQ                 REQ0000
       
  4529 */
       
  4530 LOCAL_C void TestChangeEventRecentView1L(CLogClient& aClient)
       
  4531 	{
       
  4532 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0955 "));
       
  4533 	CTestActive* active = new(ELeave)CTestActive();
       
  4534 	CleanupStack::PushL(active);
       
  4535 
       
  4536 	CLogEvent* event = CLogEvent::NewL();
       
  4537 	CleanupStack::PushL(event);
       
  4538 
       
  4539 	CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
       
  4540 	CleanupStack::PushL(recent1);
       
  4541 
       
  4542 	CLogViewDuplicate* duplicate1 = CLogViewDuplicate::NewL(aClient);
       
  4543 	CleanupStack::PushL(duplicate1);
       
  4544 
       
  4545 	CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
       
  4546 	CleanupStack::PushL(recent2);
       
  4547 
       
  4548 	CLogViewDuplicate* duplicate2 = CLogViewDuplicate::NewL(aClient);
       
  4549 	CleanupStack::PushL(duplicate2);
       
  4550 
       
  4551 	// Make sure there are no entries in any recent lists
       
  4552 	active->StartL();
       
  4553 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  4554 	CActiveScheduler::Start();
       
  4555 	TEST2(active->iStatus.Int(), KErrNone);
       
  4556 
       
  4557 	// Incoming call event
       
  4558 	TBuf<KLogMaxDirectionLength> incoming;
       
  4559 	aClient.GetString(incoming, R_LOG_DIR_IN);
       
  4560 
       
  4561 	// Missed call event
       
  4562 	TBuf<KLogMaxDirectionLength> missed;
       
  4563 	aClient.GetString(missed, R_LOG_DIR_MISSED);
       
  4564 
       
  4565 	event->SetEventType(KLogCallEventTypeUid);
       
  4566 	event->SetDirection(missed);
       
  4567 	event->SetContact(1);
       
  4568 
       
  4569 	// Add some events
       
  4570 	active->StartL();
       
  4571 	aClient.AddEvent(*event, active->iStatus);
       
  4572 	CActiveScheduler::Start();
       
  4573 	TEST2(active->iStatus.Int(), KErrNone);
       
  4574 	TLogId id1 = event->Id();
       
  4575 
       
  4576 	User::After(1000000);
       
  4577 
       
  4578 	active->StartL();
       
  4579 	aClient.AddEvent(*event, active->iStatus);
       
  4580 	CActiveScheduler::Start();
       
  4581 	TEST2(active->iStatus.Int(), KErrNone);
       
  4582 	TLogId id2 = event->Id();
       
  4583 
       
  4584 	User::After(1000000);
       
  4585 
       
  4586 	active->StartL();
       
  4587 	aClient.AddEvent(*event, active->iStatus);
       
  4588 	CActiveScheduler::Start();
       
  4589 	TEST2(active->iStatus.Int(), KErrNone);
       
  4590 	TLogId id3 = event->Id();
       
  4591 
       
  4592 	User::After(1000000);
       
  4593 
       
  4594 	// Most recent
       
  4595 	active->StartL();
       
  4596 	aClient.AddEvent(*event, active->iStatus);
       
  4597 	CActiveScheduler::Start();
       
  4598 	TEST2(active->iStatus.Int(), KErrNone);
       
  4599 	TLogId id4 = event->Id();
       
  4600 
       
  4601 	// Check there's a recent event in the list
       
  4602 	active->StartL();
       
  4603 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4604 	CActiveScheduler::Start();
       
  4605 	TEST2(active->iStatus.Int(), KErrNone);
       
  4606 	TEST2(recent1->CountL(), 1);
       
  4607 	TEST2(recent1->Event().Id(), id4);
       
  4608 
       
  4609 	// Check it has duplicates
       
  4610 	active->StartL();
       
  4611 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4612 	CActiveScheduler::Start();
       
  4613 	TEST2(active->iStatus.Int(), KErrNone);
       
  4614 	TEST2(duplicate1->CountL(), 3);
       
  4615 	TEST2(duplicate1->Event().Id(), id3);
       
  4616 
       
  4617 	// Check id
       
  4618 	active->StartL();
       
  4619 	TEST(duplicate1->NextL(active->iStatus));
       
  4620 	CActiveScheduler::Start();
       
  4621 	TEST2(active->iStatus.Int(), KErrNone);
       
  4622 	TEST2(duplicate1->Event().Id(), id2);
       
  4623 
       
  4624 	// Check id
       
  4625 	active->StartL();
       
  4626 	TEST(duplicate1->NextL(active->iStatus));
       
  4627 	CActiveScheduler::Start();
       
  4628 	TEST2(active->iStatus.Int(), KErrNone);
       
  4629 	TEST2(duplicate1->Event().Id(), id1);
       
  4630 
       
  4631 	// Other recent list should be empty
       
  4632 	TEST(!recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4633 
       
  4634 	// Now move most recent event to another recent list
       
  4635 	event->SetDirection(incoming);
       
  4636 	active->StartL();
       
  4637 	aClient.ChangeEvent(*event, active->iStatus);
       
  4638 	CActiveScheduler::Start();
       
  4639 	TEST2(active->iStatus.Int(), KErrNone);
       
  4640 
       
  4641 	// Most recent duplicate should now be the latest
       
  4642 	active->StartL();
       
  4643 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4644 	CActiveScheduler::Start();
       
  4645 	TEST2(active->iStatus.Int(), KErrNone);
       
  4646 	TEST2(recent1->CountL(), 1);
       
  4647 	TEST2(recent1->Event().Id(), id3);
       
  4648 	event->CopyL(recent1->Event()); // for later
       
  4649 
       
  4650 	// There should still be some duplicates
       
  4651 	active->StartL();
       
  4652 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4653 	CActiveScheduler::Start();
       
  4654 	TEST2(active->iStatus.Int(), KErrNone);
       
  4655 	TEST2(duplicate1->CountL(), 2);
       
  4656 	TEST2(duplicate1->Event().Id(), id2);
       
  4657 
       
  4658 	// Check id
       
  4659 	active->StartL();
       
  4660 	TEST(duplicate1->NextL(active->iStatus));
       
  4661 	CActiveScheduler::Start();
       
  4662 	TEST2(active->iStatus.Int(), KErrNone);
       
  4663 	TEST2(duplicate1->Event().Id(), id1);
       
  4664 
       
  4665 	// Now the event should have moved to another recent list
       
  4666 	active->StartL();
       
  4667 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4668 	CActiveScheduler::Start();
       
  4669 	TEST2(active->iStatus.Int(), KErrNone);
       
  4670 	TEST2(recent2->CountL(), 1);
       
  4671 	TEST2(recent2->Event().Id(), id4);
       
  4672 
       
  4673 	// No duplicates yet
       
  4674 	TEST(!recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4675 
       
  4676 	// Now move most recent event to another recent list
       
  4677 	event->SetDirection(incoming);
       
  4678 	active->StartL();
       
  4679 	aClient.ChangeEvent(*event, active->iStatus);
       
  4680 	CActiveScheduler::Start();
       
  4681 	TEST2(active->iStatus.Int(), KErrNone);
       
  4682 
       
  4683 	// Most recent duplicate should now be the latest
       
  4684 	active->StartL();
       
  4685 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4686 	CActiveScheduler::Start();
       
  4687 	TEST2(active->iStatus.Int(), KErrNone);
       
  4688 	TEST2(recent1->CountL(), 1);
       
  4689 	TEST2(recent1->Event().Id(), id2);
       
  4690 	event->CopyL(recent1->Event()); // for later
       
  4691 
       
  4692 	// There should still be some duplicates
       
  4693 	active->StartL();
       
  4694 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4695 	CActiveScheduler::Start();
       
  4696 	TEST2(active->iStatus.Int(), KErrNone);
       
  4697 	TEST2(duplicate1->CountL(), 1);
       
  4698 	TEST2(duplicate1->Event().Id(), id1);
       
  4699 
       
  4700 	// Now the event should have moved to another recent list
       
  4701 	active->StartL();
       
  4702 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4703 	CActiveScheduler::Start();
       
  4704 	TEST2(active->iStatus.Int(), KErrNone);
       
  4705 	TEST2(recent2->CountL(), 1);
       
  4706 	TEST2(recent2->Event().Id(), id4);
       
  4707 
       
  4708 	// There should still be some duplicates
       
  4709 	active->StartL();
       
  4710 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4711 	CActiveScheduler::Start();
       
  4712 	TEST2(active->iStatus.Int(), KErrNone);
       
  4713 	TEST2(duplicate2->CountL(), 1);
       
  4714 	TEST2(duplicate2->Event().Id(), id3);
       
  4715 
       
  4716 	// Now move most recent event to another recent list
       
  4717 	event->SetDirection(incoming);
       
  4718 	active->StartL();
       
  4719 	aClient.ChangeEvent(*event, active->iStatus);
       
  4720 	CActiveScheduler::Start();
       
  4721 	TEST2(active->iStatus.Int(), KErrNone);
       
  4722 
       
  4723 	// Most recent duplicate should now be the latest
       
  4724 	active->StartL();
       
  4725 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4726 	CActiveScheduler::Start();
       
  4727 	TEST2(active->iStatus.Int(), KErrNone);
       
  4728 	TEST2(recent1->CountL(), 1);
       
  4729 	TEST2(recent1->Event().Id(), id1);
       
  4730 	event->CopyL(recent1->Event()); // for later
       
  4731 
       
  4732 	// Should be no more duplicates
       
  4733 	TEST(!recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4734 
       
  4735 	// Now the event should have moved to another recent list
       
  4736 	active->StartL();
       
  4737 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4738 	CActiveScheduler::Start();
       
  4739 	TEST2(active->iStatus.Int(), KErrNone);
       
  4740 	TEST2(recent2->CountL(), 1);
       
  4741 	TEST2(recent2->Event().Id(), id4);
       
  4742 
       
  4743 	// There should still be some duplicates
       
  4744 	active->StartL();
       
  4745 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4746 	CActiveScheduler::Start();
       
  4747 	TEST2(active->iStatus.Int(), KErrNone);
       
  4748 	TEST2(duplicate2->CountL(), 2);
       
  4749 	TEST2(duplicate2->Event().Id(), id3);
       
  4750 
       
  4751 	// Check id
       
  4752 	active->StartL();
       
  4753 	TEST(duplicate2->NextL(active->iStatus));
       
  4754 	CActiveScheduler::Start();
       
  4755 	TEST2(active->iStatus.Int(), KErrNone);
       
  4756 	TEST2(duplicate2->Event().Id(), id2);
       
  4757 
       
  4758 	// Now move most recent event to another recent list
       
  4759 	event->SetDirection(incoming);
       
  4760 	active->StartL();
       
  4761 	aClient.ChangeEvent(*event, active->iStatus);
       
  4762 	CActiveScheduler::Start();
       
  4763 	TEST2(active->iStatus.Int(), KErrNone);
       
  4764 
       
  4765 	// No more recent events
       
  4766 	TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4767 
       
  4768 	// Now the event should have moved to another recent list
       
  4769 	active->StartL();
       
  4770 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4771 	CActiveScheduler::Start();
       
  4772 	TEST2(active->iStatus.Int(), KErrNone);
       
  4773 	TEST2(recent2->CountL(), 1);
       
  4774 	TEST2(recent2->Event().Id(), id4);
       
  4775 
       
  4776 	// There should still be some duplicates
       
  4777 	active->StartL();
       
  4778 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4779 	CActiveScheduler::Start();
       
  4780 	TEST2(active->iStatus.Int(), KErrNone);
       
  4781 	TEST2(duplicate2->CountL(), 3);
       
  4782 	TEST2(duplicate2->Event().Id(), id3);
       
  4783 
       
  4784 	// Check id
       
  4785 	active->StartL();
       
  4786 	TEST(duplicate2->NextL(active->iStatus));
       
  4787 	CActiveScheduler::Start();
       
  4788 	TEST2(active->iStatus.Int(), KErrNone);
       
  4789 	TEST2(duplicate2->Event().Id(), id2);
       
  4790 
       
  4791 	// Check id
       
  4792 	active->StartL();
       
  4793 	TEST(duplicate2->NextL(active->iStatus));
       
  4794 	CActiveScheduler::Start();
       
  4795 	TEST2(active->iStatus.Int(), KErrNone);
       
  4796 	TEST2(duplicate2->Event().Id(), id1);
       
  4797 
       
  4798 	CleanupStack::PopAndDestroy(6); // active, event, recent1, duplicate1, recent2, duplicate2
       
  4799 	}
       
  4800 
       
  4801 /**
       
  4802 Test that events can be changed to move them between recent lists
       
  4803 The same as TestChangeEventRecentView1L, but the events are transferred in reverse order
       
  4804 
       
  4805 @SYMTestCaseID          SYSLIB-LOGENG-CT-0956
       
  4806 @SYMTestCaseDesc	    Tests that events can be changed to move them between recent lists
       
  4807 @SYMTestPriority 	    High
       
  4808 @SYMTestActions  	    Add the events to the view.Move most recent event to another recent list in reverse order
       
  4809 @SYMTestExpectedResults Test must not fail
       
  4810 @SYMREQ                 REQ0000
       
  4811 */
       
  4812 LOCAL_C void TestChangeEventRecentView2L(CLogClient& aClient)
       
  4813 	{
       
  4814 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0956 "));
       
  4815 	CTestActive* active = new(ELeave)CTestActive();
       
  4816 	CleanupStack::PushL(active);
       
  4817 
       
  4818 	CLogEvent* event = CLogEvent::NewL();
       
  4819 	CleanupStack::PushL(event);
       
  4820 
       
  4821 	CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
       
  4822 	CleanupStack::PushL(recent1);
       
  4823 
       
  4824 	CLogViewDuplicate* duplicate1 = CLogViewDuplicate::NewL(aClient);
       
  4825 	CleanupStack::PushL(duplicate1);
       
  4826 
       
  4827 	CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
       
  4828 	CleanupStack::PushL(recent2);
       
  4829 
       
  4830 	CLogViewDuplicate* duplicate2 = CLogViewDuplicate::NewL(aClient);
       
  4831 	CleanupStack::PushL(duplicate2);
       
  4832 
       
  4833 	// Make sure there are no entries in any recent lists
       
  4834 	active->StartL();
       
  4835 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  4836 	CActiveScheduler::Start();
       
  4837 	TEST2(active->iStatus.Int(), KErrNone);
       
  4838 
       
  4839 	// Incoming call event
       
  4840 	TBuf<KLogMaxDirectionLength> incoming;
       
  4841 	aClient.GetString(incoming, R_LOG_DIR_IN);
       
  4842 
       
  4843 	// Missed call event
       
  4844 	TBuf<KLogMaxDirectionLength> missed;
       
  4845 	aClient.GetString(missed, R_LOG_DIR_MISSED);
       
  4846 
       
  4847 	event->SetEventType(KLogCallEventTypeUid);
       
  4848 	event->SetDirection(missed);
       
  4849 	event->SetContact(1);
       
  4850 
       
  4851 	// Add some events
       
  4852 	active->StartL();
       
  4853 	aClient.AddEvent(*event, active->iStatus);
       
  4854 	CActiveScheduler::Start();
       
  4855 	TEST2(active->iStatus.Int(), KErrNone);
       
  4856 	TLogId id1 = event->Id();
       
  4857 
       
  4858 	User::After(1000000);
       
  4859 
       
  4860 	active->StartL();
       
  4861 	aClient.AddEvent(*event, active->iStatus);
       
  4862 	CActiveScheduler::Start();
       
  4863 	TEST2(active->iStatus.Int(), KErrNone);
       
  4864 	TLogId id2 = event->Id();
       
  4865 
       
  4866 	User::After(1000000);
       
  4867 
       
  4868 	active->StartL();
       
  4869 	aClient.AddEvent(*event, active->iStatus);
       
  4870 	CActiveScheduler::Start();
       
  4871 	TEST2(active->iStatus.Int(), KErrNone);
       
  4872 	TLogId id3 = event->Id();
       
  4873 
       
  4874 	User::After(1000000);
       
  4875 
       
  4876 	// Most recent
       
  4877 	active->StartL();
       
  4878 	aClient.AddEvent(*event, active->iStatus);
       
  4879 	CActiveScheduler::Start();
       
  4880 	TEST2(active->iStatus.Int(), KErrNone);
       
  4881 	TLogId id4 = event->Id();
       
  4882 
       
  4883 	// Check there's a recent event in the list
       
  4884 	active->StartL();
       
  4885 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4886 	CActiveScheduler::Start();
       
  4887 	TEST2(active->iStatus.Int(), KErrNone);
       
  4888 	TEST2(recent1->CountL(), 1);
       
  4889 	TEST2(recent1->Event().Id(), id4);
       
  4890 
       
  4891 	// Check it has duplicates
       
  4892 	active->StartL();
       
  4893 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4894 	CActiveScheduler::Start();
       
  4895 	TEST2(active->iStatus.Int(), KErrNone);
       
  4896 	TEST2(duplicate1->CountL(), 3);
       
  4897 	TEST2(duplicate1->Event().Id(), id3);
       
  4898 
       
  4899 	// Check id
       
  4900 	active->StartL();
       
  4901 	TEST(duplicate1->NextL(active->iStatus));
       
  4902 	CActiveScheduler::Start();
       
  4903 	TEST2(active->iStatus.Int(), KErrNone);
       
  4904 	TEST2(duplicate1->Event().Id(), id2);
       
  4905 
       
  4906 	// Check id
       
  4907 	active->StartL();
       
  4908 	TEST(duplicate1->NextL(active->iStatus));
       
  4909 	CActiveScheduler::Start();
       
  4910 	TEST2(active->iStatus.Int(), KErrNone);
       
  4911 	TEST2(duplicate1->Event().Id(), id1);
       
  4912 	event->CopyL(duplicate1->Event()); // for later
       
  4913 
       
  4914 	// Other recent list should be empty
       
  4915 	TEST(!recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4916 
       
  4917 	// Now move latest recent event to another recent list
       
  4918 	event->SetDirection(incoming);
       
  4919 	active->StartL();
       
  4920 	aClient.ChangeEvent(*event, active->iStatus);
       
  4921 	CActiveScheduler::Start();
       
  4922 	TEST2(active->iStatus.Int(), KErrNone);
       
  4923 
       
  4924 	// Most recent duplicate should still be the latest
       
  4925 	active->StartL();
       
  4926 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4927 	CActiveScheduler::Start();
       
  4928 	TEST2(active->iStatus.Int(), KErrNone);
       
  4929 	TEST2(recent1->CountL(), 1);
       
  4930 	TEST2(recent1->Event().Id(), id4);
       
  4931 
       
  4932 	// There should still be some duplicates
       
  4933 	active->StartL();
       
  4934 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4935 	CActiveScheduler::Start();
       
  4936 	TEST2(active->iStatus.Int(), KErrNone);
       
  4937 	TEST2(duplicate1->CountL(), 2);
       
  4938 	TEST2(duplicate1->Event().Id(), id3);
       
  4939 
       
  4940 	// Check id
       
  4941 	active->StartL();
       
  4942 	TEST(duplicate1->NextL(active->iStatus));
       
  4943 	CActiveScheduler::Start();
       
  4944 	TEST2(active->iStatus.Int(), KErrNone);
       
  4945 	TEST2(duplicate1->Event().Id(), id2);
       
  4946 	event->CopyL(duplicate1->Event()); // for later
       
  4947 
       
  4948 	// Now the event should have moved to another recent list
       
  4949 	active->StartL();
       
  4950 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4951 	CActiveScheduler::Start();
       
  4952 	TEST2(active->iStatus.Int(), KErrNone);
       
  4953 	TEST2(recent2->CountL(), 1);
       
  4954 	TEST2(recent2->Event().Id(), id1);
       
  4955 
       
  4956 	// No duplicates yet
       
  4957 	TEST(!recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4958 
       
  4959 	// Now move most recent event to another recent list
       
  4960 	event->SetDirection(incoming);
       
  4961 	active->StartL();
       
  4962 	aClient.ChangeEvent(*event, active->iStatus);
       
  4963 	CActiveScheduler::Start();
       
  4964 	TEST2(active->iStatus.Int(), KErrNone);
       
  4965 
       
  4966 	// Most recent duplicate should still be the latest
       
  4967 	active->StartL();
       
  4968 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  4969 	CActiveScheduler::Start();
       
  4970 	TEST2(active->iStatus.Int(), KErrNone);
       
  4971 	TEST2(recent1->CountL(), 1);
       
  4972 	TEST2(recent1->Event().Id(), id4);
       
  4973 
       
  4974 	// There should still be some duplicates
       
  4975 	active->StartL();
       
  4976 	TEST(recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  4977 	CActiveScheduler::Start();
       
  4978 	TEST2(active->iStatus.Int(), KErrNone);
       
  4979 	TEST2(duplicate1->CountL(), 1);
       
  4980 	TEST2(duplicate1->Event().Id(), id3);
       
  4981 	event->CopyL(duplicate1->Event()); // for later
       
  4982 
       
  4983 	// Now the event should have moved to another recent list
       
  4984 	active->StartL();
       
  4985 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  4986 	CActiveScheduler::Start();
       
  4987 	TEST2(active->iStatus.Int(), KErrNone);
       
  4988 	TEST2(recent2->CountL(), 1);
       
  4989 	TEST2(recent2->Event().Id(), id2);
       
  4990 
       
  4991 	// There should still be some duplicates
       
  4992 	active->StartL();
       
  4993 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  4994 	CActiveScheduler::Start();
       
  4995 	TEST2(active->iStatus.Int(), KErrNone);
       
  4996 	TEST2(duplicate2->CountL(), 1);
       
  4997 	TEST2(duplicate2->Event().Id(), id1);
       
  4998 
       
  4999 	// Now move most recent event to another recent list
       
  5000 	event->SetDirection(incoming);
       
  5001 	active->StartL();
       
  5002 	aClient.ChangeEvent(*event, active->iStatus);
       
  5003 	CActiveScheduler::Start();
       
  5004 	TEST2(active->iStatus.Int(), KErrNone);
       
  5005 
       
  5006 	// Most recent duplicate should still be the latest
       
  5007 	active->StartL();
       
  5008 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5009 	CActiveScheduler::Start();
       
  5010 	TEST2(active->iStatus.Int(), KErrNone);
       
  5011 	TEST2(recent1->CountL(), 1);
       
  5012 	TEST2(recent1->Event().Id(), id4);
       
  5013 	event->CopyL(recent1->Event()); // for later
       
  5014 
       
  5015 	// Should be no more duplicates
       
  5016 	TEST(!recent1->DuplicatesL(*duplicate1, active->iStatus));
       
  5017 
       
  5018 	// Now the event should have moved to another recent list
       
  5019 	active->StartL();
       
  5020 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5021 	CActiveScheduler::Start();
       
  5022 	TEST2(active->iStatus.Int(), KErrNone);
       
  5023 	TEST2(recent2->CountL(), 1);
       
  5024 	TEST2(recent2->Event().Id(), id3);
       
  5025 
       
  5026 	// There should still be some duplicates
       
  5027 	active->StartL();
       
  5028 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  5029 	CActiveScheduler::Start();
       
  5030 	TEST2(active->iStatus.Int(), KErrNone);
       
  5031 	TEST2(duplicate2->CountL(), 2);
       
  5032 	TEST2(duplicate2->Event().Id(), id2);
       
  5033 
       
  5034 	// Check id
       
  5035 	active->StartL();
       
  5036 	TEST(duplicate2->NextL(active->iStatus));
       
  5037 	CActiveScheduler::Start();
       
  5038 	TEST2(active->iStatus.Int(), KErrNone);
       
  5039 	TEST2(duplicate2->Event().Id(), id1);
       
  5040 
       
  5041 	// Now move most recent event to another recent list
       
  5042 	event->SetDirection(incoming);
       
  5043 	active->StartL();
       
  5044 	aClient.ChangeEvent(*event, active->iStatus);
       
  5045 	CActiveScheduler::Start();
       
  5046 	TEST2(active->iStatus.Int(), KErrNone);
       
  5047 
       
  5048 	// No more recent events
       
  5049 	TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5050 
       
  5051 	// Now the event should have moved to another recent list
       
  5052 	active->StartL();
       
  5053 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5054 	CActiveScheduler::Start();
       
  5055 	TEST2(active->iStatus.Int(), KErrNone);
       
  5056 	TEST2(recent2->CountL(), 1);
       
  5057 	TEST2(recent2->Event().Id(), id4);
       
  5058 
       
  5059 	// There should still be some duplicates
       
  5060 	active->StartL();
       
  5061 	TEST(recent2->DuplicatesL(*duplicate2, active->iStatus));
       
  5062 	CActiveScheduler::Start();
       
  5063 	TEST2(active->iStatus.Int(), KErrNone);
       
  5064 	TEST2(duplicate2->CountL(), 3);
       
  5065 	TEST2(duplicate2->Event().Id(), id3);
       
  5066 
       
  5067 	// Check id
       
  5068 	active->StartL();
       
  5069 	TEST(duplicate2->NextL(active->iStatus));
       
  5070 	CActiveScheduler::Start();
       
  5071 	TEST2(active->iStatus.Int(), KErrNone);
       
  5072 	TEST2(duplicate2->Event().Id(), id2);
       
  5073 
       
  5074 	// Check id
       
  5075 	active->StartL();
       
  5076 	TEST(duplicate2->NextL(active->iStatus));
       
  5077 	CActiveScheduler::Start();
       
  5078 	TEST2(active->iStatus.Int(), KErrNone);
       
  5079 	TEST2(duplicate2->Event().Id(), id1);
       
  5080 
       
  5081 	CleanupStack::PopAndDestroy(6); // active, event, recent1, duplicate1, recent2, duplicate2
       
  5082 	}
       
  5083 
       
  5084 /**
       
  5085 @SYMTestCaseID          SYSLIB-LOGENG-CT-0957
       
  5086 @SYMTestCaseDesc	    Tests that change in log view after moving an event
       
  5087 @SYMTestPriority 	    High
       
  5088 @SYMTestActions  	    Check recent views are purged if necessary after moving an event
       
  5089 @SYMTestExpectedResults Test must not fail
       
  5090 @SYMREQ                 REQ0000
       
  5091 */
       
  5092 LOCAL_C void TestChangeEventRecentViewAndPurgeL(CLogClient& aClient)
       
  5093 	{
       
  5094 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0957 "));
       
  5095 	CTestActive* active = new(ELeave)CTestActive();
       
  5096 	CleanupStack::PushL(active);
       
  5097 
       
  5098 	CLogEvent* event = CLogEvent::NewL();
       
  5099 	CleanupStack::PushL(event);
       
  5100 
       
  5101 	CLogViewRecent* recent1 = CLogViewRecent::NewL(aClient);
       
  5102 	CleanupStack::PushL(recent1);
       
  5103 
       
  5104 	CLogViewRecent* recent2 = CLogViewRecent::NewL(aClient);
       
  5105 	CleanupStack::PushL(recent2);
       
  5106 
       
  5107 	// Make sure there are no entries in any recent lists
       
  5108 	active->StartL();
       
  5109 	aClient.ClearLog(KLogNullRecentList, active->iStatus);
       
  5110 	CActiveScheduler::Start();
       
  5111 	TEST2(active->iStatus.Int(), KErrNone);
       
  5112 
       
  5113 	// Get log config
       
  5114 	TLogConfig config;
       
  5115 	active->StartL();
       
  5116 	aClient.GetConfig(config, active->iStatus);
       
  5117 	CActiveScheduler::Start();
       
  5118 	TEST2(active->iStatus.Int(), KErrNone);
       
  5119 
       
  5120 	// Set the max recent list size to something small
       
  5121 	config.iMaxRecentLogSize = 3;
       
  5122 	active->StartL();
       
  5123 	aClient.ChangeConfig(config, active->iStatus);
       
  5124 	CActiveScheduler::Start();
       
  5125 	TEST2(active->iStatus.Int(), KErrNone);
       
  5126 
       
  5127 	// Incoming call event
       
  5128 	TBuf<KLogMaxDirectionLength> incoming;
       
  5129 	aClient.GetString(incoming, R_LOG_DIR_IN);
       
  5130 
       
  5131 	// Missed call event
       
  5132 	TBuf<KLogMaxDirectionLength> missed;
       
  5133 	aClient.GetString(missed, R_LOG_DIR_MISSED);
       
  5134 
       
  5135 	event->SetEventType(KLogCallEventTypeUid);
       
  5136 	event->SetDirection(missed);
       
  5137 
       
  5138 	// Add an event
       
  5139 	event->SetContact(1);
       
  5140 	active->StartL();
       
  5141 	aClient.AddEvent(*event, active->iStatus);
       
  5142 	CActiveScheduler::Start();
       
  5143 	TEST2(active->iStatus.Int(), KErrNone);
       
  5144 	TLogId id1 = event->Id();
       
  5145 
       
  5146 	User::After(1000000);
       
  5147 	event->SetDirection(incoming);
       
  5148 
       
  5149 	// Add an event
       
  5150 	event->SetContact(2);
       
  5151 	active->StartL();
       
  5152 	aClient.AddEvent(*event, active->iStatus);
       
  5153 	CActiveScheduler::Start();
       
  5154 	TEST2(active->iStatus.Int(), KErrNone);
       
  5155 	TLogId id2 = event->Id();
       
  5156 
       
  5157 	User::After(1000000);
       
  5158 
       
  5159 	// Add an event
       
  5160 	event->SetContact(3);
       
  5161 	active->StartL();
       
  5162 	aClient.AddEvent(*event, active->iStatus);
       
  5163 	CActiveScheduler::Start();
       
  5164 	TEST2(active->iStatus.Int(), KErrNone);
       
  5165 	TLogId id3 = event->Id();
       
  5166 
       
  5167 	User::After(1000000);
       
  5168 
       
  5169 	// Add an event
       
  5170 	event->SetContact(4);
       
  5171 	active->StartL();
       
  5172 	aClient.AddEvent(*event, active->iStatus);
       
  5173 	CActiveScheduler::Start();
       
  5174 	TEST2(active->iStatus.Int(), KErrNone);
       
  5175 	TLogId id4 = event->Id();
       
  5176 
       
  5177 	// Check the views
       
  5178 	active->StartL();
       
  5179 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5180 	CActiveScheduler::Start();
       
  5181 	TEST2(active->iStatus.Int(), KErrNone);
       
  5182 	TEST2(recent1->CountL(), 1);
       
  5183 
       
  5184 	active->StartL();
       
  5185 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5186 	CActiveScheduler::Start();
       
  5187 	TEST2(active->iStatus.Int(), KErrNone);
       
  5188 	TEST2(recent2->CountL(), 3);
       
  5189 
       
  5190 	// Retrieve event
       
  5191 	event->SetId(id1);
       
  5192 	active->StartL();
       
  5193 	aClient.GetEvent(*event, active->iStatus);
       
  5194 	CActiveScheduler::Start();
       
  5195 	TEST2(active->iStatus.Int(), KErrNone);
       
  5196 
       
  5197 	// Now move the oldest event to another recent list - it should be purged
       
  5198 	event->SetDirection(incoming);
       
  5199 	active->StartL();
       
  5200 	aClient.ChangeEvent(*event, active->iStatus);
       
  5201 	CActiveScheduler::Start();
       
  5202 	TEST2(active->iStatus.Int(), KErrNone);
       
  5203 
       
  5204 	// Missed call list now empty
       
  5205 	TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5206 
       
  5207 	// Incoming view should be unchanged
       
  5208 	active->StartL();
       
  5209 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5210 	CActiveScheduler::Start();
       
  5211 	TEST2(active->iStatus.Int(), KErrNone);
       
  5212 	TEST2(recent2->CountL(), 3);
       
  5213 	TEST2(recent2->Event().Id(), id4);
       
  5214 
       
  5215 	// Check id
       
  5216 	active->StartL();
       
  5217 	TEST(recent2->NextL(active->iStatus));
       
  5218 	CActiveScheduler::Start();
       
  5219 	TEST2(active->iStatus.Int(), KErrNone);
       
  5220 	TEST2(recent2->Event().Id(), id3);
       
  5221 
       
  5222 	// Check id
       
  5223 	active->StartL();
       
  5224 	TEST(recent2->NextL(active->iStatus));
       
  5225 	CActiveScheduler::Start();
       
  5226 	TEST2(active->iStatus.Int(), KErrNone);
       
  5227 	TEST2(recent2->Event().Id(), id2);
       
  5228 
       
  5229 	TTime now;
       
  5230 	now.UniversalTime();
       
  5231 
       
  5232 	// This should have no effect
       
  5233 	event->SetTime(now);
       
  5234 	active->StartL();
       
  5235 	aClient.ChangeEvent(*event, active->iStatus);
       
  5236 	CActiveScheduler::Start();
       
  5237 	TEST2(active->iStatus.Int(), KErrNone);
       
  5238 
       
  5239 	// Incoming view should be unchanged
       
  5240 	active->StartL();
       
  5241 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5242 	CActiveScheduler::Start();
       
  5243 	TEST2(active->iStatus.Int(), KErrNone);
       
  5244 	TEST2(recent2->CountL(), 3);
       
  5245 	TEST2(recent2->Event().Id(), id4);
       
  5246 
       
  5247 	// Check id
       
  5248 	active->StartL();
       
  5249 	TEST(recent2->NextL(active->iStatus));
       
  5250 	CActiveScheduler::Start();
       
  5251 	TEST2(active->iStatus.Int(), KErrNone);
       
  5252 	TEST2(recent2->Event().Id(), id3);
       
  5253 
       
  5254 	// Check id
       
  5255 	active->StartL();
       
  5256 	TEST(recent2->NextL(active->iStatus));
       
  5257 	CActiveScheduler::Start();
       
  5258 	TEST2(active->iStatus.Int(), KErrNone);
       
  5259 	TEST2(recent2->Event().Id(), id2);
       
  5260 
       
  5261 	// Now add a new event to missed view (the latest)
       
  5262 	User::After(1000000);
       
  5263 	event->SetDirection(missed);
       
  5264 	active->StartL();
       
  5265 	aClient.AddEvent(*event, active->iStatus);
       
  5266 	CActiveScheduler::Start();
       
  5267 	TEST2(active->iStatus.Int(), KErrNone);
       
  5268 
       
  5269 	User::After(1000000);
       
  5270 	now.UniversalTime();
       
  5271 
       
  5272 	// This should have no effect
       
  5273 	event->SetTime(now);
       
  5274 	active->StartL();
       
  5275 	aClient.ChangeEvent(*event, active->iStatus);
       
  5276 	CActiveScheduler::Start();
       
  5277 	TEST2(active->iStatus.Int(), KErrNone);
       
  5278 
       
  5279 	// Check the views
       
  5280 	active->StartL();
       
  5281 	TEST(recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5282 	CActiveScheduler::Start();
       
  5283 	TEST2(active->iStatus.Int(), KErrNone);
       
  5284 	TEST2(recent1->CountL(), 1);
       
  5285 
       
  5286 	active->StartL();
       
  5287 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5288 	CActiveScheduler::Start();
       
  5289 	TEST2(active->iStatus.Int(), KErrNone);
       
  5290 	TEST2(recent2->CountL(), 3);
       
  5291 
       
  5292 	// Now move the latest event to another recent list - oldest should be purged
       
  5293 	event->SetDirection(incoming);
       
  5294 	active->StartL();
       
  5295 	aClient.ChangeEvent(*event, active->iStatus);
       
  5296 	CActiveScheduler::Start();
       
  5297 	TEST2(active->iStatus.Int(), KErrNone);
       
  5298 
       
  5299 	TEST(!recent1->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5300 
       
  5301 	active->StartL();
       
  5302 	TEST(recent2->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5303 	CActiveScheduler::Start();
       
  5304 	TEST2(active->iStatus.Int(), KErrNone);
       
  5305 	TEST2(recent2->CountL(), 3);
       
  5306 	TEST2(recent2->Event().Id(), event->Id());
       
  5307 
       
  5308 	// Check id
       
  5309 	active->StartL();
       
  5310 	TEST(recent2->NextL(active->iStatus));
       
  5311 	CActiveScheduler::Start();
       
  5312 	TEST2(active->iStatus.Int(), KErrNone);
       
  5313 	TEST2(recent2->Event().Id(), id4);
       
  5314 
       
  5315 	// Check id
       
  5316 	active->StartL();
       
  5317 	TEST(recent2->NextL(active->iStatus));
       
  5318 	CActiveScheduler::Start();
       
  5319 	TEST2(active->iStatus.Int(), KErrNone);
       
  5320 	TEST2(recent2->Event().Id(), id3);
       
  5321 
       
  5322 	CleanupStack::PopAndDestroy(4); // active, event, recent1, recent2
       
  5323 	}
       
  5324 
       
  5325 /**
       
  5326 @SYMTestCaseID          SYSLIB-LOGENG-CT-0958
       
  5327 @SYMTestCaseDesc	    Tests for the log view,on changing an event
       
  5328 @SYMTestPriority 	    High
       
  5329 @SYMTestActions  	    Check an event can be removed from recent lists by changing it
       
  5330 @SYMTestExpectedResults Test must not fail
       
  5331 @SYMREQ                 REQ0000
       
  5332 */
       
  5333 LOCAL_C void TestChangeEventRecentViewRemoveL(CLogClient& aClient)
       
  5334 	{
       
  5335 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0958 "));
       
  5336 	CTestActive* active = new(ELeave)CTestActive();
       
  5337 	CleanupStack::PushL(active);
       
  5338 
       
  5339 	CLogEvent* event = CLogEvent::NewL();
       
  5340 	CleanupStack::PushL(event);
       
  5341 
       
  5342 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient);
       
  5343 	CleanupStack::PushL(recent);
       
  5344 
       
  5345 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  5346 	CleanupStack::PushL(duplicate);
       
  5347 
       
  5348 	// Missed call event
       
  5349 	TBuf<KLogMaxDirectionLength> missed;
       
  5350 	aClient.GetString(missed, R_LOG_DIR_MISSED);
       
  5351 
       
  5352 	event->SetEventType(KLogCallEventTypeUid);
       
  5353 	event->SetDirection(missed);
       
  5354 
       
  5355 	// Add an event
       
  5356 	event->SetContact(1);
       
  5357 	active->StartL();
       
  5358 	aClient.AddEvent(*event, active->iStatus);
       
  5359 	CActiveScheduler::Start();
       
  5360 	TEST2(active->iStatus.Int(), KErrNone);
       
  5361 	TLogId id1 = event->Id();
       
  5362 
       
  5363 	User::After(1000000);
       
  5364 
       
  5365 	// Add some duplicates
       
  5366 	active->StartL();
       
  5367 	aClient.AddEvent(*event, active->iStatus);
       
  5368 	CActiveScheduler::Start();
       
  5369 	TEST2(active->iStatus.Int(), KErrNone);
       
  5370 	TLogId id2 = event->Id();
       
  5371 
       
  5372 	User::After(1000000);
       
  5373 
       
  5374 	active->StartL();
       
  5375 	aClient.AddEvent(*event, active->iStatus);
       
  5376 	CActiveScheduler::Start();
       
  5377 	TEST2(active->iStatus.Int(), KErrNone);
       
  5378 	TLogId id3 = event->Id();
       
  5379 
       
  5380 	User::After(1000000);
       
  5381 
       
  5382 	active->StartL();
       
  5383 	aClient.AddEvent(*event, active->iStatus);
       
  5384 	CActiveScheduler::Start();
       
  5385 	TEST2(active->iStatus.Int(), KErrNone);
       
  5386 	TLogId id4 = event->Id();
       
  5387 
       
  5388 	// Check views
       
  5389 	active->StartL();
       
  5390 	TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5391 	CActiveScheduler::Start();
       
  5392 	TEST2(active->iStatus.Int(), KErrNone);
       
  5393 	TEST2(recent->CountL(), 1);
       
  5394 	TEST2(recent->Event().Id(), id4);
       
  5395 
       
  5396 	active->StartL();
       
  5397 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  5398 	CActiveScheduler::Start();
       
  5399 	TEST2(active->iStatus.Int(), KErrNone);
       
  5400 	TEST2(duplicate->CountL(), 3);
       
  5401 	TEST2(duplicate->Event().Id(), id3);
       
  5402 
       
  5403 	// Check id
       
  5404 	active->StartL();
       
  5405 	TEST(duplicate->NextL(active->iStatus));
       
  5406 	CActiveScheduler::Start();
       
  5407 	TEST2(active->iStatus.Int(), KErrNone);
       
  5408 	TEST2(duplicate->Event().Id(), id2);
       
  5409 
       
  5410 	// Check id
       
  5411 	active->StartL();
       
  5412 	TEST(duplicate->NextL(active->iStatus));
       
  5413 	CActiveScheduler::Start();
       
  5414 	TEST2(active->iStatus.Int(), KErrNone);
       
  5415 	TEST2(duplicate->Event().Id(), id1);
       
  5416 
       
  5417 	// Fetched call event
       
  5418 	TBuf<KLogMaxDirectionLength> fetched;
       
  5419 	aClient.GetString(missed, R_LOG_DIR_FETCHED);
       
  5420 
       
  5421 	// Now change the event to remove it from recent lists
       
  5422 	event->SetDirection(fetched);
       
  5423 	active->StartL();
       
  5424 	aClient.ChangeEvent(*event, active->iStatus);
       
  5425 	CActiveScheduler::Start();
       
  5426 	TEST2(active->iStatus.Int(), KErrNone);
       
  5427 
       
  5428 	// Check views
       
  5429 	active->StartL();
       
  5430 	TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5431 	CActiveScheduler::Start();
       
  5432 	TEST2(active->iStatus.Int(), KErrNone);
       
  5433 	TEST2(recent->CountL(), 1);
       
  5434 	TEST2(recent->Event().Id(), id3);
       
  5435 
       
  5436 	active->StartL();
       
  5437 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  5438 	CActiveScheduler::Start();
       
  5439 	TEST2(active->iStatus.Int(), KErrNone);
       
  5440 	TEST2(duplicate->CountL(), 2);
       
  5441 	TEST2(duplicate->Event().Id(), id2);
       
  5442 	event->CopyL(duplicate->Event()); // For later
       
  5443 
       
  5444 	// Check id
       
  5445 	active->StartL();
       
  5446 	TEST(duplicate->NextL(active->iStatus));
       
  5447 	CActiveScheduler::Start();
       
  5448 	TEST2(active->iStatus.Int(), KErrNone);
       
  5449 	TEST2(duplicate->Event().Id(), id1);
       
  5450 
       
  5451 	// Now change the event to remove it from recent lists
       
  5452 	event->SetDirection(fetched);
       
  5453 	active->StartL();
       
  5454 	aClient.ChangeEvent(*event, active->iStatus);
       
  5455 	CActiveScheduler::Start();
       
  5456 	TEST2(active->iStatus.Int(), KErrNone);
       
  5457 
       
  5458 	// Check views
       
  5459 	active->StartL();
       
  5460 	TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5461 	CActiveScheduler::Start();
       
  5462 	TEST2(active->iStatus.Int(), KErrNone);
       
  5463 	TEST2(recent->CountL(), 1);
       
  5464 	TEST2(recent->Event().Id(), id3);
       
  5465 
       
  5466 	active->StartL();
       
  5467 	TEST(recent->DuplicatesL(*duplicate, active->iStatus));
       
  5468 	CActiveScheduler::Start();
       
  5469 	TEST2(active->iStatus.Int(), KErrNone);
       
  5470 	TEST2(duplicate->CountL(), 1);
       
  5471 	TEST2(duplicate->Event().Id(), id1);
       
  5472 	event->CopyL(duplicate->Event()); // For later
       
  5473 
       
  5474 	// Now change the event to remove it from recent lists
       
  5475 	event->SetDirection(fetched);
       
  5476 	active->StartL();
       
  5477 	aClient.ChangeEvent(*event, active->iStatus);
       
  5478 	CActiveScheduler::Start();
       
  5479 	TEST2(active->iStatus.Int(), KErrNone);
       
  5480 
       
  5481 	// Check views
       
  5482 	active->StartL();
       
  5483 	TEST(recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5484 	CActiveScheduler::Start();
       
  5485 	TEST2(active->iStatus.Int(), KErrNone);
       
  5486 	TEST2(recent->CountL(), 1);
       
  5487 	TEST2(recent->Event().Id(), id3);
       
  5488 	event->CopyL(recent->Event()); // For later
       
  5489 
       
  5490 	// No more duplicates
       
  5491 	TEST(!recent->DuplicatesL(*duplicate, active->iStatus));
       
  5492 
       
  5493 	// Now change the event to remove it from recent lists
       
  5494 	event->SetDirection(fetched);
       
  5495 	active->StartL();
       
  5496 	aClient.ChangeEvent(*event, active->iStatus);
       
  5497 	CActiveScheduler::Start();
       
  5498 	TEST2(active->iStatus.Int(), KErrNone);
       
  5499 
       
  5500 	TEST(!recent->SetRecentListL(KLogRecentMissedCalls, active->iStatus));
       
  5501 
       
  5502 	CleanupStack::PopAndDestroy(4); // active, event, recent, duplicate
       
  5503 	}
       
  5504 
       
  5505 CBaBackupSessionWrapper* theBackup = NULL;
       
  5506 
       
  5507 LOCAL_C TBool IsLogOpenL()
       
  5508 	{
       
  5509 	return TestUtils::IsDatabaseOpenL();
       
  5510 	}
       
  5511 
       
  5512 LOCAL_C void TestLogOpenL()
       
  5513 	{
       
  5514 	test(IsLogOpenL());
       
  5515 	}
       
  5516 
       
  5517 LOCAL_C void TestLogClosedL()
       
  5518 	{
       
  5519 	test(!IsLogOpenL());
       
  5520 	}
       
  5521 
       
  5522 LOCAL_C void StartBackupL()
       
  5523 	{
       
  5524 	User::InfoPrint(_L("Backup"));
       
  5525 
       
  5526 	TDriveUnit driveUnit(EDriveC);
       
  5527 	TDriveName name = driveUnit.Name();
       
  5528 
       
  5529 	TParse parse;
       
  5530 	LEAVE_IF_ERROR(parse.Set(KLogDatabaseName, &name, NULL));
       
  5531 
       
  5532 	delete theBackup;
       
  5533 	theBackup = NULL;
       
  5534 	theBackup = CBaBackupSessionWrapper::NewL();
       
  5535 
       
  5536 	theBackup->CloseFileL(parse.FullName(), MBackupObserver::EReleaseLockNoAccess);
       
  5537 	User::After(1000000);
       
  5538 	}
       
  5539 
       
  5540 LOCAL_C void EndBackupL()
       
  5541 	{
       
  5542 	delete theBackup;
       
  5543 	theBackup = NULL;
       
  5544 	User::After(1000000);
       
  5545 	}
       
  5546 
       
  5547 LOCAL_C void DelayL(TInt aDelay)
       
  5548 	{
       
  5549 	CTestTimer* timer = CTestTimer::NewL();
       
  5550 	timer->After(aDelay);
       
  5551 	CActiveScheduler::Start();
       
  5552 	delete timer;
       
  5553 	}
       
  5554 
       
  5555 /**
       
  5556 @SYMTestCaseID          SYSLIB-LOGENG-CT-0959
       
  5557 @SYMTestCaseDesc	    Tests for log view change observer
       
  5558 						Test change stuff with backup
       
  5559 @SYMTestPriority 	    High
       
  5560 @SYMTestActions  	    Check that a view doesn't get change events when clearing duplicates even after backup
       
  5561 @SYMTestExpectedResults Test must not fail
       
  5562 @SYMREQ                 REQ0000
       
  5563 */
       
  5564 LOCAL_C void TestHiddenChangeEvents1aL(CLogClient& aClient)
       
  5565 	{
       
  5566 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0959 "));
       
  5567 	TLogId logId;
       
  5568 	TInt viewIndex;
       
  5569 	TLogDatabaseChangeType type;
       
  5570 
       
  5571 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  5572 	changeObs1->StartCollectingChanges();
       
  5573 
       
  5574 
       
  5575 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  5576 	CleanupStack::PushL(view);
       
  5577 
       
  5578 	CLogFilter* filter = CLogFilter::NewL();
       
  5579 	CleanupStack::PushL(filter);
       
  5580 
       
  5581 	CLogEvent* event = CLogEvent::NewL();
       
  5582 	CleanupStack::PushL(event);
       
  5583 
       
  5584 	CTestActive* active = new(ELeave)CTestActive();
       
  5585 	CleanupStack::PushL(active);
       
  5586 
       
  5587 	TTime now;
       
  5588 	now.UniversalTime();
       
  5589 	now += (TTimeIntervalDays)+1;
       
  5590 
       
  5591 	// Get rid of all the events in the log
       
  5592 	active->StartL();
       
  5593 	aClient.ClearLog(now, active->iStatus);
       
  5594 	CActiveScheduler::Start();
       
  5595 	test(active->iStatus.Int() == KErrNone);
       
  5596 
       
  5597 	// Incoming call event
       
  5598 	event->SetEventType(KLogCallEventTypeUid);
       
  5599 	TBuf<KLogMaxDirectionLength> buf;
       
  5600 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  5601 	event->SetDirection(buf);
       
  5602 
       
  5603 	// Add an event
       
  5604 	active->StartL();
       
  5605 	aClient.AddEvent(*event, active->iStatus);
       
  5606 	CActiveScheduler::Start();
       
  5607 	test(active->iStatus == KErrNone);
       
  5608 
       
  5609 	// Setup normal event view
       
  5610 	active->StartL();
       
  5611 	test(view->SetFilterL(*filter, active->iStatus));
       
  5612 	CActiveScheduler::Start();
       
  5613 	test(active->iStatus == KErrNone);
       
  5614 
       
  5615 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  5616 	changeObs2->StartCollectingChanges();
       
  5617 
       
  5618 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  5619 	CleanupStack::PushL(recent);
       
  5620 
       
  5621 	// Check recent view
       
  5622 	active->StartL();
       
  5623 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5624 	CActiveScheduler::Start();
       
  5625 	test(active->iStatus == KErrNone);
       
  5626 	test(recent->CountL() == 1);
       
  5627 
       
  5628 	// Add a new event
       
  5629 	active->StartL();
       
  5630 	aClient.AddEvent(*event, active->iStatus);
       
  5631 	CActiveScheduler::Start();
       
  5632 	test(active->iStatus == KErrNone);
       
  5633 
       
  5634 	// Check that changes work after a backup
       
  5635 	StartBackupL();
       
  5636 	DelayL(1000000);
       
  5637 	TestLogClosedL();
       
  5638 	EndBackupL();
       
  5639 	DelayL(1000000);
       
  5640 	TestLogOpenL();
       
  5641 	
       
  5642 	test(changeObs2->Changes().Count() == 2);
       
  5643 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  5644 	test(type == ELogChangeTypeEventAdded);
       
  5645 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  5646 	test(type == ELogChangeTypeEventDeleted);
       
  5647 
       
  5648 	// Check recent view
       
  5649 	active->StartL();
       
  5650 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5651 	CActiveScheduler::Start();
       
  5652 	test(active->iStatus == KErrNone);
       
  5653 	test(recent->CountL() == 1);
       
  5654 
       
  5655 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  5656 	CleanupStack::PushL(duplicate);
       
  5657 
       
  5658 	// Check duplicate count
       
  5659 	active->StartL();
       
  5660 	test(recent->DuplicatesL(*duplicate, active->iStatus));
       
  5661 	CActiveScheduler::Start();
       
  5662 	test(active->iStatus.Int() == KErrNone);
       
  5663 	test(duplicate->CountL() == 1);
       
  5664 
       
  5665 	// Check that changes work after a backup
       
  5666 	StartBackupL();
       
  5667 	DelayL(1000000);
       
  5668 	TestLogClosedL();
       
  5669 	EndBackupL();
       
  5670 	TestLogOpenL();
       
  5671 
       
  5672 	// Check change events
       
  5673 	User::After(100000);
       
  5674 	test(changeObs1->Changes().Count() == 1);
       
  5675 	type = changeObs1->Changes().At(0, logId, viewIndex);
       
  5676 	test(type == ELogChangeTypeEventAdded);
       
  5677 
       
  5678 	CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  5679 	}
       
  5680 
       
  5681 /**
       
  5682 Check that a view doesn't get change events when recent list purged
       
  5683 
       
  5684 @SYMTestCaseID          SYSLIB-LOGENG-CT-0960
       
  5685 @SYMTestCaseDesc	    Tests for log view change observer
       
  5686 @SYMTestPriority 	    High
       
  5687 @SYMTestActions  	    Check that a view doesn't get change events when recent list purged,even after backup
       
  5688 @SYMTestExpectedResults Test must not fail
       
  5689 @SYMREQ                 REQ0000
       
  5690 */
       
  5691 LOCAL_C void TestHiddenChangeEvents2aL(CLogClient& aClient)
       
  5692 	{
       
  5693 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0960 "));
       
  5694 	TLogId logId;
       
  5695 	TInt viewIndex;
       
  5696 	TLogDatabaseChangeType type;
       
  5697 
       
  5698 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  5699 	changeObs1->StartCollectingChanges();
       
  5700 
       
  5701 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  5702 	CleanupStack::PushL(view);
       
  5703 
       
  5704 	CLogFilter* filter = CLogFilter::NewL();
       
  5705 	CleanupStack::PushL(filter);
       
  5706 
       
  5707 	CLogEvent* event = CLogEvent::NewL();
       
  5708 	CleanupStack::PushL(event);
       
  5709 
       
  5710 	CTestActive* active = new(ELeave)CTestActive();
       
  5711 	CleanupStack::PushL(active);
       
  5712 
       
  5713 	TTime now;
       
  5714 	now.UniversalTime();
       
  5715 	now += (TTimeIntervalDays)+1;
       
  5716 
       
  5717 	// Get rid of all the events in the log
       
  5718 	active->StartL();
       
  5719 	aClient.ClearLog(now, active->iStatus);
       
  5720 	CActiveScheduler::Start();
       
  5721 	test(active->iStatus.Int() == KErrNone);
       
  5722 
       
  5723 	// Get config
       
  5724 	TLogConfig config;
       
  5725 	active->StartL();
       
  5726 	aClient.GetConfig(config, active->iStatus);
       
  5727 	CActiveScheduler::Start();
       
  5728 	test(active->iStatus == KErrNone);
       
  5729 
       
  5730 	// Incoming call event
       
  5731 	event->SetEventType(KLogCallEventTypeUid);
       
  5732 	TBuf<KLogMaxDirectionLength> buf;
       
  5733 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  5734 	event->SetDirection(buf);
       
  5735 
       
  5736 	// Add max allowed events
       
  5737 	TInt count = config.iMaxRecentLogSize;
       
  5738 	while(count--)
       
  5739 		{
       
  5740 		event->SetContact(count+1);
       
  5741 		active->StartL();
       
  5742 		aClient.AddEvent(*event, active->iStatus);
       
  5743 		CActiveScheduler::Start();
       
  5744 		test(active->iStatus == KErrNone);
       
  5745 		}
       
  5746 
       
  5747 	// Setup normal event view
       
  5748 	active->StartL();
       
  5749 	test(view->SetFilterL(*filter, active->iStatus));
       
  5750 	CActiveScheduler::Start();
       
  5751 	test(active->iStatus == KErrNone);
       
  5752 
       
  5753 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  5754 	changeObs2->StartCollectingChanges();
       
  5755 
       
  5756 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  5757 	CleanupStack::PushL(recent);
       
  5758 
       
  5759 	// Check recent view
       
  5760 	active->StartL();
       
  5761 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5762 	CActiveScheduler::Start();
       
  5763 	test(active->iStatus == KErrNone);
       
  5764 	test(recent->CountL() == config.iMaxRecentLogSize);
       
  5765 
       
  5766 	// Add a new event, will cause one to be purged from recent view
       
  5767 	event->SetContact(1234);
       
  5768 	active->StartL();
       
  5769 	aClient.AddEvent(*event, active->iStatus);
       
  5770 	CActiveScheduler::Start();
       
  5771 	test(active->iStatus == KErrNone);
       
  5772 
       
  5773 	// Check that changes work after a backup
       
  5774 	StartBackupL();
       
  5775 	DelayL(1000000);
       
  5776 	TestLogClosedL();
       
  5777 	EndBackupL();
       
  5778 	TestLogOpenL();
       
  5779 	DelayL(1000000);
       
  5780 		
       
  5781 	test(changeObs2->Changes().Count() == 2);
       
  5782 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  5783 	test(type == ELogChangeTypeEventAdded);
       
  5784 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  5785 	test(type == ELogChangeTypeEventDeleted);
       
  5786 
       
  5787 	// Check recent view
       
  5788 	active->StartL();
       
  5789 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5790 	CActiveScheduler::Start();
       
  5791 	test(active->iStatus == KErrNone);
       
  5792 	test(recent->CountL() == config.iMaxRecentLogSize);
       
  5793 
       
  5794 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  5795 	CleanupStack::PushL(duplicate);
       
  5796 
       
  5797 	// Check duplicate count
       
  5798 	test(!recent->DuplicatesL(*duplicate, active->iStatus));
       
  5799 
       
  5800 	// Check that changes work after a backup
       
  5801 	StartBackupL();
       
  5802 	DelayL(1000000);
       
  5803 	TestLogClosedL();
       
  5804 	EndBackupL();
       
  5805 	TestLogOpenL();
       
  5806 
       
  5807 	// Check change events
       
  5808 	User::After(100000);
       
  5809 	test(changeObs1->Changes().Count() == 1);
       
  5810 	type = changeObs1->Changes().At(0, logId, viewIndex);
       
  5811 	test(type == ELogChangeTypeEventAdded);
       
  5812 
       
  5813 	CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  5814 	}
       
  5815 
       
  5816 /**
       
  5817 Check that a view doesn't get change events when recent list purged after changing config
       
  5818 
       
  5819 @SYMTestCaseID          SYSLIB-LOGENG-CT-0961
       
  5820 @SYMTestCaseDesc	    Tests for log view change observer
       
  5821 @SYMTestPriority 	    High
       
  5822 @SYMTestActions  	    Check that a view doesn't get change events when recent list purged after changing config,even after backup
       
  5823 @SYMTestExpectedResults Test must not fail
       
  5824 @SYMREQ                 REQ0000
       
  5825 */
       
  5826 LOCAL_C void TestHiddenChangeEvents3aL(CLogClient& aClient)
       
  5827 	{
       
  5828 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0961 "));
       
  5829 	TLogId logId;
       
  5830 	TInt viewIndex;
       
  5831 	TLogDatabaseChangeType type;
       
  5832 
       
  5833 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  5834 	changeObs1->StartCollectingChanges();
       
  5835 
       
  5836 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  5837 	CleanupStack::PushL(view);
       
  5838 
       
  5839 	CLogFilter* filter = CLogFilter::NewL();
       
  5840 	CleanupStack::PushL(filter);
       
  5841 
       
  5842 	CLogEvent* event = CLogEvent::NewL();
       
  5843 	CleanupStack::PushL(event);
       
  5844 
       
  5845 	CTestActive* active = new(ELeave)CTestActive();
       
  5846 	CleanupStack::PushL(active);
       
  5847 
       
  5848 	TTime now;
       
  5849 	now.UniversalTime();
       
  5850 	now += (TTimeIntervalDays)+1;
       
  5851 
       
  5852 	// Get rid of all the events in the log
       
  5853 	active->StartL();
       
  5854 	aClient.ClearLog(now, active->iStatus);
       
  5855 	CActiveScheduler::Start();
       
  5856 	test(active->iStatus.Int() == KErrNone);
       
  5857 
       
  5858 	// Get and set config
       
  5859 	TLogConfig config;
       
  5860 	active->StartL();
       
  5861 	aClient.GetConfig(config, active->iStatus);
       
  5862 	CActiveScheduler::Start();
       
  5863 	test(active->iStatus == KErrNone);
       
  5864 	config.iMaxRecentLogSize = 2;
       
  5865 	active->StartL();
       
  5866 	aClient.ChangeConfig(config, active->iStatus);
       
  5867 	CActiveScheduler::Start();
       
  5868 	test(active->iStatus == KErrNone);
       
  5869 
       
  5870 	// Incoming call event
       
  5871 	event->SetEventType(KLogCallEventTypeUid);
       
  5872 	TBuf<KLogMaxDirectionLength> buf;
       
  5873 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  5874 	event->SetDirection(buf);
       
  5875 
       
  5876 	// Add max allowed events
       
  5877 	TInt count = config.iMaxRecentLogSize;
       
  5878 	while(count--)
       
  5879 		{
       
  5880 		event->SetContact(count+1);
       
  5881 		active->StartL();
       
  5882 		aClient.AddEvent(*event, active->iStatus);
       
  5883 		CActiveScheduler::Start();
       
  5884 		test(active->iStatus == KErrNone);
       
  5885 		}
       
  5886 
       
  5887 	// Setup normal event view
       
  5888 	active->StartL();
       
  5889 	test(view->SetFilterL(*filter, active->iStatus));
       
  5890 	CActiveScheduler::Start();
       
  5891 	test(active->iStatus == KErrNone);
       
  5892 
       
  5893 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  5894 	changeObs2->StartCollectingChanges();
       
  5895 
       
  5896 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  5897 	CleanupStack::PushL(recent);
       
  5898 
       
  5899 	// Check recent view
       
  5900 	active->StartL();
       
  5901 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5902 	CActiveScheduler::Start();
       
  5903 	test(active->iStatus == KErrNone);
       
  5904 	test(recent->CountL() == config.iMaxRecentLogSize);
       
  5905 
       
  5906 	// Change config, will cause one event to be purged from recent view
       
  5907 	config.iMaxRecentLogSize = 1;
       
  5908 	active->StartL();
       
  5909 	aClient.ChangeConfig(config, active->iStatus);
       
  5910 	CActiveScheduler::Start();
       
  5911 	test(active->iStatus == KErrNone);
       
  5912 
       
  5913 	// Check that changes work after a backup
       
  5914 	StartBackupL();
       
  5915 	DelayL(1000000);
       
  5916 	TestLogClosedL();
       
  5917 	EndBackupL();
       
  5918 	TestLogOpenL();
       
  5919 	DelayL(1000000);
       
  5920 
       
  5921 	// Check change events
       
  5922 	User::After(100000);
       
  5923 	test(changeObs2->Changes().Count() == 1);
       
  5924 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  5925 	test(type == ELogChangeTypeEventDeleted);
       
  5926 
       
  5927 	// Check recent view
       
  5928 	active->StartL();
       
  5929 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  5930 	CActiveScheduler::Start();
       
  5931 	test(active->iStatus == KErrNone);
       
  5932 	test(recent->CountL() == config.iMaxRecentLogSize);
       
  5933 
       
  5934 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  5935 	CleanupStack::PushL(duplicate);
       
  5936 
       
  5937 	// Check duplicate count
       
  5938 	test(!recent->DuplicatesL(*duplicate, active->iStatus));
       
  5939 
       
  5940 	// Check that changes work after a backup
       
  5941 	StartBackupL();
       
  5942 	DelayL(1000000);
       
  5943 	TestLogClosedL();
       
  5944 	EndBackupL();
       
  5945 	TestLogOpenL();
       
  5946 
       
  5947 	// Check change events
       
  5948 	User::After(100000);
       
  5949 	test(!changeObs1->HaveChanges());
       
  5950 
       
  5951 	CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  5952 	}
       
  5953 
       
  5954 /**
       
  5955 Check that when deleting an event causing recent lists to be updated, views don't get unnecessary change events
       
  5956 
       
  5957 @SYMTestCaseID          SYSLIB-LOGENG-CT-0962
       
  5958 @SYMTestCaseDesc	    Tests for log view change observer
       
  5959 @SYMTestPriority 	    High
       
  5960 @SYMTestActions  	    Check that when deleting an event causing recent lists to be updated,views don't get unnecessary change events.
       
  5961                         Check the test work even after backup operations
       
  5962 @SYMTestExpectedResults Test must not fail
       
  5963 @SYMREQ                 REQ0000
       
  5964 */
       
  5965 LOCAL_C void TestHiddenChangeEvents4aL(CLogClient& aClient)
       
  5966 	{
       
  5967 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0962 "));
       
  5968 	TLogId logId;
       
  5969 	TInt viewIndex;
       
  5970 	TLogDatabaseChangeType type;
       
  5971 
       
  5972 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  5973 	changeObs1->StartCollectingChanges();
       
  5974 
       
  5975 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  5976 	CleanupStack::PushL(view);
       
  5977 
       
  5978 	CLogFilter* filter = CLogFilter::NewL();
       
  5979 	CleanupStack::PushL(filter);
       
  5980 	filter->SetFlags(1); // Need to hide an event from the view
       
  5981 
       
  5982 	CLogEvent* event = CLogEvent::NewL();
       
  5983 	CleanupStack::PushL(event);
       
  5984 
       
  5985 	CTestActive* active = new(ELeave)CTestActive();
       
  5986 	CleanupStack::PushL(active);
       
  5987 
       
  5988 	TTime now;
       
  5989 	now.UniversalTime();
       
  5990 	now += (TTimeIntervalDays)+1;
       
  5991 
       
  5992 	// Get rid of all the events in the log
       
  5993 	active->StartL();
       
  5994 	aClient.ClearLog(now, active->iStatus);
       
  5995 	CActiveScheduler::Start();
       
  5996 	test(active->iStatus.Int() == KErrNone);
       
  5997 
       
  5998 	// Incoming call event
       
  5999 	event->SetEventType(KLogCallEventTypeUid);
       
  6000 	TBuf<KLogMaxDirectionLength> buf;
       
  6001 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  6002 	event->SetDirection(buf);
       
  6003 
       
  6004 	event->SetFlags(1);
       
  6005 
       
  6006 	// Add an event
       
  6007 	active->StartL();
       
  6008 	aClient.AddEvent(*event, active->iStatus);
       
  6009 	CActiveScheduler::Start();
       
  6010 	test(active->iStatus == KErrNone);
       
  6011 
       
  6012 	// Add an event
       
  6013 	active->StartL();
       
  6014 	aClient.AddEvent(*event, active->iStatus);
       
  6015 	CActiveScheduler::Start();
       
  6016 	test(active->iStatus == KErrNone);
       
  6017 
       
  6018 	event->ClearFlags(0xF);
       
  6019 
       
  6020 	// Add an event
       
  6021 	active->StartL();
       
  6022 	aClient.AddEvent(*event, active->iStatus);
       
  6023 	CActiveScheduler::Start();
       
  6024 	test(active->iStatus == KErrNone);
       
  6025 
       
  6026 	// Setup normal event view
       
  6027 	active->StartL();
       
  6028 	test(view->SetFilterL(*filter, active->iStatus));
       
  6029 	CActiveScheduler::Start();
       
  6030 	test(active->iStatus == KErrNone);
       
  6031 	test(view->CountL() == 2);
       
  6032 
       
  6033 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  6034 	changeObs2->StartCollectingChanges();
       
  6035 
       
  6036 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  6037 	CleanupStack::PushL(recent);
       
  6038 
       
  6039 	// Check recent view
       
  6040 	active->StartL();
       
  6041 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  6042 	CActiveScheduler::Start();
       
  6043 	test(active->iStatus == KErrNone);
       
  6044 	test(recent->CountL() == 1);
       
  6045 
       
  6046 	changeObs1->StartCollectingChanges();
       
  6047 	changeObs2->StartCollectingChanges();
       
  6048 
       
  6049 	// Delete the event in recent list
       
  6050 	active->StartL();
       
  6051 	aClient.DeleteEvent(event->Id(), active->iStatus);
       
  6052 	CActiveScheduler::Start();
       
  6053 	test(active->iStatus == KErrNone);
       
  6054 
       
  6055 	// Check that changes work after a backup
       
  6056 	StartBackupL();
       
  6057 	DelayL(1000000);
       
  6058 	TestLogClosedL();
       
  6059 	EndBackupL();
       
  6060 	TestLogOpenL();
       
  6061 
       
  6062 	// Check change events
       
  6063 	test(changeObs2->Changes().Count() == 2);
       
  6064 	type = changeObs2->Changes().At(0, logId, viewIndex);
       
  6065 	test(type == ELogChangeTypeEventAdded);
       
  6066 	type = changeObs2->Changes().At(1, logId, viewIndex);
       
  6067 	test(type == ELogChangeTypeEventDeleted);
       
  6068 
       
  6069 	test(!changeObs1->HaveChanges());
       
  6070 
       
  6071 	CleanupStack::PopAndDestroy(7, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent
       
  6072 	}
       
  6073 
       
  6074 /**
       
  6075 @SYMTestCaseID          SYSLIB-LOGENG-CT-0963
       
  6076 @SYMTestCaseDesc	    Tests for log view change observer
       
  6077 @SYMTestPriority 	    High
       
  6078 @SYMTestActions  	    Check that a view doesn't get change events when recent list cleared
       
  6079                         Check the test work even after backup operations
       
  6080 @SYMTestExpectedResults Test must not fail
       
  6081 @SYMREQ                 REQ0000
       
  6082 */
       
  6083 LOCAL_C void TestHiddenChangeEvents5aL(CLogClient& aClient)
       
  6084 	{
       
  6085 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0963 "));
       
  6086 	TLogId logId;
       
  6087 	TInt viewIndex;
       
  6088 	TLogDatabaseChangeType type;
       
  6089 
       
  6090 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  6091 	changeObs1->StartCollectingChanges();
       
  6092 
       
  6093 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  6094 	CleanupStack::PushL(view);
       
  6095 
       
  6096 	CLogFilter* filter = CLogFilter::NewL();
       
  6097 	CleanupStack::PushL(filter);
       
  6098 
       
  6099 	CLogEvent* event = CLogEvent::NewL();
       
  6100 	CleanupStack::PushL(event);
       
  6101 
       
  6102 	CTestActive* active = new(ELeave)CTestActive();
       
  6103 	CleanupStack::PushL(active);
       
  6104 
       
  6105 	TTime now;
       
  6106 	now.UniversalTime();
       
  6107 	now += (TTimeIntervalDays)+1;
       
  6108 
       
  6109 	// Get rid of all the events in the log
       
  6110 	active->StartL();
       
  6111 	aClient.ClearLog(now, active->iStatus);
       
  6112 	CActiveScheduler::Start();
       
  6113 	test(active->iStatus.Int() == KErrNone);
       
  6114 
       
  6115 	// Get config
       
  6116 	TLogConfig config;
       
  6117 	active->StartL();
       
  6118 	aClient.GetConfig(config, active->iStatus);
       
  6119 	CActiveScheduler::Start();
       
  6120 	test(active->iStatus == KErrNone);
       
  6121 
       
  6122 	// Incoming call event
       
  6123 	event->SetEventType(KLogCallEventTypeUid);
       
  6124 	TBuf<KLogMaxDirectionLength> buf;
       
  6125 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  6126 	event->SetDirection(buf);
       
  6127 
       
  6128 	// Add max allowed events
       
  6129 	TInt count = config.iMaxRecentLogSize;
       
  6130 	while(count--)
       
  6131 		{
       
  6132 		event->SetContact(count+1);
       
  6133 		active->StartL();
       
  6134 		aClient.AddEvent(*event, active->iStatus);
       
  6135 		CActiveScheduler::Start();
       
  6136 		test(active->iStatus == KErrNone);
       
  6137 		}
       
  6138 
       
  6139 	// Setup normal event view
       
  6140 	active->StartL();
       
  6141 	test(view->SetFilterL(*filter, active->iStatus));
       
  6142 	CActiveScheduler::Start();
       
  6143 	test(active->iStatus == KErrNone);
       
  6144 
       
  6145 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  6146 	changeObs2->StartCollectingChanges();
       
  6147 
       
  6148 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  6149 	CleanupStack::PushL(recent);
       
  6150 
       
  6151 	// Check recent view
       
  6152 	active->StartL();
       
  6153 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  6154 	CActiveScheduler::Start();
       
  6155 	test(active->iStatus == KErrNone);
       
  6156 	test(recent->CountL() == config.iMaxRecentLogSize);
       
  6157 
       
  6158 	// Clear recent view
       
  6159 	active->StartL();
       
  6160 	aClient.ClearLog(KLogRecentIncomingCalls, active->iStatus);
       
  6161 	CActiveScheduler::Start();
       
  6162 	test(active->iStatus == KErrNone);
       
  6163 
       
  6164 	// Check that changes work after a backup
       
  6165 	StartBackupL();
       
  6166 	DelayL(1000000);
       
  6167 	TestLogClosedL();
       
  6168 	EndBackupL();
       
  6169 	TestLogOpenL();
       
  6170 
       
  6171 	count = config.iMaxRecentLogSize;
       
  6172 	test(changeObs2->Changes().Count() == count);
       
  6173 	while(count--)
       
  6174 		{
       
  6175 		type = changeObs2->Changes().At(count, logId, viewIndex);
       
  6176 		test(type == ELogChangeTypeEventDeleted);
       
  6177 		}
       
  6178 
       
  6179 	// Check recent view
       
  6180 	test(!recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  6181 
       
  6182 	// Check that changes work after a backup
       
  6183 	StartBackupL();
       
  6184 	DelayL(1000000);
       
  6185 	TestLogClosedL();
       
  6186 	EndBackupL();
       
  6187 	TestLogOpenL();
       
  6188 
       
  6189 	// Check change events
       
  6190 	User::After(100000);
       
  6191 	test(!changeObs1->HaveChanges());
       
  6192 
       
  6193 	CleanupStack::PopAndDestroy(7, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent
       
  6194 	}
       
  6195 
       
  6196 /**
       
  6197 @SYMTestCaseID          SYSLIB-LOGENG-CT-0964
       
  6198 @SYMTestCaseDesc	    Tests for log view change observer
       
  6199 @SYMTestPriority 	    High
       
  6200 @SYMTestActions  	    Check that a view doesn't get change events when removing events from a recent or duplicate view
       
  6201                         Check the test work even after backup operations
       
  6202 @SYMTestExpectedResults Test must not fail
       
  6203 @SYMREQ                 REQ0000
       
  6204 */
       
  6205 LOCAL_C void TestHiddenChangeEvents6aL(CLogClient& aClient)
       
  6206 	{
       
  6207 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0964 "));
       
  6208 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  6209 	changeObs1->StartCollectingChanges();
       
  6210 
       
  6211 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  6212 	CleanupStack::PushL(view);
       
  6213 
       
  6214 	CLogFilter* filter = CLogFilter::NewL();
       
  6215 	CleanupStack::PushL(filter);
       
  6216 
       
  6217 	CLogEvent* event = CLogEvent::NewL();
       
  6218 	CleanupStack::PushL(event);
       
  6219 
       
  6220 	CTestActive* active = new(ELeave)CTestActive();
       
  6221 	CleanupStack::PushL(active);
       
  6222 
       
  6223 	TTime now;
       
  6224 	now.UniversalTime();
       
  6225 	now += (TTimeIntervalDays)+1;
       
  6226 
       
  6227 	// Get rid of all the events in the log
       
  6228 	active->StartL();
       
  6229 	aClient.ClearLog(now, active->iStatus);
       
  6230 	CActiveScheduler::Start();
       
  6231 	test(active->iStatus.Int() == KErrNone);
       
  6232 
       
  6233 	// Incoming call event
       
  6234 	event->SetEventType(KLogCallEventTypeUid);
       
  6235 	TBuf<KLogMaxDirectionLength> buf;
       
  6236 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  6237 	event->SetDirection(buf);
       
  6238 
       
  6239 	// Add an event
       
  6240 	active->StartL();
       
  6241 	aClient.AddEvent(*event, active->iStatus);
       
  6242 	CActiveScheduler::Start();
       
  6243 	test(active->iStatus == KErrNone);
       
  6244 
       
  6245 	// Add a duplicate
       
  6246 	active->StartL();
       
  6247 	aClient.AddEvent(*event, active->iStatus);
       
  6248 	CActiveScheduler::Start();
       
  6249 	test(active->iStatus == KErrNone);
       
  6250 
       
  6251 	// Setup normal event view
       
  6252 	active->StartL();
       
  6253 	test(view->SetFilterL(*filter, active->iStatus));
       
  6254 	CActiveScheduler::Start();
       
  6255 	test(active->iStatus == KErrNone);
       
  6256 	test(view->CountL() == 2);
       
  6257 
       
  6258 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  6259 	changeObs2->StartCollectingChanges();
       
  6260 
       
  6261 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  6262 	CleanupStack::PushL(recent);
       
  6263 
       
  6264 	// Check recent view
       
  6265 	active->StartL();
       
  6266 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  6267 	CActiveScheduler::Start();
       
  6268 	test(active->iStatus == KErrNone);
       
  6269 	test(recent->CountL() == 1);
       
  6270 
       
  6271 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  6272 	CleanupStack::PushL(duplicate);
       
  6273 
       
  6274 	// Check duplicate count
       
  6275 	active->StartL();
       
  6276 	test(recent->DuplicatesL(*duplicate, active->iStatus));
       
  6277 	CActiveScheduler::Start();
       
  6278 	test(active->iStatus == KErrNone);
       
  6279 	test(recent->CountL() == 1);
       
  6280 
       
  6281 	// Remove duplicate
       
  6282 	duplicate->RemoveL(duplicate->Event().Id());
       
  6283 
       
  6284 	// Check that changes work after a backup
       
  6285 	StartBackupL();
       
  6286 	DelayL(1000000);
       
  6287 	TestLogClosedL();
       
  6288 	EndBackupL();
       
  6289 	TestLogOpenL();
       
  6290 
       
  6291 	// Check change events
       
  6292 	test(!changeObs1->HaveChanges());
       
  6293 	test(!changeObs2->HaveChanges());
       
  6294 
       
  6295 	// Remove recent
       
  6296 	recent->RemoveL(recent->Event().Id());
       
  6297 
       
  6298 	// Check that changes work after a backup
       
  6299 	StartBackupL();
       
  6300 	DelayL(1000000);
       
  6301 	TestLogClosedL();
       
  6302 	EndBackupL();
       
  6303 	TestLogOpenL();
       
  6304 
       
  6305 	test(!changeObs1->HaveChanges());
       
  6306 	test(!changeObs2->HaveChanges()); // No event because we should know we called Remove on ourselves
       
  6307 
       
  6308 	CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  6309 	}
       
  6310 
       
  6311 /**
       
  6312 @SYMTestCaseID          SYSLIB-LOGENG-CT-0965
       
  6313 @SYMTestCaseDesc	    Tests for log view change observer
       
  6314 @SYMTestPriority 	    High
       
  6315 @SYMTestActions  	    Check that a view doesn't get change events when clearing duplicates
       
  6316                         Check the test work even after backup operations
       
  6317 @SYMTestExpectedResults Test must not fail
       
  6318 @SYMREQ                 REQ0000
       
  6319 */
       
  6320 LOCAL_C void TestHiddenChangeEvents7aL(CLogClient& aClient)
       
  6321 	{
       
  6322 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0965 "));
       
  6323 	CLogViewChangeObserver* changeObs1 = CLogViewChangeObserver::NewLC();
       
  6324 	changeObs1->StartCollectingChanges();
       
  6325 
       
  6326 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs1);
       
  6327 	CleanupStack::PushL(view);
       
  6328 
       
  6329 	CLogFilter* filter = CLogFilter::NewL();
       
  6330 	CleanupStack::PushL(filter);
       
  6331 
       
  6332 	CLogEvent* event = CLogEvent::NewL();
       
  6333 	CleanupStack::PushL(event);
       
  6334 
       
  6335 	CTestActive* active = new(ELeave)CTestActive();
       
  6336 	CleanupStack::PushL(active);
       
  6337 
       
  6338 	TTime now;
       
  6339 	now.UniversalTime();
       
  6340 	now += (TTimeIntervalDays)+1;
       
  6341 
       
  6342 	// Get rid of all the events in the log
       
  6343 	active->StartL();
       
  6344 	aClient.ClearLog(now, active->iStatus);
       
  6345 	CActiveScheduler::Start();
       
  6346 	test(active->iStatus.Int() == KErrNone);
       
  6347 
       
  6348 	// Incoming call event
       
  6349 	event->SetEventType(KLogCallEventTypeUid);
       
  6350 	TBuf<KLogMaxDirectionLength> buf;
       
  6351 	aClient.GetString(buf, R_LOG_DIR_IN);
       
  6352 	event->SetDirection(buf);
       
  6353 
       
  6354 	// Add an event
       
  6355 	active->StartL();
       
  6356 	aClient.AddEvent(*event, active->iStatus);
       
  6357 	CActiveScheduler::Start();
       
  6358 	test(active->iStatus == KErrNone);
       
  6359 
       
  6360 	// Add a duplicate
       
  6361 	active->StartL();
       
  6362 	aClient.AddEvent(*event, active->iStatus);
       
  6363 	CActiveScheduler::Start();
       
  6364 	test(active->iStatus == KErrNone);
       
  6365 
       
  6366 	// Setup normal event view
       
  6367 	active->StartL();
       
  6368 	test(view->SetFilterL(*filter, active->iStatus));
       
  6369 	CActiveScheduler::Start();
       
  6370 	test(active->iStatus == KErrNone);
       
  6371 	test(view->CountL() == 2);
       
  6372 
       
  6373 	CLogViewChangeObserver* changeObs2 = CLogViewChangeObserver::NewLC();
       
  6374 	changeObs2->StartCollectingChanges();
       
  6375 
       
  6376 	CLogViewRecent* recent = CLogViewRecent::NewL(aClient, *changeObs2);
       
  6377 	CleanupStack::PushL(recent);
       
  6378 
       
  6379 	// Check recent view
       
  6380 	active->StartL();
       
  6381 	test(recent->SetRecentListL(KLogRecentIncomingCalls, active->iStatus));
       
  6382 	CActiveScheduler::Start();
       
  6383 	test(active->iStatus == KErrNone);
       
  6384 	test(recent->CountL() == 1);
       
  6385 
       
  6386 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  6387 	CleanupStack::PushL(duplicate);
       
  6388 
       
  6389 	// Check duplicate count
       
  6390 	active->StartL();
       
  6391 	test(recent->DuplicatesL(*duplicate, active->iStatus));
       
  6392 	CActiveScheduler::Start();
       
  6393 	test(active->iStatus == KErrNone);
       
  6394 	test(recent->CountL() == 1);
       
  6395 
       
  6396 	// Remove duplicate
       
  6397 	recent->ClearDuplicatesL();
       
  6398 
       
  6399 	// Check that changes work after a backup
       
  6400 	StartBackupL();
       
  6401 	DelayL(1000000);
       
  6402 	TestLogClosedL();
       
  6403 	EndBackupL();
       
  6404 	TestLogOpenL();
       
  6405 
       
  6406 	// Check change events
       
  6407 	test(!changeObs1->HaveChanges());
       
  6408 	test(!changeObs2->HaveChanges());
       
  6409 
       
  6410 	CleanupStack::PopAndDestroy(8, changeObs1); // changeObs1, changeObs2, view, filter, event, active, recent, duplicate
       
  6411 	}
       
  6412 	
       
  6413 /**
       
  6414 @SYMTestCaseID          SYSLIB-LOGENG-CT-3511
       
  6415 @SYMTestCaseDesc	    Tests an error condition for adding an event.                       
       
  6416 @SYMTestPriority 	    High
       
  6417 @SYMTestActions  	    A leave will be caused in an observer when a specific event is added. This test 
       
  6418                         ensures by successful test completion that there are no panics in this 
       
  6419                         situation.
       
  6420 @SYMTestExpectedResults Test must not fail
       
  6421 @SYMDEF                 DEF108741
       
  6422 */
       
  6423 LOCAL_C void DEF108741L(CLogClient& aClient)
       
  6424 	{
       
  6425 	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3511 "));
       
  6426 	// Perform clean up
       
  6427  	TestUtils::DeleteDatabaseL();
       
  6428 
       
  6429 	// Create a new event 
       
  6430 	CLogEvent* event = CLogEvent::NewL();
       
  6431 	CleanupStack::PushL(event);
       
  6432 	event->SetEventType(KLogCallEventTypeUid);
       
  6433 
       
  6434 	CTestActive* active = new(ELeave) CTestActive();
       
  6435 	CleanupStack::PushL(active);
       
  6436 
       
  6437 	// Create a change observer. This observer will cause errors in order to verify that 
       
  6438 	// the system handles them properly.
       
  6439 	CLogViewChangeObserverErrorTest* changeObs = CLogViewChangeObserverErrorTest::NewLC();
       
  6440 
       
  6441 	// Create a view for the event log  
       
  6442 	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs);
       
  6443 	CleanupStack::PushL(view);
       
  6444 	
       
  6445 	// Create a filter to specify what events appear in the view
       
  6446 	CLogFilter* filter = CLogFilter::NewL();
       
  6447 	CleanupStack::PushL(filter);
       
  6448 	TEST(!view->SetFilterL(*filter, active->iStatus));
       
  6449 	 
       
  6450 	TInt count;
       
  6451 	TLogId logId;
       
  6452 	TInt viewIndex;
       
  6453  
       
  6454  	// This code adds 3 events with ids 0,1 and 2.
       
  6455  	// The observer add event handler :
       
  6456  	// CLogViewChangeObserverErrorTest::HandleLogViewChangeEventAddedL
       
  6457  	// has been written so that it will leave if an event with log id 1 is added.
       
  6458  	// The test completion proves that the leave is dealt with gracefully without 
       
  6459  	// any panics.
       
  6460 	for(count = 0; count < KTestErrorEventNum; count++)
       
  6461 		{
       
  6462 		// Add an event to the log database
       
  6463 		aClient.AddEvent(*event, changeObs->iStatus);
       
  6464 		CLogChangeDefinition* changes = changeObs->WaitForChangesLC(CLogViewChangeObserver::EStopOnBoth);
       
  6465 		
       
  6466 		// Check the results/notifications are as expected
       
  6467 		TEST2(changeObs->iStatus.Int(), KErrNone);
       
  6468 		TEST(event->Id() == (TLogId) count);
       
  6469 		User::After(1);
       
  6470 		TEST2(changes->Count(), 1);
       
  6471 		TEST2(changes->At(0, logId, viewIndex), ELogChangeTypeEventAdded);
       
  6472 		TEST(logId == (TLogId) count);
       
  6473 		TEST2(viewIndex, 0);
       
  6474 		CleanupStack::PopAndDestroy(changes);
       
  6475 		}
       
  6476  
       
  6477 	CleanupStack::PopAndDestroy(5, event); // filter, view, changeObs, active, event
       
  6478 	}
       
  6479 
       
  6480 /**
       
  6481 @SYMTestCaseID          SYSLIB-LOGENG-CT-3716
       
  6482 @SYMTestCaseDesc	    Tests for the defect INC108225 
       
  6483 @SYMTestPriority 	    High
       
  6484 @SYMTestActions  	    Tests for the count of out call list & the duplicates for CS & PS calls
       
  6485 						The fields to be considered while finding duplicates records are set in the resource file named LOGWRAP.RSS
       
  6486 						i.e. duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
       
  6487 						Considering this duplicate value, the where clause in the query is made to find duplicate records.
       
  6488 @SYMTestExpectedResults Test must not fail
       
  6489 @SYMDEF                 INC108225
       
  6490 */
       
  6491 LOCAL_C void TestNumberFieldINC108225L(CLogClient& aClient)
       
  6492 {
       
  6493     test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3716 ")); 
       
  6494 	CLogEvent* event = CLogEvent::NewL();
       
  6495 	CleanupStack::PushL(event);
       
  6496 
       
  6497 	CLogEvent* event1 = CLogEvent::NewL();
       
  6498 	CleanupStack::PushL(event1);
       
  6499 
       
  6500 	CTestActive* active = new(ELeave)CTestActive();
       
  6501 	CleanupStack::PushL(active);
       
  6502 
       
  6503 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  6504 	CleanupStack::PushL(view);
       
  6505 
       
  6506 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  6507 	CleanupStack::PushL(duplicate);
       
  6508 
       
  6509 	// Make sure there are no entries in any recent lists
       
  6510 	active->StartL();
       
  6511 	aClient.ClearLog(KLogRecentOutgoingCalls, active->iStatus);
       
  6512 	CActiveScheduler::Start();
       
  6513 	TEST2(active->iStatus.Int(), KErrNone);
       
  6514 	
       
  6515 	TLogString buf1;
       
  6516 	aClient.GetString(buf1, R_LOG_DIR_OUT);
       
  6517 
       
  6518 	event->SetEventType(KLogCallEventTypeUid);
       
  6519 	event->SetDirection(buf1);
       
  6520 	event->SetDurationType(KLogDurationNone);
       
  6521 	event->SetContact(KTestContact1);
       
  6522 	event->SetRemoteParty(KTestRemote1);
       
  6523 	event->SetNumber(KTestNumber1);
       
  6524 
       
  6525 	// Add event 1st CS Call with contact as KTestContact & number as KTestNumber1
       
  6526 	active->StartL();
       
  6527 	aClient.AddEvent(*event, active->iStatus);
       
  6528 	CActiveScheduler::Start();
       
  6529 	TEST2(active->iStatus.Int(), KErrNone);
       
  6530 
       
  6531 	active->StartL();
       
  6532 	TBool res = view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus);
       
  6533 	CActiveScheduler::Start();
       
  6534 	TEST2(active->iStatus.Int(), KErrNone);
       
  6535 	TEST2(view->CountL(), 1);
       
  6536 		
       
  6537 	// Set new event with the same contact details (i.e. KTestContact) and 
       
  6538 	//...event type as KLogCallEventTypeUid & no number field
       
  6539 	event1->SetEventType(KLogCallEventTypeUid);
       
  6540 	event1->SetDirection(buf1);
       
  6541 	event1->SetDurationType(KLogDurationNone);
       
  6542 	event1->SetContact(KTestContact1);
       
  6543 	event1->SetRemoteParty(KTestRemote1);
       
  6544 	
       
  6545 	// Add event 1st PS Call with contact as KTestContact1 & Number as Null
       
  6546 	active->StartL();
       
  6547 	aClient.AddEvent(*event1, active->iStatus);
       
  6548 	CActiveScheduler::Start();
       
  6549 	TEST2(active->iStatus.Int(), KErrNone);
       
  6550 
       
  6551 	active->StartL();
       
  6552 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6553 	CActiveScheduler::Start();
       
  6554 	TEST2(active->iStatus.Int(), KErrNone);
       
  6555 	TEST2(view->CountL(), 2);
       
  6556 	
       
  6557 	// Add event 2nd CS Call
       
  6558 	active->StartL();
       
  6559 	aClient.AddEvent(*event, active->iStatus);
       
  6560 	CActiveScheduler::Start();
       
  6561 	TEST2(active->iStatus.Int(), KErrNone);
       
  6562 
       
  6563 	active->StartL();
       
  6564 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6565 	CActiveScheduler::Start();
       
  6566 	TEST2(active->iStatus.Int(), KErrNone);
       
  6567 	TEST2(view->CountL(), 2);
       
  6568 	
       
  6569 	// Check duplicate count for the last call made i.e. CS call
       
  6570 	active->StartL();
       
  6571 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6572 	CActiveScheduler::Start();
       
  6573 	TEST2(duplicate->CountL(), 1);
       
  6574 		
       
  6575 	// Add event 2nd PS Call
       
  6576 	active->StartL();
       
  6577 	aClient.AddEvent(*event1, active->iStatus);
       
  6578 	CActiveScheduler::Start();
       
  6579 	TEST2(active->iStatus.Int(), KErrNone);
       
  6580 	
       
  6581 	active->StartL();
       
  6582 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6583 	CActiveScheduler::Start();
       
  6584 	TEST2(active->iStatus.Int(), KErrNone);
       
  6585 	TEST2(view->CountL(), 2);
       
  6586 
       
  6587 	// Check duplicate count for the last call made i.e. PS call
       
  6588 	active->StartL();
       
  6589 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6590 	CActiveScheduler::Start();
       
  6591 	TEST2(duplicate->CountL(), 1);
       
  6592 	
       
  6593 	// Add event 3rd CS Call
       
  6594 	active->StartL();
       
  6595 	aClient.AddEvent(*event, active->iStatus);
       
  6596 	CActiveScheduler::Start();
       
  6597 	TEST2(active->iStatus.Int(), KErrNone);
       
  6598 	
       
  6599 	active->StartL();
       
  6600 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6601 	CActiveScheduler::Start();
       
  6602 	TEST2(active->iStatus.Int(), KErrNone);
       
  6603 	TEST2(view->CountL(), 2);
       
  6604 	
       
  6605 	// Check duplicate count for the last call made i.e. CS call
       
  6606 	active->StartL();
       
  6607 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6608 	CActiveScheduler::Start();
       
  6609 	TEST2(duplicate->CountL(), 2);
       
  6610 
       
  6611 	// Add event 3rd PS Call
       
  6612 	active->StartL();
       
  6613 	aClient.AddEvent(*event1, active->iStatus);
       
  6614 	CActiveScheduler::Start();
       
  6615 	TEST2(active->iStatus.Int(), KErrNone);
       
  6616 	
       
  6617 	active->StartL();
       
  6618 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6619 	CActiveScheduler::Start();
       
  6620 	TEST2(active->iStatus.Int(), KErrNone);
       
  6621 	TEST2(view->CountL(), 2);
       
  6622 
       
  6623 	// Check duplicate count for the last call made i.e. PS call
       
  6624 	active->StartL();
       
  6625 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6626 	CActiveScheduler::Start();
       
  6627 	TEST2(duplicate->CountL(), 2);
       
  6628 		
       
  6629 	CleanupStack::PopAndDestroy(5);	
       
  6630 }
       
  6631 
       
  6632 /**
       
  6633 @SYMTestCaseID          SYSLIB-LOGENG-CT-3755
       
  6634 @SYMTestCaseDesc	    Tests for the changes made in defect INC108225 for other fields 
       
  6635 @SYMTestPriority 	    High
       
  6636 @SYMTestActions  	    Tests for the count of out call list & the duplicates for CS calls referring other fields
       
  6637 						The fields to be considered while finding duplicates records are set in the resource file named LOGWRAP.RSS
       
  6638 						i.e. duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
       
  6639 						Considering this duplicate value, the where clause in the query is made to find duplicate records.
       
  6640 @SYMTestExpectedResults Test must not fail
       
  6641 @SYMDEF                 INC108225
       
  6642 */
       
  6643 LOCAL_C void TestOtherFieldsINC108225L(CLogClient& aClient)
       
  6644 {
       
  6645     test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-3755 ")); 
       
  6646 	CLogEvent* event = CLogEvent::NewL();
       
  6647 	CleanupStack::PushL(event);
       
  6648 
       
  6649 	CTestActive* active = new(ELeave)CTestActive();
       
  6650 	CleanupStack::PushL(active);
       
  6651 
       
  6652 	CLogViewRecent* view = CLogViewRecent::NewL(aClient);
       
  6653 	CleanupStack::PushL(view);
       
  6654 
       
  6655 	CLogViewDuplicate* duplicate = CLogViewDuplicate::NewL(aClient);
       
  6656 	CleanupStack::PushL(duplicate);
       
  6657 
       
  6658 	// Make sure there are no entries in any recent lists
       
  6659 	active->StartL();
       
  6660 	aClient.ClearLog(KLogRecentOutgoingCalls, active->iStatus);
       
  6661 	CActiveScheduler::Start();
       
  6662 	TEST2(active->iStatus.Int(), KErrNone);
       
  6663 	
       
  6664 	TLogString buf1;
       
  6665 	aClient.GetString(buf1, R_LOG_DIR_OUT);
       
  6666 
       
  6667 	event->SetEventType(KLogCallEventTypeUid);
       
  6668 	event->SetDirection(buf1);
       
  6669 	event->SetContact(KTestContact1);
       
  6670 	event->SetRemoteParty(KTestRemote1);
       
  6671 	event->SetNumber(KTestNumber1);
       
  6672 	event->SetDurationType(KLogDurationNone);
       
  6673 
       
  6674 	// Add event 1st CS Call with contact as KTestContact & number as KTestNumber1 &
       
  6675 	//.. durationtype as KLogDurationNone
       
  6676 	active->StartL();
       
  6677 	aClient.AddEvent(*event, active->iStatus);
       
  6678 	CActiveScheduler::Start();
       
  6679 	TEST2(active->iStatus.Int(), KErrNone);
       
  6680 
       
  6681 	active->StartL();
       
  6682 	TBool res = view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus);
       
  6683 	CActiveScheduler::Start();
       
  6684 	TEST2(active->iStatus.Int(), KErrNone);
       
  6685 	TEST2(view->CountL(), 1);
       
  6686 	
       
  6687 	// Add event 2nd CS Call with duration type as KLogDurationValid
       
  6688 	event->SetDurationType(KLogDurationValid);
       
  6689 	
       
  6690 	active->StartL();
       
  6691 	aClient.AddEvent(*event, active->iStatus);
       
  6692 	CActiveScheduler::Start();
       
  6693 	TEST2(active->iStatus.Int(), KErrNone);
       
  6694 
       
  6695 	active->StartL();
       
  6696 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6697 	CActiveScheduler::Start();
       
  6698 	TEST2(active->iStatus.Int(), KErrNone);
       
  6699 	TEST2(view->CountL(), 1);
       
  6700 	
       
  6701 	// Check duplicate count for the last call made 
       
  6702 	active->StartL();
       
  6703 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6704 	CActiveScheduler::Start();
       
  6705 	TEST2(duplicate->CountL(), 1);
       
  6706 	
       
  6707 	// Add event 3rd CS Call with Flag as KLogNullFlags	
       
  6708 	event->SetFlags(KLogNullFlags);
       
  6709 	
       
  6710 	active->StartL();
       
  6711 	aClient.AddEvent(*event, active->iStatus);
       
  6712 	CActiveScheduler::Start();
       
  6713 	TEST2(active->iStatus.Int(), KErrNone);
       
  6714 	
       
  6715 	active->StartL();
       
  6716 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6717 	CActiveScheduler::Start();
       
  6718 	TEST2(active->iStatus.Int(), KErrNone);
       
  6719 	TEST2(view->CountL(), 1);
       
  6720 	
       
  6721 	// Check duplicate count for the last call made 
       
  6722 	active->StartL();
       
  6723 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6724 	CActiveScheduler::Start();
       
  6725 	TEST2(duplicate->CountL(), 2);
       
  6726 	
       
  6727 	// Add event 4th CS Call with Flag as KLogFlagsMask
       
  6728 	event->SetFlags(KLogFlagsMask);
       
  6729 	
       
  6730 	active->StartL();
       
  6731 	aClient.AddEvent(*event, active->iStatus);
       
  6732 	CActiveScheduler::Start();
       
  6733 	TEST2(active->iStatus.Int(), KErrNone);
       
  6734 	
       
  6735 	active->StartL();
       
  6736 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6737 	CActiveScheduler::Start();
       
  6738 	TEST2(active->iStatus.Int(), KErrNone);
       
  6739 	TEST2(view->CountL(), 1);
       
  6740 	
       
  6741 	// Check duplicate count for the last call made 
       
  6742 	active->StartL();
       
  6743 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6744 	CActiveScheduler::Start();
       
  6745 	TEST2(duplicate->CountL(), 3);
       
  6746 
       
  6747 	// Add event 5th CS Call with Status as KNullDesC
       
  6748 	event->SetStatus(KNullDesC);
       
  6749 	
       
  6750 	active->StartL();
       
  6751 	aClient.AddEvent(*event, active->iStatus);
       
  6752 	CActiveScheduler::Start();
       
  6753 	TEST2(active->iStatus.Int(), KErrNone);
       
  6754 	
       
  6755 	active->StartL();
       
  6756 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6757 	CActiveScheduler::Start();
       
  6758 	TEST2(active->iStatus.Int(), KErrNone);
       
  6759 	TEST2(view->CountL(), 1);
       
  6760 	
       
  6761 	// Check duplicate count for the last call made 
       
  6762 	active->StartL();
       
  6763 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6764 	CActiveScheduler::Start();
       
  6765 	TEST2(duplicate->CountL(), 4);
       
  6766 	
       
  6767 	// Add event 6th CS Call with Status as KTestStatus1
       
  6768 	event->SetStatus(KTestStatus1);
       
  6769 	
       
  6770 	active->StartL();
       
  6771 	aClient.AddEvent(*event, active->iStatus);
       
  6772 	CActiveScheduler::Start();
       
  6773 	TEST2(active->iStatus.Int(), KErrNone);
       
  6774 	
       
  6775 	active->StartL();
       
  6776 	TEST(view->SetRecentListL(KLogRecentOutgoingCalls, active->iStatus));
       
  6777 	CActiveScheduler::Start();
       
  6778 	TEST2(active->iStatus.Int(), KErrNone);
       
  6779 	TEST2(view->CountL(), 1);
       
  6780 	
       
  6781 	// Check duplicate count for the last call made
       
  6782 	active->StartL();
       
  6783 	TEST(view->DuplicatesL(*duplicate, active->iStatus));
       
  6784 	CActiveScheduler::Start();
       
  6785 	TEST2(duplicate->CountL(), 5);
       
  6786 	
       
  6787 	CleanupStack::PopAndDestroy(4);	
       
  6788 }
       
  6789 
       
  6790 void doTestsL()
       
  6791 	{
       
  6792 	TestUtils::Initialize(_L("T_LOGVIEW2"));
       
  6793 	TestUtils::DeleteDatabaseL();
       
  6794 
       
  6795 	CLogClient* client = CLogClient::NewL(theFs);
       
  6796 	CleanupStack::PushL(client);
       
  6797 
       
  6798 	CLogChangeNotifier* notifier = CLogChangeNotifier::NewL();
       
  6799 	CleanupStack::PushL(notifier);	
       
  6800 
       
  6801 	test.Start(_L("Event View With Filter List"));
       
  6802 	TestEventViewWithFilterListL(*client);
       
  6803 	theLog.Write(_L8("Test 1 OK\n"));
       
  6804 
       
  6805 	test.Next(_L("View change observer"));
       
  6806 	TestViewChangeEventsL(*client);
       
  6807 	theLog.Write(_L8("Test 2 OK\n"));
       
  6808 
       
  6809 	test.Next(_L("Recent View With Filter"));
       
  6810 	TestRecentViewWithFilterL(*client);
       
  6811 	theLog.Write(_L8("Test 3 OK\n"));
       
  6812 
       
  6813 	test.Next(_L("Recent View With Filter List"));
       
  6814 	TestRecentViewWithFilterListL(*client);
       
  6815 	theLog.Write(_L8("Test 4 OK\n"));
       
  6816 
       
  6817 	test.Next(_L("Duplicate View With Filter"));
       
  6818 	TestDuplicateViewWithFilterL(*client);
       
  6819 	theLog.Write(_L8("Test 5 OK\n"));
       
  6820 
       
  6821 	test.Next(_L("Duplicate View With Filter List"));
       
  6822 	TestDuplicateViewWithFilterListL(*client);
       
  6823 	theLog.Write(_L8("Test 6 OK\n"));
       
  6824 
       
  6825 	test.Next(_L("Querying Event View For Null Fields"));
       
  6826 	TestEventViewForNullFieldsL(*client);
       
  6827 	theLog.Write(_L8("Test 7 OK\n"));
       
  6828 
       
  6829 	test.Next(_L("Querying Recent View For Null Fields"));
       
  6830 	TestRecentViewForNullFieldsL(*client);
       
  6831 	theLog.Write(_L8("Test 8 OK\n"));
       
  6832 
       
  6833 	test.Next(_L("Querying Duplicate View For Null Fields"));
       
  6834 	TestDuplicateViewForNullFieldsL(*client);
       
  6835 	theLog.Write(_L8("Test 9 OK\n"));
       
  6836 
       
  6837 	test.Next(_L("Querying Event View For Flags"));
       
  6838 	TestEventViewForFlagsL(*client);
       
  6839 	theLog.Write(_L8("Test 10 OK\n"));
       
  6840 
       
  6841 	test.Next(_L("Querying Recent View For Flags"));
       
  6842 	TestRecentViewForFlagsL(*client);
       
  6843 	theLog.Write(_L8("Test 11 OK\n"));
       
  6844 
       
  6845 	test.Next(_L("Querying Duplicate View For Flags"));
       
  6846 	TestDuplicateViewForFlagsL(*client);
       
  6847 	theLog.Write(_L8("Test 12 OK\n"));
       
  6848 
       
  6849 	test.Next(_L("Removing Recent Events"));
       
  6850 	TestRemovingRecentEventsL(*client);
       
  6851 	theLog.Write(_L8("Test 13 OK\n"));
       
  6852 
       
  6853 	test.Next(_L("Removing Duplicate Events"));
       
  6854 	TestRemovingDuplicateEventsL(*client);
       
  6855 	theLog.Write(_L8("Test 14 OK\n"));
       
  6856 
       
  6857 	test.Next(_L("Multiple Views"));
       
  6858 	TestMultipleViews1L(*client);
       
  6859 	TestMultipleViews2L(*client);
       
  6860 	theLog.Write(_L8("Test 15 OK\n"));
       
  6861 	
       
  6862 	test.Next(_L("Test _ALT Events In Recent List")); 
       
  6863 	TestAltEventsInRecentListL(*client);   
       
  6864 	theLog.Write(_L8("Test 16 OK\n"));
       
  6865 
       
  6866 	test.Next(_L("Test filtering Events by time")); 
       
  6867 	// This TEST sets system's 'Home Time'
       
  6868 	TestFilterByTimeL(*client);
       
  6869 	theLog.Write(_L8("Test 17 OK\n"));
       
  6870 
       
  6871 	test.Next(_L("Test hidden change events")); 
       
  6872 	TestUtils::DeleteDatabaseL();
       
  6873 	TestHiddenChangeEvents1L(*client);
       
  6874 	TestHiddenChangeEvents1aL(*client);
       
  6875 	TestHiddenChangeEvents2L(*client);
       
  6876 	TestHiddenChangeEvents2aL(*client);
       
  6877 	TestHiddenChangeEvents3L(*client);
       
  6878 	TestHiddenChangeEvents3aL(*client);
       
  6879 	TestHiddenChangeEvents4L(*client);
       
  6880 	TestHiddenChangeEvents4aL(*client);
       
  6881 	TestHiddenChangeEvents5L(*client);
       
  6882 	TestHiddenChangeEvents5aL(*client);
       
  6883 	TestHiddenChangeEvents6L(*client);
       
  6884 	TestHiddenChangeEvents6aL(*client);
       
  6885 	TestHiddenChangeEvents7L(*client);
       
  6886 	TestHiddenChangeEvents7aL(*client);
       
  6887 	theLog.Write(_L8("Test 18 OK\n"));
       
  6888 
       
  6889 	test.Next(_L("Changing events and recent views"));
       
  6890 	TestChangeEventRecentView1L(*client);
       
  6891 	TestChangeEventRecentView2L(*client);
       
  6892 	TestChangeEventRecentViewAndPurgeL(*client);
       
  6893 	TestChangeEventRecentViewRemoveL(*client);
       
  6894 	theLog.Write(_L8("Test 19 OK\n"));
       
  6895 
       
  6896 	test.Next(_L("Test for DEF066296"));
       
  6897 	DEF066296L(*client);
       
  6898 	test.Next(_L("Test for DEF087459"));
       
  6899 	DEF087459L(*client);
       
  6900 	theLog.Write(_L8("Test 20 OK\n"));
       
  6901 
       
  6902 	test.Next(_L("Event View With Filter List containing StartTime and EndTime"));
       
  6903 	TestEventViewWithTimestampsInFilterListL(*client);
       
  6904 	theLog.Write(_L8("Test 21 OK\n"));
       
  6905 		
       
  6906 	test.Next(_L("Test for DEF108741 - View change observer, error condition"));
       
  6907 	DEF108741L(*client);
       
  6908 	theLog.Write(_L8("Test 22 OK\n"));
       
  6909 	
       
  6910 	test.Next(_L("Test Defect INC108225: Call history check for the CS & PS(VOIP) calls "));
       
  6911 	TestNumberFieldINC108225L(*client);
       
  6912 	TestOtherFieldsINC108225L(*client);
       
  6913 	theLog.Write(_L8("Test 23 OK\n"));
       
  6914 
       
  6915 	CleanupStack::PopAndDestroy(2); // client, notifier
       
  6916 	}