phonebookengines_old/contactsmodel/tsrc/T_eventorder.cpp
changeset 40 b46a585f6909
equal deleted inserted replaced
37:fd64c38c277d 40:b46a585f6909
       
     1 // Copyright (c) 2000-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 <e32std.h>
       
    17 #include <e32test.h>
       
    18 #include <cntdb.h>
       
    19 #include <cntitem.h>
       
    20 #include <cntfldst.h>
       
    21 #include "t_utils2.h"
       
    22 #include "t_eventorder.h"
       
    23 
       
    24 _LIT8(KSortPlugin, "application.vnd.symbian.com/contacts-reverse-sort"); //SimpleSortPlugin DLL Unique name
       
    25 
       
    26 _LIT(KTestName,"t_eventorder");
       
    27 _LIT(KLogFileName,"t_eventorder.log");
       
    28 
       
    29 _LIT(KDbFileName,"c:t_eventorder.cdb");
       
    30 
       
    31 _LIT(KRemoteViewName,"RemoteView");
       
    32 
       
    33 
       
    34 LOCAL_D RTest test(KTestName);
       
    35 
       
    36 CTestConductor* CTestConductor::NewL()
       
    37 	{
       
    38 	CTestConductor* self=new(ELeave) CTestConductor();
       
    39 	CleanupStack::PushL(self);
       
    40 	self->ConstructL();
       
    41 	self->RunTestsL();
       
    42 	CleanupStack::Pop();
       
    43 	return self;
       
    44 	}
       
    45 
       
    46 CTestConductor::~CTestConductor()
       
    47 	{
       
    48 	delete iLog;
       
    49 	const TInt KCount(contacts->Count() );
       
    50 
       
    51 	TRAP_IGNORE(
       
    52 		for(TInt i = 0; i < KCount; ++i)
       
    53 			{
       
    54 			iDb->DeleteContactL((*contacts)[i]);
       
    55 			}
       
    56 	);
       
    57 	delete iDb;
       
    58 	delete iRandomGenerator;
       
    59 	delete contacts;
       
    60     TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KDbFileName));
       
    61 	iFs.Close();
       
    62 	}
       
    63 
       
    64 CTestConductor::CTestConductor() 
       
    65 	{
       
    66 	}
       
    67 
       
    68 void CTestConductor::ConstructL()
       
    69 	{
       
    70 	User::LeaveIfError(iFs.Connect());
       
    71 	iLog=CLog::NewL(test,KLogFileName);
       
    72 	iDb=CContactDatabase::ReplaceL(KDbFileName);
       
    73 	iRandomGenerator=CRandomContactGenerator::NewL();
       
    74 	iRandomGenerator->SetDbL(*iDb);
       
    75 	AddContactsL();
       
    76 	}
       
    77 
       
    78 void CTestConductor::AddContactL(TInt aBitwiseFilterType)
       
    79 	{
       
    80 	test.Printf(_L("Adding Contact"));
       
    81 	iRandomGenerator->AddTypicalContactForFilterL(aBitwiseFilterType);
       
    82 	iTotalContacts++;
       
    83 	}
       
    84 
       
    85 
       
    86 void CTestConductor::AddContactsL()
       
    87 	{
       
    88 	contacts = CContactIdArray::NewLC();
       
    89 	iTotalContacts=0;
       
    90 	test.Printf(_L("Adding Contact for Phone number test "));
       
    91 	TInt ii;
       
    92 	for (ii=0;ii<3;ii++)
       
    93 		{
       
    94 		TInt bit=0;
       
    95 		bit |= CContactDatabase::ESmsable;
       
    96 		TContactItemId itemId =iRandomGenerator->AddTypicalContactForFilterL(bit);
       
    97 		contacts->AddL(itemId);
       
    98 		iTotalContacts++;
       
    99 		}
       
   100 	CleanupStack::Pop(contacts); // tester.
       
   101 	}
       
   102 
       
   103 void CTestConductor::RunTestsL()
       
   104 	{
       
   105 	CViewTester* tester=CViewTester::NewL(*iLog,*iDb,this);
       
   106 	CleanupStack::PushL(tester);
       
   107 	CActiveScheduler::Start();
       
   108 	CleanupStack::PopAndDestroy(); // tester.
       
   109 	}
       
   110 
       
   111 void CTestConductor::SetTestError(TInt aTestError)
       
   112 	{
       
   113 	// error from tester
       
   114 	iTestError = aTestError;
       
   115 	}
       
   116 
       
   117 //
       
   118 // CViewTester.
       
   119 //
       
   120 
       
   121 CViewTester* CViewTester::NewL(CLog& aLog,CContactDatabase& aDb,CTestConductor* aTestConductor)
       
   122 	{
       
   123 	CViewTester* self=new(ELeave) CViewTester(aLog,aDb,aTestConductor);
       
   124 	CleanupStack::PushL(self);
       
   125 	self->ConstructL();
       
   126 	CleanupStack::Pop();
       
   127 	return self;
       
   128 	}
       
   129 
       
   130 
       
   131 
       
   132 CViewTester::CViewTester(CLog& aLog,CContactDatabase& aDb,CTestConductor* aTestConductor)
       
   133 	: CActive(EPriorityStandard),iLog(aLog),iDb(aDb),iTestConductor(aTestConductor)
       
   134 	{
       
   135 	CActiveScheduler::Add(this);
       
   136 	}
       
   137 
       
   138 CViewTester::~CViewTester()
       
   139 	{
       
   140 	DestructRemoteView();
       
   141    
       
   142 	iViewSortOrder.Close();
       
   143 	iLocalViewResults.Close();
       
   144 	iReceivedResults.Close();
       
   145 	iAddNumberRemoteViewResults1.Close();
       
   146 	iAddNumberRemoteViewResults2.Close();
       
   147 	iAddNumberRemoteViewResults3.Close();
       
   148 	iAddNumberRemoteViewResults4.Close();	
       
   149 	iAddNumberReceivedResults.Close();
       
   150 	}
       
   151 
       
   152 void CViewTester::ConstructL()
       
   153 	{
       
   154 	iViewSortOrder.AppendL(KUidContactFieldGivenName);
       
   155 	iViewSortOrder.AppendL(KUidContactFieldFamilyName);
       
   156 	iViewSortOrder.AppendL(KUidContactFieldCompanyName);
       
   157 
       
   158 
       
   159 	iAddNumberRemoteViewResults1.Append( TContactViewEvent::EItemRemoved);
       
   160 	iAddNumberRemoteViewResults1.Append( 2 );
       
   161 	iAddNumberRemoteViewResults1.Append( TContactViewEvent::EItemRemoved);
       
   162 	iAddNumberRemoteViewResults1.Append( 0 );
       
   163 	iAddNumberRemoteViewResults1.Append( TContactViewEvent::EItemAdded);
       
   164 	iAddNumberRemoteViewResults1.Append( 0 );
       
   165 	iAddNumberRemoteViewResults1.Append( TContactViewEvent::EItemAdded);
       
   166 	iAddNumberRemoteViewResults1.Append( 2 );
       
   167 	
       
   168 	iAddNumberRemoteViewResults2.Append( TContactViewEvent::EItemRemoved);
       
   169 	iAddNumberRemoteViewResults2.Append( 1 );
       
   170 	iAddNumberRemoteViewResults2.Append( TContactViewEvent::EItemRemoved);
       
   171 	iAddNumberRemoteViewResults2.Append( 0 );
       
   172 	iAddNumberRemoteViewResults2.Append( TContactViewEvent::EItemAdded);
       
   173 	iAddNumberRemoteViewResults2.Append( 0 );
       
   174 	iAddNumberRemoteViewResults2.Append( TContactViewEvent::EItemAdded);
       
   175 	iAddNumberRemoteViewResults2.Append( 1 );
       
   176 	
       
   177 	iAddNumberRemoteViewResults3.Append( TContactViewEvent::EItemRemoved);
       
   178 	iAddNumberRemoteViewResults3.Append( 0 );
       
   179 	iAddNumberRemoteViewResults3.Append( TContactViewEvent::EItemAdded);
       
   180 	iAddNumberRemoteViewResults3.Append( 0 );
       
   181 	iAddNumberRemoteViewResults3.Append( TContactViewEvent::EItemRemoved);
       
   182 	iAddNumberRemoteViewResults3.Append( 2 );
       
   183 	iAddNumberRemoteViewResults3.Append( TContactViewEvent::EItemAdded);
       
   184 	iAddNumberRemoteViewResults3.Append( 2 );
       
   185 	
       
   186 	iAddNumberRemoteViewResults4.Append( TContactViewEvent::EItemRemoved);
       
   187 	iAddNumberRemoteViewResults4.Append( 0 );
       
   188 	iAddNumberRemoteViewResults4.Append( TContactViewEvent::EItemAdded);
       
   189 	iAddNumberRemoteViewResults4.Append( 0 );
       
   190 	iAddNumberRemoteViewResults4.Append( TContactViewEvent::EItemRemoved);
       
   191 	iAddNumberRemoteViewResults4.Append( 1 );
       
   192 	iAddNumberRemoteViewResults4.Append( TContactViewEvent::EItemAdded);
       
   193 	iAddNumberRemoteViewResults4.Append( 1 );			
       
   194 	iTestState = EStartingTests;
       
   195 	NextTest();
       
   196 	}
       
   197 
       
   198 void CViewTester::CompleteRequest()
       
   199 	{
       
   200 	TRequestStatus *pS=&iStatus;
       
   201 	User::RequestComplete(pS,KErrNone);
       
   202 	SetActive();	
       
   203 	}
       
   204 void CViewTester::NextTest()
       
   205 	{
       
   206 	iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   207 	CompleteRequest();
       
   208 	}
       
   209 
       
   210 
       
   211 void CViewTester::AddNumberCompareRecordedResultWithExpected(const RArray<TInt>& aAddNumberRemoteViewResults)
       
   212 	{
       
   213 	TInt counter;
       
   214 	TInt max;
       
   215 	TContactViewEvent::TEventType expectedEvent;
       
   216 	TContactViewEvent::TEventType actualEvent;
       
   217 	TInt expectedInt;
       
   218 	TInt actualInt;
       
   219 
       
   220 	test( aAddNumberRemoteViewResults.Count() == iAddNumberReceivedResults.Count() );
       
   221 	max = aAddNumberRemoteViewResults.Count();
       
   222 
       
   223 	for (counter = 0; counter < max; counter++)
       
   224 		{
       
   225 		expectedEvent = static_cast<TContactViewEvent::TEventType>(aAddNumberRemoteViewResults[counter]);
       
   226 		actualEvent = static_cast<TContactViewEvent::TEventType>(iAddNumberReceivedResults[counter]);
       
   227 		test( expectedEvent == actualEvent );
       
   228 		counter++;
       
   229 		expectedInt = static_cast<TInt>(aAddNumberRemoteViewResults[counter]);
       
   230 		actualInt = static_cast<TInt>(iAddNumberReceivedResults[counter]);
       
   231 		test( expectedInt == actualInt );
       
   232 		}
       
   233 		
       
   234 	iAddNumberReceivedResults.Reset();
       
   235 
       
   236 	}
       
   237 	
       
   238 void CViewTester::AddPhoneNumberL(const TDesC& aWorkPhone,TContactItemId& ItemId)
       
   239 	{
       
   240 	CContactItem *contactItem=iDb.OpenContactL(ItemId);
       
   241 	CleanupStack::PushL(contactItem);
       
   242 	CContactItemFieldSet& fields=contactItem->CardFields();
       
   243 	TInt fieldIndex = fields.Find(KUidContactFieldPhoneNumber);
       
   244 
       
   245 	if ( fieldIndex > KErrNotFound )
       
   246 		{
       
   247 		CContactItemField& field = fields[ fieldIndex ];
       
   248 		ASSERT(field.StorageType()==KStorageTypeText);
       
   249 		STATIC_CAST(CContactTextField*,field.Storage())->SetText(aWorkPhone.AllocL());
       
   250 		}
       
   251 	
       
   252 	iDb.CommitContactL(*contactItem); 
       
   253 	CleanupStack::PopAndDestroy(contactItem);
       
   254 	}
       
   255 
       
   256 void CViewTester::RunL()
       
   257 	{
       
   258 	switch (iTestState)
       
   259 		{
       
   260 		//
       
   261 		// Remote View
       
   262 		//
       
   263 		case EConstructRemoteView:
       
   264 			iLog.LogLine ( _L("=== Creating remote view"));
       
   265 			ConstructRemoteViewL();
       
   266 			break;
       
   267 		case ERemoteViewSortOrderChange:
       
   268 			iLog.LogLine ( _L("=== Changing sort order and recording application messages"));
       
   269 			RemoteViewSortOrderChangeL();
       
   270 			break;
       
   271 
       
   272 		case ERemoteViewPlugin2:
       
   273 		case ERemoteViewPlugin:
       
   274 			iLog.LogLine ( _L("=== Creating remote view plugin"));
       
   275 			ConstructRemoteViewL(KSortPlugin);
       
   276 			break;			
       
   277 			
       
   278 		//Add Phone Numbers	
       
   279 		case EAddPhoneNumber1:
       
   280 			iLog.LogLine ( _L("=== Add Phone Number to contact item 2 and 1"));
       
   281 			AddPhoneNumberL(_L("222"), (*(iTestConductor->contacts))[1]);
       
   282 			AddPhoneNumberL(_L("111"), (*(iTestConductor->contacts))[0]);
       
   283 			iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   284 			break;
       
   285 		case EAddPhoneNumber2:
       
   286 			iLog.LogLine ( _L("=== Add Phone Number to contact item 3 and 1"));
       
   287 			AddPhoneNumberL(_L("333"), (*(iTestConductor->contacts))[2]);
       
   288 			AddPhoneNumberL(_L("111"), (*(iTestConductor->contacts))[0]);
       
   289 			iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   290 			break;
       
   291 		case EAddPhoneNumber3:
       
   292 			iLog.LogLine ( _L("=== Add Phone Number to contact item 1 and 2"));
       
   293 			AddPhoneNumberL(_L("111"), (*(iTestConductor->contacts))[0]);
       
   294 			AddPhoneNumberL(_L("222"), (*(iTestConductor->contacts))[1]);
       
   295 			iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   296 			break;
       
   297 		case EAddPhoneNumber4:
       
   298 			iLog.LogLine ( _L("=== Add Phone Number to contact item 1 and 3"));
       
   299 			AddPhoneNumberL(_L("111"), (*(iTestConductor->contacts))[0]);
       
   300 			AddPhoneNumberL(_L("333"), (*(iTestConductor->contacts))[2]);
       
   301 			iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   302 			break;
       
   303 		
       
   304 		case EPhoneNumberChangedEvent1:
       
   305 		case EPhoneNumberChangedEvent2:
       
   306 		case EPhoneNumberChangedEvent3:
       
   307 		case EPhoneNumberChangedEvent4:
       
   308 			iLog.LogLine ( _L("=== Capture Phone Number Changed Event"));
       
   309 			break;
       
   310 		
       
   311 		//
       
   312 		// End Tests
       
   313 		//
       
   314 		case EEndTest:
       
   315 
       
   316 			iLog.LogLine(_L("==== Finished Tests"));
       
   317 			CActiveScheduler::Stop();
       
   318 			break;
       
   319 
       
   320 		default:
       
   321 			ASSERT(EFalse);
       
   322 			break;
       
   323 		}
       
   324 	}
       
   325 
       
   326 TInt CViewTester::RunError(TInt aError)
       
   327 	{
       
   328 	// propagate error
       
   329 	iTestConductor->SetTestError(aError);
       
   330 
       
   331 	switch (iTestState)
       
   332 		{
       
   333 		case EConstructRemoteView: test.Printf(_L("Test failed at step ConstructRemoteView (%i), with error %i"), iTestState, aError); break;
       
   334 		case ERemoteViewSortOrderChange: test.Printf(_L("Test failed at step RemoteViewSortOrderChange (%i), with error %i"), iTestState, aError); break;
       
   335 		case ERemoteViewPlugin2: test.Printf(_L("Test failed at step RemoteViewPlugin2 (%i), with error %i"), iTestState, aError); break;
       
   336 		case ERemoteViewPlugin: test.Printf(_L("Test failed at step RemoteViewPlugin (%i), with error %i"), iTestState, aError); break;
       
   337 		case EEndTest: test.Printf(_L("Test failed at step EndTest (%i), with error %i"), iTestState, aError); break;
       
   338 
       
   339 		default: test.Printf(_L("Test failed at step %i, with error %i"), iTestState, aError); break;
       
   340 		}
       
   341 
       
   342 	CActiveScheduler::Stop();
       
   343 	return KErrNone;
       
   344 	}
       
   345 
       
   346 
       
   347 void CViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
       
   348 	{
       
   349 	switch (iTestState)
       
   350 		{
       
   351 		//
       
   352 		// Remote View
       
   353 		//
       
   354 		case EConstructRemoteView:
       
   355 			if ( (&aView == iRemoteView) && (aEvent.iEventType == TContactViewEvent::EReady) )
       
   356 				{
       
   357 				NextTest();
       
   358 				}
       
   359 			break;
       
   360 		case ERemoteViewSortOrderChange:
       
   361 			if ( &aView == iRemoteView )
       
   362 				{
       
   363 				iLocalViewResults.Append( aEvent.iEventType );
       
   364 				if ( aEvent.iEventType == TContactViewEvent::ESortOrderChanged )
       
   365 					{
       
   366 					NextTest();
       
   367 					}
       
   368 				}
       
   369 			break;
       
   370 
       
   371 
       
   372         //
       
   373         // Remote View Plugin
       
   374         //
       
   375 		case ERemoteViewPlugin:
       
   376 			if ( aEvent.iEventType == TContactViewEvent::EReady)
       
   377 				{
       
   378 				NextTest();
       
   379 				}
       
   380 			break;
       
   381 			
       
   382 		case ERemoteViewPlugin2:
       
   383 			if ( aEvent.iEventType == TContactViewEvent::EReady)
       
   384 				{
       
   385 				/* test to make sure both these two view2 use the same remote view
       
   386 					We can't *really* test this wihout alot of painful effort. So we test what we can:
       
   387 					that the two plugins are identical. 
       
   388 					To really confirm this, check the logs to ensure that two example sort
       
   389 					plugins were created.
       
   390 					
       
   391 					There should be two instantiated on the client side and one on the server side.
       
   392 					Thus a total of three.
       
   393 				*/
       
   394 				TUid firstID = iRemoteView2->GetViewSortPluginImplUid();
       
   395 				TUid secondID = iRemoteView3->GetViewSortPluginImplUid();
       
   396 				test(firstID==secondID); // make sure both use the same plugin.
       
   397 
       
   398 				CArrayFix<TContactItemId >* ids(NULL);
       
   399 				CArrayFix<TContactItemId >* ids2(NULL);
       
   400 				TRAPD(err, ids = OrderOfContactsLC(*iRemoteView2) );
       
   401 				if (err)
       
   402 					{
       
   403 					_LIT(KErrMsg, "Contact view error in CViewTester::HandleContactViewEvent() assigning ids\n");
       
   404 					test.Printf(KErrMsg);
       
   405 					User::Invariant();
       
   406 					}
       
   407 				TRAP(err, ids2 = OrderOfContactsLC(*iRemoteView3) );
       
   408 				if (err)
       
   409 					{
       
   410 					_LIT(KErrMsg, "Contact view error in CViewTester::HandleContactViewEvent() assigning ids2\n");
       
   411 					test.Printf(KErrMsg);
       
   412 					User::Invariant();
       
   413 					}
       
   414 				
       
   415 				TInt size = ids->Count();
       
   416 				test(ids2->Count()==size);
       
   417 				for (TInt i =0;i<size;i++) 
       
   418 					{
       
   419 					test(ids->At(i)==ids2->At(i));
       
   420 					}
       
   421 
       
   422 				CleanupStack::PopAndDestroy(2,ids); // +ids2
       
   423 	
       
   424 				NextTest();
       
   425 
       
   426 				}
       
   427 			break;
       
   428 					
       
   429 		//Phone Number Changed events	
       
   430 		case EPhoneNumberChangedEvent1:	//Pass through
       
   431 		case EPhoneNumberChangedEvent2:	//Pass through
       
   432 		case EPhoneNumberChangedEvent3:	//Pass through
       
   433 		case EPhoneNumberChangedEvent4:	
       
   434 		 	if ( &aView == iRemoteView ) 
       
   435 		 	{
       
   436 			if (aEvent.iEventType == TContactViewEvent::EItemRemoved )
       
   437 				{
       
   438 				iLog.LogLine ( _L("=== Capature EItemRemoved"));
       
   439 				}
       
   440 			else if ( (&aView == iRemoteView) && (aEvent.iEventType == TContactViewEvent::EItemAdded) )
       
   441 				{
       
   442 				iLog.LogLine ( _L("=== Capature EItemAdded"));
       
   443 				}
       
   444 			iAddNumberReceivedResults.Append( aEvent.iEventType );
       
   445 			iAddNumberReceivedResults.Append( aEvent.iInt );
       
   446 			}
       
   447 			
       
   448 			if (iAddNumberReceivedResults.Count() == 8 )
       
   449 				{
       
   450 				if (iTestState == EPhoneNumberChangedEvent1)
       
   451 					{
       
   452 					AddNumberCompareRecordedResultWithExpected(iAddNumberRemoteViewResults1);
       
   453 					iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   454 					}
       
   455 				else if (iTestState == EPhoneNumberChangedEvent2)
       
   456 					{
       
   457 					AddNumberCompareRecordedResultWithExpected(iAddNumberRemoteViewResults2);
       
   458 					iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   459 					}
       
   460 				else if (iTestState == EPhoneNumberChangedEvent3)
       
   461 					{
       
   462 					AddNumberCompareRecordedResultWithExpected(iAddNumberRemoteViewResults3);
       
   463 					iTestState = static_cast<TTest>( static_cast<TInt>(iTestState) + 1 );
       
   464 					}
       
   465 				else
       
   466 					{
       
   467 					AddNumberCompareRecordedResultWithExpected(iAddNumberRemoteViewResults4);
       
   468 					iTestState = EEndTest;
       
   469 					}	
       
   470 				}
       
   471 		 	
       
   472 			CompleteRequest();
       
   473 			break;
       
   474 					
       
   475 		//
       
   476 		// End Tests
       
   477 		//
       
   478 		case EEndTest:
       
   479 		default:
       
   480 			test(EFalse);
       
   481 			break;
       
   482 		}
       
   483 	}
       
   484 
       
   485 
       
   486 void CViewTester::ConstructRemoteViewL(const TDesC8& aSortPluginName)
       
   487 	{
       
   488 	if(aSortPluginName.Length() == 0)
       
   489 		{
       
   490 		iRemoteView = CContactNamedRemoteView::NewL(*this, KRemoteViewName, iDb, iViewSortOrder, EContactsOnly);
       
   491 		}
       
   492 	else 
       
   493 		{
       
   494 		if(iRemoteView2) 
       
   495 			iRemoteView3 = CContactRemoteView::NewL(*this, iDb, iViewSortOrder, EContactsOnly, aSortPluginName);
       
   496 		else
       
   497 			iRemoteView2 = CContactRemoteView::NewL(*this, iDb, iViewSortOrder, EContactsOnly, aSortPluginName);
       
   498 		}
       
   499 	}
       
   500 
       
   501 CContactRemoteView* CViewTester::ExtracttRemoteViewLC()
       
   502 	{
       
   503 	CContactRemoteView* remoteView = iRemoteView2;
       
   504 	iRemoteView2 = NULL;
       
   505 	CleanupStack::PushL(remoteView);
       
   506 	return remoteView;
       
   507 	}
       
   508 
       
   509 void CViewTester::RemoteViewSortOrderChangeL()
       
   510 	{
       
   511 	iRemoteView->ChangeSortOrderL(iViewSortOrder);
       
   512 	}
       
   513 
       
   514 void CViewTester::DestructRemoteView()
       
   515 	{
       
   516 	if (iRemoteView) iRemoteView->Close( *this );
       
   517 	// remote view should delete it's self when it runs out of observers
       
   518 	iRemoteView = NULL;
       
   519 	if (iRemoteView2) iRemoteView2->Close( *this );
       
   520 	// remote view should delete it's self when it runs out of observers
       
   521 	iRemoteView2 = NULL;
       
   522 	if (iRemoteView3) iRemoteView3->Close( *this );
       
   523 	// remote view should delete it's self when it runs out of observers
       
   524 	iRemoteView3 = NULL;
       
   525 
       
   526 	}
       
   527 
       
   528 
       
   529 
       
   530 CArrayFix<TContactItemId >* CViewTester::OrderOfContactsLC(const CContactViewBase& aView)
       
   531 	{ // aView must be ready
       
   532 	CArrayFix<TContactItemId >* ids=new(ELeave) CArrayFixFlat<TContactItemId >(4);
       
   533 	CleanupStack::PushL(ids);
       
   534 
       
   535 	TInt size = aView.CountL();
       
   536 	for(TInt i=0;i<size;i++)
       
   537 		{
       
   538 		ids->AppendL(aView.AtL(i));
       
   539 		}
       
   540 	return ids;
       
   541 	}
       
   542 
       
   543 
       
   544 void CViewTester::DoCancel()
       
   545 	{
       
   546 	}
       
   547 
       
   548 //
       
   549 // Main.
       
   550 //
       
   551 
       
   552 /**
       
   553 
       
   554 @SYMTestCaseID     PIM-T-EVENTORDER-0001
       
   555 
       
   556 */
       
   557 
       
   558 GLDEF_C TInt E32Main()
       
   559 	{
       
   560 	__UHEAP_MARK;
       
   561 	CActiveScheduler* scheduler=new CActiveScheduler;
       
   562 	test.Start(_L("@SYMTESTCaseID:PIM-T-EVENTORDER-0001 Testing EventOrder"));
       
   563 
       
   564 	if (scheduler)
       
   565 		{
       
   566 		CActiveScheduler::Install(scheduler);
       
   567 		CTrapCleanup* cleanup=CTrapCleanup::New();
       
   568 		if (cleanup)
       
   569 			{
       
   570 			CTestConductor* testConductor=NULL;
       
   571 			TRAP_IGNORE(testConductor = CTestConductor::NewL());
       
   572 			delete testConductor;
       
   573 			delete cleanup;
       
   574 			}
       
   575 		delete scheduler;
       
   576 		}
       
   577 	test.End();
       
   578 	test.Close();
       
   579 	__UHEAP_MARKEND;
       
   580 	return KErrNone;
       
   581     }