pimprotocols/phonebooksync/Test/TE_PhBkSync/TestValidateContactSteps.cpp
author Peter Fordham <peter.fordham@gmail.com>
Fri, 19 Mar 2010 14:42:44 -0700
branchCompilerCompatibility
changeset 9 ac078c434997
parent 0 e686773b3f54
permissions -rw-r--r--
Bug 1745 - Fix types for passing function pointers.

// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// This contains PhbkSync API ValidateContact() related Unit Test Steps
// 
//

#include "TE_PhBkSyncBase.h"
#include "TestValidateContactSteps.h"

/** 
 * Test validating whether a read operation is possible on valid
 * contacts. Repeat this test case for all supported phonebooks.
 */
//
//    Test step1 -- Test#37 in Unit Test Spec. Doc. //
//
CPhbkSyncValidateContactTest_01::CPhbkSyncValidateContactTest_01()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_01"));
	}

CPhbkSyncValidateContactTest_01::~CPhbkSyncValidateContactTest_01()
	{
	}

TVerdict CPhbkSyncValidateContactTest_01::doTestStepL( )
	{
	TContactItemId id;
	TInt result;

	// destroy the default .ini file if it exists
	DestroyDefaultIniFileL();

	SetSimTsyTestNumberL(18);

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load test and all phonebooks should be synchronised automatically 
	SetSimTsyTestNumberL(18);

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);

	// Get a valid UID for each phonebook and do ValidateContact
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		id = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		result = iSession.ValidateContact(MContactSynchroniser::ERead, id);
		TESTCHECKL(result, KErrNone);    
		}

	return TestStepResult();
	}

/**
 * Test validating whether a read operation is possible on valid
 * contact, where reading the ccontact is not permitted due to
 * the UICC being locked/blocked/PIN protected. Repeat this test
 * case for all supported phonebooks.
 */
//
//    Test step2 -- Test#38 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_02::CPhbkSyncValidateContactTest_02()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_02"));
	}

CPhbkSyncValidateContactTest_02::~CPhbkSyncValidateContactTest_02()
	{
	}

TVerdict CPhbkSyncValidateContactTest_02::doTestStepL( )
	{
	// arry used to keep a valid contactId for each phonebook
	TContactItemId validContactIds[5];  

	// set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// load all phonebooks which are not locked/blocked
	SetSimTsyTestNumberL(38); 

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// get a valid UID for each phonebook and keep them somewhere
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		validContactIds[i] = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		}

	// Wait for ICC to become locked 
	WaitForIccToBecomeLockedL();

	// Use the valid UIDs obtained to do ValidateContact
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactIds[i]);
		TESTCHECKL(result, KErrAccessDenied);
		}

	return TestStepResult();
	}

/** 
 * Test validating whether a read operation is possible on contact,
 * where the contact specified by the contact ID is blank. 
 * Repeat this test case for all supported phonebooks.
 */
//
//    Test step3 -- Test#39 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_03::CPhbkSyncValidateContactTest_03()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_03"));
	}

CPhbkSyncValidateContactTest_03::~CPhbkSyncValidateContactTest_03()
	{
	}

TVerdict CPhbkSyncValidateContactTest_03::doTestStepL( )
	{
	SetSimTsyTestNumberL(18); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// Validate a contact with blank UID for each phonebook
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::ERead, KNullContactId);
		TESTCHECKL(result, KErrNotFound);
		}

	return TestStepResult();
	}

/**
 * Test validing whether a read operation is possible on contact,
 * where the specified contact ID is invalid.  Repeat this test 
 * case for all supported phonebooks.
 */
//
//    Test step4 -- Test#40 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_04::CPhbkSyncValidateContactTest_04()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_04"));
	}

CPhbkSyncValidateContactTest_04::~CPhbkSyncValidateContactTest_04()
	{
	}

TVerdict CPhbkSyncValidateContactTest_04::doTestStepL( )
	{
	const TInt totalNumberOfInvalidUIDs(4);
	TUid  invalidContactIds[totalNumberOfInvalidUIDs];

	invalidContactIds[0].iUid = -1;
	invalidContactIds[1].iUid = 99999;
	invalidContactIds[2].iUid = -456;
	invalidContactIds[3].iUid = 8888;

	SetSimTsyTestNumberL(18); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// Validate a contact with blank UID for each phonebook
	TInt result;
	TInt j(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		for (j=0; j<totalNumberOfInvalidUIDs; j++) 
			{
			result = iSession.ValidateContact(MContactSynchroniser::ERead, invalidContactIds[j].iUid);
			TESTCHECKL(result, KErrNotFound);
			}
		}

	return TestStepResult();
	}

/**
 * Test validing whether a search operation is possible on a valid
 * contact. Repeat tis test case for all supported phonebooks.
 */
//
//    Test step5 -- Test#41 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_05::CPhbkSyncValidateContactTest_05()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_05"));
	}

CPhbkSyncValidateContactTest_05::~CPhbkSyncValidateContactTest_05()
	{
	}

TVerdict CPhbkSyncValidateContactTest_05::doTestStepL( )
	{
	TContactItemId id;
	TInt result;

	SetSimTsyTestNumberL(18); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load test and all phonebooks should be synchronised automatically 
	SetSimTsyTestNumberL(18); // re-use test prepared for Test#37

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// Get a valid UID for each phonebook and do ValidateContact
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		id = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		result = iSession.ValidateContact(MContactSynchroniser::ESearch, id);
		TESTCHECKL(result, KErrNone);    
		}

	return TestStepResult();
	}

/**
 * Test validing whether a search operation is possible on a valid 
 * contact, where searching the contact is not permitted. Repeat 
 * this test case for all supported phonebooks.
 */
//
//    Test step6 -- Test#42 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_06::CPhbkSyncValidateContactTest_06()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_06"));
	}

CPhbkSyncValidateContactTest_06::~CPhbkSyncValidateContactTest_06()
	{
	}

TVerdict CPhbkSyncValidateContactTest_06::doTestStepL( )
	{
	// arry used to keep a valid contactId for each phonebook
	TContactItemId validContactIds[5];  

	SetSimTsyTestNumberL(18); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load all phonebooks which are not locked/blocked
	SetSimTsyTestNumberL(38);

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// Get a valid UID for each phonebook and keep them somewhere
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		validContactIds[i] = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		}

	// Wait for ICC to become locked 
	WaitForIccToBecomeLockedL();

	// Use the valid UIDs obtained to do ValidateContact
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::ESearch, validContactIds[i]);
		TESTCHECKL(result, KErrAccessDenied);
		}

	// Finally set mode as EManual for all phonebooks so that it does not affect following test cases
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EManual, iPhoneBook[i]);
		}

	return TestStepResult();
	}

/**
 * Test validating whether a search operation is possible on contact,
 * where the contact specified by the contact ID is blank. Repeat
 * this test case for all supported phonebooks.
 */
//
//    Test step7 -- Test#43 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_07::CPhbkSyncValidateContactTest_07()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_07"));
	}

CPhbkSyncValidateContactTest_07::~CPhbkSyncValidateContactTest_07()
	{
	}

TVerdict CPhbkSyncValidateContactTest_07::doTestStepL( )
	{
	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);
	
	// Set mode as EManual for all phonebooks
	// Do initial synchronisation for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EManual, iPhoneBook[i]);
		DoSyncL(iPhoneBook[i], KErrNone);
		}
	
	// Validate a contact with blank UID for each phonebook
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::ESearch, KNullContactId);
		TESTCHECKL(result, KErrNotFound);
		}

	return TestStepResult();
	}

/**
 * Test validating whether a search operation is possible on contact, 
 * where the specified contact ID is invalid. Repeat this test
 * case for all supported phonebooks.
 */
//
//    Test step8 -- Test#44 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_08::CPhbkSyncValidateContactTest_08()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_08"));
	}

CPhbkSyncValidateContactTest_08::~CPhbkSyncValidateContactTest_08()
	{
	}

TVerdict CPhbkSyncValidateContactTest_08::doTestStepL( )
	{
	TInt totalNumberOfInvalidUIDs = 4;
	TUid  invalidContactIds[] = 
		{
		{-1},
		{99999},
		{-456},
		{8888}
		};

	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);

	// Set mode as EManual for all phonebooks
	// Do initial synchronisation for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EManual, iPhoneBook[i]);
		DoSyncL(iPhoneBook[i], KErrNone);
		}

	// Validate a contact with blank UID for each phonebook
	TInt result;
	TInt j(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{
		for (j=0; j<totalNumberOfInvalidUIDs; j++) 
			{
			result = iSession.ValidateContact(MContactSynchroniser::ESearch, invalidContactIds[j].iUid);
			TESTCHECKL(result, KErrNotFound);
			}
		}

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possible on valid
 * contact. Repeat this test case for all supported phonebooks.
 */
//
//    Test step9 -- Test#45 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_09::CPhbkSyncValidateContactTest_09()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_09"));
	}

CPhbkSyncValidateContactTest_09::~CPhbkSyncValidateContactTest_09()
	{
	}

TVerdict CPhbkSyncValidateContactTest_09::doTestStepL( )
	{
	TContactItemId id;
	TInt result;

	// Load test and all phonebooks should be synchronised automatically 
	SetSimTsyTestNumberL(37); // re-use test prepared for Test#37

	// Set mode as EManual for all phonebooks
	// Do initial synchronisation for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EManual, iPhoneBook[i]);
		DoSyncL(iPhoneBook[i], KErrNone);
		}

	// Get a valid UID for each phonebook and do ValidateContact
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		id = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, id);
		TESTCHECKL(result, KErrNone);    
		}

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possile on valid
 * contact, where editing the contact is not permitted. Repeat
 * this test case for all supported phonebooks.
 */
//
//    Test step10 -- Test#46 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_10::CPhbkSyncValidateContactTest_10()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_10"));
	}

CPhbkSyncValidateContactTest_10::~CPhbkSyncValidateContactTest_10()
	{
	}

TVerdict CPhbkSyncValidateContactTest_10::doTestStepL( )
	{
	// arry used to keep a valid contactId for each phonebook
	TContactItemId validContactIds[5];  

	// Load all phonebooks which are not locked/blocked
	SetSimTsyTestNumberL(38); 

	// Set mode as EManual for all phonebooks
	// Do initial synchronisation for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EManual, iPhoneBook[i]);
		DoSyncL(iPhoneBook[i], KErrNone);
		}

	// Get a valid UID for each phonebook and keep them somewhere
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		validContactIds[i] = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		}

	// Wait for ICC to become locked 
	WaitForIccToBecomeLockedL();

	// Use the valid UIDs obtained to do ValidateContact
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactIds[i]);
		TESTCHECKL(result, KErrAccessDenied);
		}

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possible on
 * contact, where the contact specified by the contact ID is
 * blank. Repeat this test case for all supported phonebooks.
 */
//
//    Test step11 -- Test#47 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_11::CPhbkSyncValidateContactTest_11()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_11"));
	}

CPhbkSyncValidateContactTest_11::~CPhbkSyncValidateContactTest_11()
	{
	}

TVerdict CPhbkSyncValidateContactTest_11::doTestStepL( )
	{
	SetSimTsyTestNumberL(18); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);

	// Validate a contact with blank UID for each phonebook
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, KNullContactId);
		TESTCHECKCONDITIONL(result == KErrNotFound  ||  result == KErrNotReady);

		if(result == KErrNotReady)
			{
			TInt jj = 0;
			while(jj < 5)
				{
				User::After(1000000);
				result = iSession.ValidateContact(MContactSynchroniser::EEdit, KNullContactId);
				if(result != KErrNotReady)
					{
					break;
					}
				jj++;
				}
			
			TESTCHECKL(result, KErrNotFound);
			}

		}

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possible on
 * contact, where the specified contact ID is invalid. Repeat
 * this test case for all supported phonebooks.
 */
//
//    Test step12 -- Test#48 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_12::CPhbkSyncValidateContactTest_12()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_12"));
	}

CPhbkSyncValidateContactTest_12::~CPhbkSyncValidateContactTest_12()
	{
	}

TVerdict CPhbkSyncValidateContactTest_12::doTestStepL( )
	{
	TInt totalNumberOfInvalidUIDs = 4;
	TUid  invalidContactIds[] = 
		{
		{-1},
		{99999},
		{-456},
		{8888}
		};

	SetSimTsyTestNumberL(0); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load the dummy ICC which contains all phonebooks
	SetSimTsyTestNumberL(0);

	// Validate a contact with blank UID for each phonebook
	TInt result;
	TInt j(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		for (j=0; j<totalNumberOfInvalidUIDs; j++) 
			{
			result = iSession.ValidateContact(MContactSynchroniser::EEdit, invalidContactIds[j].iUid);
			TESTCHECKCONDITIONL(result == KErrNotFound  ||  result == KErrNotReady);

			if(result == KErrNotReady)
				{
				TInt kk=0;
				while(kk < 5)
					{
					User::After(1000000);
					result = iSession.ValidateContact(MContactSynchroniser::EEdit, invalidContactIds[j].iUid);
				
					if(result != KErrNotReady)
						{
						break;
						}
					kk++;
					}
			
				TESTCHECKL(result, KErrNotFound);
				}

			}
		}

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possible on contact,
 * where the specified contact is hidden.
 */
//
//    Test step13 -- Test#49 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_13::CPhbkSyncValidateContactTest_13()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_13"));
	}

CPhbkSyncValidateContactTest_13::~CPhbkSyncValidateContactTest_13()
	{
	}

TVerdict CPhbkSyncValidateContactTest_13::doTestStepL( )
	{
	TInt result;

	SetSimTsyTestNumberL(54); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// load Global/GSM ADN and USim App ADN phonebooks, where
	// both phonebooks contain hidden entries.
	SetSimTsyTestNumberL(38); // re-use test prepared for Test#53-1

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// arry used to keep a valid contactId for each phonebook
	TContactItemId validContactIds[5];

	// get a valid UID for each phonebook and keep them somewhere
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		validContactIds[i] = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		}

	// Wait for ICC to become locked 
	WaitForIccToBecomeLockedL();

	// Use the valid UIDs obtained to do ValidateContact
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactIds[i]);
		TESTCHECKL(result, KErrAccessDenied);
		}

	return TestStepResult();
	}


//
//    Test step14 -- Test#50 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_14::CPhbkSyncValidateContactTest_14()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_14"));
	}

CPhbkSyncValidateContactTest_14::~CPhbkSyncValidateContactTest_14()
	{
	}

TVerdict CPhbkSyncValidateContactTest_14::doTestStepL( )
	{
	TInt result;
	TUid  validGlobalADNUid, validUsimAppADNUid;

	SetSimTsyTestNumberL(0); 

	// set mode as EAutoCurrentIcc for Global/GSM ADN and USim App ADN
	User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, KUidIccGlobalAdnPhonebook));
	User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, KUidUsimAppAdnPhonebook));
	User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, KUidIccGlobalSdnPhonebook));
	User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, KUidIccGlobalLndPhonebook));
	User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EManual, KUidIccGlobalFdnPhonebook));

	// load Global/GSM ADN and USim App ADN phonebooks
	SetSimTsyTestNumberL(50);	// both phonebooks should be synchronised after this

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateInvalidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateInvalidL(KUidIccGlobalLndPhonebook);
	CheckCacheStateInvalidL(KUidIccGlobalFdnPhonebook);

	// at this stage, it should be possible to access "App1" phonebooks
	validGlobalADNUid.iUid = GetValidUIDFromContactsDbL(KUidIccGlobalAdnPhonebook);
	result = iSession.ValidateContact(MContactSynchroniser::EEdit, validGlobalADNUid.iUid);
	TESTCHECKL(result, KErrNone);    

	validUsimAppADNUid.iUid = GetValidUIDFromContactsDbL(KUidUsimAppAdnPhonebook);
	result = iSession.ValidateContact(MContactSynchroniser::EEdit, validUsimAppADNUid.iUid);
	TESTCHECKL(result, KErrNone);

	SignalSimTsyToReduceTimersL();

	// Wait for USIM App switching to occur - App1 is closed and App2 becomes active 
	// by using the valid UIDs obtained to do ValidateContact
	while (result == KErrNotReady  ||  result == KErrNone) 
		{
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, validUsimAppADNUid.iUid);
		User::After(1000000);
		}
	TESTCHECK(result, KErrNotFound);

	// Even though USIM App1 is no longer active, access to Global/GSM ADN phonebook 
	// should NOT be affected 
	result = iSession.ValidateContact(MContactSynchroniser::EEdit, validGlobalADNUid.iUid);
	TESTCHECK(result, KErrNone);    

	return TestStepResult();
	}

/**
 * Test validating whether an edit operation is possible on USIM
 * Application phonebook contact, when the USIM Application becomes
 * PIN protected.
 */
//
//    Test step15 -- Test#51 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_15::CPhbkSyncValidateContactTest_15()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_15"));
	}

CPhbkSyncValidateContactTest_15::~CPhbkSyncValidateContactTest_15()
	{
	}

TVerdict CPhbkSyncValidateContactTest_15::doTestStepL( )
	{
	// arry used to keep a valid contactId for each phonebook
	TContactItemId validContactIds[5];  

	SetSimTsyTestNumberL(2); 

	// Set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// Load all phonebooks which are not locked/blocked
	SetSimTsyTestNumberL(38);  // re-use phonebooks prepared for Test#37

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);

	// Get a valid UID for each phonebook and keep them somewhere
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		validContactIds[i] = GetValidUIDFromContactsDbL(iPhoneBook[i]);
		}

	// Wait for ICC to become locked 
	WaitForIccToBecomeLockedL();

	// Use the valid UIDs obtained to do ValidateContact
	TInt result;
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{
		if (iPhoneBook[i] == KUidIccGlobalAdnPhonebook ||	iPhoneBook[i] == KUidUsimAppAdnPhonebook) 
			{
			result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactIds[i]);
			TESTCHECKL(result, KErrAccessDenied);
			}
		}

	return TestStepResult();
	}


//
//    Test step16 -- Test#52 in Unit Test Spec. Doc.  //
//
CPhbkSyncValidateContactTest_16::CPhbkSyncValidateContactTest_16()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_16"));
	}

CPhbkSyncValidateContactTest_16::~CPhbkSyncValidateContactTest_16()
	{
	}

TVerdict CPhbkSyncValidateContactTest_16::doTestStepL( )
	{
	// =============================================================
	// *** This test is covered by Test#51 since the phonebooks ***
	// *** in [test38] are both USIM Application PIN protected  ***
	// *** and ICC locked/blocked/PIN protected.
	// =============================================================

	return TestStepResult();
	}

/**
 * Test validating whether a read operation is possible on valid
 * contact, where reading the ccontact is not permitted due to
 * the FDN entry being PIN2 protected. Check that other phonebook
 * can still be accessed for reading. Once PIN2 is verified, editing
 * FDN contact should be permitted. Again check reading from other
 * phonebook.
 */
//
//    Test step17 --								//
//
CPhbkSyncValidateContactTest_17::CPhbkSyncValidateContactTest_17()
	{
	// store the name of this test step
	SetTestStepName(_L("PhbkSyncValidateContactTest_17"));
	}

CPhbkSyncValidateContactTest_17::~CPhbkSyncValidateContactTest_17()
	{
	}

TVerdict CPhbkSyncValidateContactTest_17::doTestStepL( )
	{
	// set mode as EAutoCurrentIcc for all phonebooks
	TInt i(0);
	for (i=0; i<KTotalNumberOfPhoneBook; i++) 
		{ 
		User::LeaveIfError(iSession.SetSyncMode(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]));
		CheckSyncModeL(RPhoneBookSession::EAutoCurrentIcc, iPhoneBook[i]);
		}

	// load all phonebooks which are not locked/blocked
	SetSimTsyTestNumberL(41); 

	CheckCacheStateValidL(KUidUsimAppAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalAdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalSdnPhonebook);
	CheckCacheStateValidL(KUidIccGlobalLndPhonebook);
	CheckCacheStateValidL(KUidIccGlobalFdnPhonebook);

	TContactItemId validContactId = GetValidUIDFromContactsDbL(KUidIccGlobalFdnPhonebook);
	TESTCHECKCONDITIONL(validContactId != KNullContactId);
	
	// Wait for PIN2 to become protected for editing FDN phonebook 
	TInt result = KErrNone;
	result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactId);
	while (result != KErrAccessDenied) 
		{
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactId);
		User::After(1000000);
		}
	TESTCHECKL(result, KErrAccessDenied);

	// check that other phonebooks can still be read
	TContactItemId validContactId2 = GetValidUIDFromContactsDbL(KUidIccGlobalAdnPhonebook);
	TESTCHECKCONDITIONL(validContactId2 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId2);
	TESTCHECKL(result, KErrNone);

	TContactItemId validContactId3 = GetValidUIDFromContactsDbL(KUidIccGlobalSdnPhonebook);
	TESTCHECKCONDITIONL(validContactId3 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId3);
	TESTCHECKL(result, KErrNone);

	TContactItemId validContactId4 = GetValidUIDFromContactsDbL(KUidIccGlobalLndPhonebook);
	TESTCHECKCONDITIONL(validContactId4 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId4);
	TESTCHECKL(result, KErrNone);

	TContactItemId validContactId5 = GetValidUIDFromContactsDbL(KUidUsimAppAdnPhonebook);
	TESTCHECKCONDITIONL(validContactId5 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId5);
	TESTCHECKL(result, KErrNone);

	// Wait for PIN2 to become validated for editing FDN phonebook 
	result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactId);
	while (result != KErrNone) 
		{
		result = iSession.ValidateContact(MContactSynchroniser::EEdit, validContactId);
		User::After(1000000);
		}
	TESTCHECKL(result, KErrNone);

	// check that other phonebooks can still be read
	validContactId2 = GetValidUIDFromContactsDbL(KUidIccGlobalAdnPhonebook);
	TESTCHECKCONDITIONL(validContactId2 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId2);
	TESTCHECKL(result, KErrNone);

	validContactId3 = GetValidUIDFromContactsDbL(KUidIccGlobalSdnPhonebook);
	TESTCHECKCONDITIONL(validContactId3 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId3);
	TESTCHECKL(result, KErrNone);

	validContactId4 = GetValidUIDFromContactsDbL(KUidIccGlobalLndPhonebook);
	TESTCHECKCONDITIONL(validContactId4 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId4);
	TESTCHECKL(result, KErrNone);

	validContactId5 = GetValidUIDFromContactsDbL(KUidUsimAppAdnPhonebook);
	TESTCHECKCONDITIONL(validContactId5 != KNullContactId);
	result = iSession.ValidateContact(MContactSynchroniser::ERead, validContactId5);
	TESTCHECKL(result, KErrNone);
	
	return TestStepResult();
	}