telephonyserverplugins/multimodetsy/test/Te_PhBk/Te_PhBk.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/multimodetsy/test/Te_PhBk/Te_PhBk.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/multimodetsy/test/Te_PhBk/Te_PhBk.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,1580 +1,1580 @@
-// Copyright (c) 2002-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:
-//
-
-/**
- @file
-*/
-
-#include <e32test.h>
-#include <c32comm.h>
-#include <etelmm.h>
-#include <mmretrieve.h>
-#include <mpbutil.h>
-
-#include "Te_PhBk.h"
-
-//------------------------------------------------------------------
-//			** TEST PhBk STEPS ***
-//------------------------------------------------------------------
-
-CTestPhoneInfo::CTestPhoneInfo()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestPhoneInfo"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestPhoneInfo::doTestStepL( void )
-/**
- * This function gets information about the phone: the Phone Manufacturer's Id, the
- * Model and Revision ID, the Serial number and the number of phone books supported,
- * as well as information associated with each supported phone book.
- * The functions are called on a RBasicGsmPhone object.
- */
-	{
-	RMobilePhone::TMobilePhoneIdentityV1 aPhoneId;
-	TRequestStatus status;
-	RMobilePhoneStore::TMobilePhoneStoreInfoV1 aPhoneStoreInfo;
-	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg aPhoneStoreInfoPckg(aPhoneStoreInfo);
-
-	iPhone.GetPhoneId(status, aPhoneId);
-	User::WaitForRequest(status);
-	CHECKPOINT(status, KErrNone, _L("*** Failed RMobilePhone::GetPhoneId() ***")) ;
-
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Manufacturer ID : %S")), &aPhoneId.iManufacturer);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Model ID : %S")), &aPhoneId.iModel);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Revision ID : %S")), &aPhoneId.iRevision);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Serial number : %S")), &aPhoneId.iSerialNumber);
-	User::After(4000000L);	// Give user time to see the test results
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeDialledPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"DIALLED_CALLS\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"DIALLED_CALLS\" not supported by this phone ***"));
-	    }
-
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeMissedPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"MISSED_CALLS\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"MISSED_CALLS\" not supported by this phone ***"));
-	    }
-
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeReceivedPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"RECEIVED_CALLS\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"RECEIVED_CALLS\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeAdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"ME_PHONEBOOK\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"ME_PHONEBOOK\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccVoiceMailBox);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"VOICE_MAILBOX\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"VOICE_MAILBOX\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccAdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"SIM_PHONEBOOK\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"SIM_PHONEBOOK\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelCombinedAdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"COMBINED_SIM_ME\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"COMBINED_SIM_ME\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccFdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"FIXED_DIAL_NUM\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"FIXED_DIAL_NUM\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccSdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"SERV_DIAL_NUM\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"SERV_DIAL_NUM\" not supported by this phone ***"));
-	    }
-
-	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccBdnPhoneBook);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"BARRED_DIAL_NUM\" returned %d")), status.Int());
-	if(status.Int() == KErrNone)
-	    {
-		aPhoneStoreInfo = aPhoneStoreInfoPckg();
-		checkPhoneBookInfoL(aPhoneStoreInfo);
-	    }
-	else
-	    {
-		INFO_PRINTF1(_L("*** Phone Book \"BARRED_DIAL_NUM\" not supported by this phone ***"));
-	    }
-	    
-	// RAM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelGsmPhoneBookType, _L("RAM phonebook")) == KErrNone );
-	// Dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelGsmPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
-	// Missed calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelGsmPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
-	// Received calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelGsmPhoneBookType, _L("Received calls phonebook")) == KErrNone );
-	// SIM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelGsmPhoneBookType, _L("SIM phonebook")) == KErrNone );
-	// Fixed dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelGsmPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
-	// Service dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelGsmPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
-	// Own number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelGsmPhoneBookType, _L("Own number phonebook")) == KErrNone );
-	// Emergency number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelGsmPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
-	// SIM dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelGsmPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
-	// Voice mail
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelGsmPhoneBookType, _L("Voice mail")) == KErrNone );
-	// ICC SMS Store
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelGsmPhoneBookType, _L("ICC SMS Store")) == KErrNone );
-	
-	INFO_PRINTF1(_L("\n\nTest using RMobilePhone::GetPhoneStoreInfo() with CDMA mode specified\n"));
-	
-	// RAM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelCdmaPhoneBookType, _L("RAM phonebook")) == KErrNone );
-	// Dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelCdmaPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
-	// Missed calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelCdmaPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
-	// Received calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelCdmaPhoneBookType, _L("Received calls phonebook")) == KErrNone );
-	// SIM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelCdmaPhoneBookType, _L("SIM phonebook")) == KErrNone );
-	// Fixed dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelCdmaPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
-	// Service dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelCdmaPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
-	// Own number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelCdmaPhoneBookType, _L("Own number phonebook")) == KErrNone );
-	// Emergency number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelCdmaPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
-	// SIM dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelCdmaPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
-	// Voice mail
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelCdmaPhoneBookType, _L("Voice mail")) == KErrNone );
-	// ICC SMS Store
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelCdmaPhoneBookType, _L("ICC SMS Store")) == KErrNone );
-	
-	INFO_PRINTF1(_L("\n\nTest using RMobilePhone::GetPhoneStoreInfo() with USIM mode specified\n"));
-	
-	// RAM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelUSimPhoneBookType, _L("RAM phonebook")) == KErrNone );
-	// Dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelUSimPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
-	// Missed calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelUSimPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
-	// Received calls phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelUSimPhoneBookType, _L("Received calls phonebook")) == KErrNone );
-	// SIM phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelUSimPhoneBookType, _L("SIM phonebook")) == KErrNone );
-	// Fixed dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelUSimPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
-	// Service dialling numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelUSimPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
-	// Own number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelUSimPhoneBookType, _L("Own number phonebook")) == KErrNone );
-	// Emergency number phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelUSimPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
-	// SIM dialled numbers phonebook
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelUSimPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
-	// Voice mail
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelUSimPhoneBookType, _L("Voice mail")) == KErrNone );
-	// ICC SMS Store
-	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelUSimPhoneBookType, _L("ICC SMS Store")) == KErrNone );
-	    
-	return TestStepResult();
-	}
-	
-//------------------------------------------------------------------
-
-CTestGetCapsAndInfo::CTestGetCapsAndInfo()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestGetCapsAndInfo"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestGetCapsAndInfo::doTestStepL( void )
-/**
- * This function gets the SIM phone book's static capabilities (as well as the ME &
- * MT phone books, if supported), and information associated with the phone book.
- * It also validates the obtained information.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.04 Test retrieval of the phone book store info and capabilities of an ME-based phonebook of abbreviated dialling numbers.
- * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.11 Test retrieval of the phone book store info and capabilities of a combination of the ADN stored in ME and ICC
- * @test GT83-TPHBK-003.13 Test cancelling a request to retrieve phone book store info and capabilities
- */
-	{
-	TInt ret=KErrNone;
-	TRequestStatus status;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo);
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 *aInfob;
-
-	// SIM phone book - mandatory
-	RMobilePhoneBookStore simPhBk;
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook!! ***"));
-	simPhBk.GetInfo(status, aInfoPckg);
-	User::WaitForRequest(status);
-	CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-	aInfob = &aInfoPckg();
-	TEST(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess);
-	TEST(!aInfob->iName.Compare(KETelIccAdnPhoneBook()));
-	simPhBk.Close();
-
-	// ME phone book - optional support by the phones
-	RMobilePhoneBookStore mePhBk;
-	ret=mePhBk.Open(iPhone,  KETelMeAdnPhoneBook());
-	if (ret==KErrNone)
-		{
-		INFO_PRINTF1(_L("ME phonebook supported"));
-		mePhBk.GetInfo(status, aInfoPckg);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.04 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-		aInfob = &aInfoPckg();
-		TEST(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess);
-		TEST(!aInfob->iName.Compare(KETelMeAdnPhoneBook()));
-		}
-	else
-		INFO_PRINTF1(_L("*** Failed to open ME ADN Phonebook, Phonebook may not be supported by phone ***"));
-
-	mePhBk.Close();
-
-	// Combined ME and SIM phone book - optional support by the phones
-	RMobilePhoneBookStore combPhBk;
-	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook());
-	if (ret==KErrNone)
-		{
-		INFO_PRINTF1(_L("Combined ME & SIM phonebook supported"));
-
-		combPhBk.GetInfo(status, aInfoPckg);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.11 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		aInfob = &aInfoPckg();
-
-		TEST(aInfob->iCaps && RMobilePhoneStore::KCapsWriteAccess);
-		TEST(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook()));
-		}
-	combPhBk.Close();
-
-		// Combined ME and SIM phone book
-	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook());
-	if(ret==KErrNone)
-		{
-		combPhBk.GetInfo(status, aInfoPckg);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.11 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		aInfob = &aInfoPckg();
-
-		TEST(aInfob->iMaxNumLength >0);
-		TEST(aInfob->iMaxTextLength >=0);
-		TEST(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook()));
-
-		#ifdef __TEST_CANCEL__
-		combPhBk.GetInfo(status, aInfoPckg);
-		combPhBk.CancelAsyncRequest(EMobilePhoneStoreGetInfo);
-		User::WaitForRequest(status);
-		INFO_PRINTF2(_L("Async MT PhoneBook GetInfo Cancel Status = %d"),status);
-		CHECKPOINT_EXPR((status==KErrCancel || status==KErrNone), _L("GT83-TPHBK-003.13 - *** Failed CancelAsyncRequest(EMobilePhoneStoreGetInfo) ***"));
-		#endif
-		}
-	combPhBk.Close();
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CTestReadAndWrite::CTestReadAndWrite()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestReadAndWrite"));
-	}
-
-//------------------------------------------------------------------
-
-void CTestReadAndWrite::WriteToMEPhBkL()
-/**
- * This function is called from the testReadAndWrite() function. Writes to the 1st 4
- * locations in the ME PhoneBook. Any existing entries in these locations will be overwritten.
- * @test GT83-TPHBK-001.04 Test opening a ME-based phonebook of abbreviated dialling numbers.
- * @test GT83-TPHBK-007.04 "Test writing a single phonebook entry to a specified location in a ME-based phonebook of abbreviated dialling numbers, where the location is empty"
-*/
-	{
-	const TInt KEntries=4;
-	RMobilePhoneBookStore mePhBk;
-	TRequestStatus status;
-	TInt ret(KErrNone);
-	
-	ret=mePhBk.Open(iPhone,  KETelMeAdnPhoneBook);
-	if(ret==KErrNone)
-		{
-		INFO_PRINTF1(_L("Write to the ME PhoneBook..."));
-
-		TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
-
-		_LIT16(KTel,"123456%03d");
-		_LIT16(KText,"TelNo %03d");
-		TBuf16<13> text(KTel), number(KText);
-
-		CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
-		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
-
-		for(TInt index=1;index<=KEntries;++index)
-			{
-			// First specify starting index and set iNumofEntries to 1, since it is only
-			// possible to write one entry at a time
-
-			number.FillZ(); // Reset previous values
-			number.Zero();
-			text.FillZ();
-			text.Zero();
-			pbData.FillZ();
-			pbData.Zero();
-
-			// convert number into TLV format and append it to allocated buffer
-			number.Format(KTel(), index);
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
-			TESTL(ret == KErrNone) ;
-
-			// convert number type into TLV format and append it to allocated buffer
-			TUint8 tonNpi=KTypeOfNumber; 
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-			TESTL(ret == KErrNone);
-
-			text.Format(KText(), index);
-			INFO_PRINTF2(_L("Writing \'%S\'"),&text);
-
-			// convert text into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
-			TESTL(ret == KErrNone);
-
-			mePhBk.Write(status, pbData, index);
-			User::WaitForRequest(status);
-			TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-007.04 - *** Failed to Write to the ME Phonebook! ***"));
-			}
-		delete pbBuffer;
-		}
-
-	else
-		INFO_PRINTF1(_L("*** Failed to open ME ADN Phonebook! ***"));
-
-	mePhBk.Close();
-	}
-
-//------------------------------------------------------------------
-
-TVerdict CTestReadAndWrite::doTestStepL( void )
-/**
- * This function creates an array of names and telephone numbers which are to be used as
- * phone book entries. It then writes these entries synchronously to the SIM phone book
- * and reads them back. If the Combined Phone book is supported, entries are first written
- * to the ME phonebook and then read from the Combined Phone book. This is because the MT
- * (SIM + ME) phonebook does not have write access.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-001.11 Test opening a combination of the ADN stored in ME and ICC
- * @test GT83-TPHBK-002.11 Test closing a combination of the ADN stored in ME and ICC
- * @test GT83-TPHBK-006.06 Test retrieval of entries in an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-006.11 Test retrieval of entries in a combination of the ADN stored in ME and ICC
- * @test GT83-TPHBK-007.06 Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty
- * @test GT83-TPHBK-007.11 Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing the fixed dialling numbers list, when the phone is in a mode that allows editing the fixed dialling numbers, where the location is empty
-*/
-	{
-	TInt ret=KErrNone;
-	TRequestStatus status;
-	RMobilePhoneBookStore simPhBk;
-
-	TBuf8<KPBDataClientBuf> pbData, pbReadData1, pbReadData2, pbReadEmpty; // Client reserved space for phonebook data
-	TInt requestedIndex(0);
-
-	// Create array of names and numbers
-	const TText16* names[]={(TText16*)KAnnText.iBuf, (TText16*)KMattSText.iBuf, (TText16*)KAndyText.iBuf,
-						  (TText16*)KMattMText.iBuf,(TText16*)KPaulText.iBuf, (TText16*)KMumAndDadText.iBuf,
-						  (TText16*)KSymbolText.iBuf,(TText16*)KTextTooLong.iBuf};
-
-	const TText16* numbers[]={(TText16*)KAnnPhoneNum.iBuf, (TText16*)KMattSPhoneNum.iBuf, (TText16*)KAndyPhoneNum.iBuf,
-							(TText16*)KMattMPhoneNum.iBuf, (TText16*)KPaulPhoneNum.iBuf, (TText16*)KMumAndDadPhoneNum.iBuf,
-							(TText16*)KSymbolPhoneNum.iBuf,(TText16*)KNumberTooLong.iBuf};
-
-
-	TBuf16<KBufSize> entryNumber(numbers[0]);
-	TBuf16<KBufSize> entryName(names[0]);
-	// Motorola T260 requires a pause otherwise it does not respond to the 
-	// next AT command.
-	User::After(500000);
-	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer();
-	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
-
-	// Write the entries to the SIM Phone Book
-	TInt writeIndex(0);
-	TInt i(0), size(KPPBEntriesNum);
-
-	TUint8 tagValue(0);
-	CPhoneBookBuffer::TPhBkTagType aDataType;
-
-
-	/* Read the entries back */
-	TUint16 index;
-	TUint8  tonNpi(0);
-	TPtrC16 number(NULL,0);
-	TPtrC16 text(NULL,0);
-
-
-
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook());
-	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook ***"));
-	if(ret==KErrNone)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
-		for (i=1; i<=size; ++i)
-			{
-			simPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
-			User::WaitForRequest(status);
-
-			//first reset the following three local buffers to delete any existing data
-			entryNumber.Zero();
-			entryName.Zero();
-			pbData.Zero();
-
-			entryNumber=numbers[i-1];
-			entryName=names[i-1];
-
-			// First specify starting index and set iNumofEntries to 1, since it is only
-			// possible to write one entry at a time
-
-			writeIndex = i; // Note that TSY will overwrite any existing data. It is up to
-							// the Sync to check whether it is the first available entry
-
-			// convert number into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, entryNumber);
-			TEST(ret == KErrNone) ;
-
-			// convert type into TLV format and append it to allocated buffer
-			TUint8 tonNpi=KTypeOfNumber; 
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-			TEST(ret == KErrNone) ;
-
-			// convert text into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, entryName);
-			TEST(ret == KErrNone) ;
-
-			simPhBk.Write(status, pbData, writeIndex);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed to write to the ICC ADN Phonebook ***"));
-			}
-
-		/* Reads Forwads and it reads all entries individually */
-		for(i=1; i<=size; ++i)
-			{
-			//first reset the following three local buffers to delete any existing data
-			entryNumber.Zero();
-			entryName.Zero();
-			pbData.Zero();
-
-			// reset all loop variables
-			index = 0;
-			tonNpi = 0;
-			tagValue = 0;
-
-			requestedIndex = i;
-			simPhBk.Read(status, requestedIndex, 1, pbReadData1);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06 - *** Failed to read from ICC ADN Phonebook ***")) ;
-
-			entryNumber=numbers[i-1];
-			entryName=names[i-1];
-
-			// now decode PB data received in TLV format
-			pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
-			pbBuffer->StartRead();       // Start reading received phonebook data
-
-			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-				{
-				switch (tagValue)
-					{
-				case RMobilePhoneBookStore::ETagPBAdnIndex:
-					pbBuffer->GetValue(index);			
-					break;
-				case RMobilePhoneBookStore::ETagPBTonNpi:
-					pbBuffer->GetValue(tonNpi);			
-					break;
-				case RMobilePhoneBookStore::ETagPBText:
-					pbBuffer->GetValue(text);			
-					break;
-				case RMobilePhoneBookStore::ETagPBNumber:
-					pbBuffer->GetValue(number);			
-					break;
-				default:
-					// An unsupported field type - just skip this value
-					pbBuffer->SkipValue(aDataType);
-					break;
-					}
-			}; // end while
-
-			TEST(tonNpi==KTypeOfNumber);
-			TEST(number.Compare(entryNumber)==KErrNone);
-			TEST(text.Compare(entryName)==KErrNone);
-			TEST(index == i) ;
-		} // end for
-
-		// Try to read an empty entry - find out which one is empty first
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
-		simPhBk.GetInfo(status,infoPckg);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		// If used entry information not available, use total entries and guess
-		// last one is not used.
-
-		requestedIndex = (info.iUsedEntries>=0) ? info.iUsedEntries+1 : info.iTotalEntries;
-
-		simPhBk.Read(status, requestedIndex, 1, pbReadEmpty);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ; // If asked to read an empty entry, TSY will return KErrNotFound
-								 // It is now clients responsibility to ensure a valid index is supplied
-
-		// Read Backwards, one by one
-		for(i=size; i>0; --i)
-			{
-			//first reset the following three local buffers to delete any existing data
-			entryNumber.Zero();
-			entryName.Zero();
-			pbData.Zero();
-
-			requestedIndex = i;
-			simPhBk.Read(status, requestedIndex, 1, pbReadData2);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ;
-
-			entryNumber=numbers[i-1];
-			entryName=names[i-1];
-
-			// reset all loop variables
-			index = 0;
-			tagValue = 0;
-
-			// now decode PB data received in TLV format
-			pbBuffer->Set(&pbReadData2); // Set pbBuffer to point to received phonebook data
-			pbBuffer->StartRead();       // Start reading received phonebook data
-			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-				{
-				switch (tagValue)
-					{
-				case RMobilePhoneBookStore::ETagPBAdnIndex:
-					pbBuffer->GetValue(index);			
-					break;
-				case RMobilePhoneBookStore::ETagPBTonNpi:
-					pbBuffer->GetValue(tonNpi);			
-					break;
-				case RMobilePhoneBookStore::ETagPBText:
-					pbBuffer->GetValue(text);			
-					break;
-				case RMobilePhoneBookStore::ETagPBNumber:
-					pbBuffer->GetValue(number);			
-					break;
-				default:
-					// An unsupported field type - just skip this value
-					pbBuffer->SkipValue(aDataType);
-					break;
-					}
-			} // end while
-
-			TEST(tonNpi==KTypeOfNumber);
-			TEST(number.Compare(entryNumber)==KErrNone);
-			TEST(text.Compare(entryName)==KErrNone);
-			TEST(index == i) ;
-			} // end for
-		} //end if
-
-	simPhBk.Close();
-
-// From Combined phone book
-
-	//
-	// This part of the test reads the 1st few entries in the combined Phone Book (ME+
-	// SIM). As the Combined Phonebook does not (should not) have 'WriteAccess', some
-	// entries will first be written to the ME phone book. The SIM phone book
-	// already contains the entries written above.
-	//
-	WriteToMEPhBkL();
-
-	RMobilePhoneBookStore combPhBk;
-	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook);
-	if(ret==KErrNone)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
-		combPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
-		User::WaitForRequest(status);
-
-		const TInt KEntries=4;		// Same value in WriteToMEPhBk()
-		const TInt KBufSize=20;
-
-		// Read index locations 1 to KEntries
-		for(TUint16 index=1;index<=KEntries;++index)
-			{
-			combPhBk.Read(status, index, 1, pbReadData2);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.11 - *** Failed to read from Combined Phonebook ***")) ;
-
-			// now decode PB data received in TLV format
-			TPtrC16 telNumPtr;
-			TPtrC16 textPtr;
-
-			pbBuffer->Set(&pbReadData2); // Set pbBuffer to point to received phonebook data
-			pbBuffer->StartRead();       // Start reading received phonebook data
-
-			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-				{
-				switch (tagValue)
-					{
-				case RMobilePhoneBookStore::ETagPBText:
-					pbBuffer->GetValue(textPtr);			
-					break;
-				case RMobilePhoneBookStore::ETagPBNumber:
-					pbBuffer->GetValue(telNumPtr);			
-					break;
-				default:
-					// An unsupported field type - just skip this value
-					pbBuffer->SkipValue(aDataType);
-					break;
-					}
-				} 
-
-			//
-			// Assemble the data we expect to have read
-			_LIT16(KTel,"123456%03d");
-			_LIT16(KText,"TelNo %03d");
-			TBuf16<KBufSize> telNumExpected;
-			TBuf16<KBufSize> textExpected;
-			telNumExpected.Format(KTel,index);
-			textExpected.Format(KText,index);
-						
-			//
-			// Check the data we actually read with what we expected to read
-			TEST(telNumPtr.Compare(telNumExpected)==0);
-			TEST(textPtr.Compare(textExpected)==0);
-			} 
-
-		// Entry to write - this should be read only...
-		requestedIndex = 5;
-
-		// convert number into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
-		TEST(ret == KErrNone) ;
-
-		// convert number type into TLV format and append it to allocated buffer
-		tonNpi=KTypeOfNumber;
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-		TEST(ret == KErrNone) ;
-
-		// convert text into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText);
-		TEST(ret == KErrNone) ;
-		}
-	combPhBk.Close();
-	delete pbBuffer;
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CTestDelete::CTestDelete()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestDelete"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestDelete::doTestStepL( void )
-/**
- * This function deletes the first 7 entries from the SIM phone book
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-006.	06 Test retrieval of the first entry in an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
- */
-	{
-	TRequestStatus status;
-	RMobilePhoneBookStore simPhBk;
-	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
-	TInt ret(KErrNone);
-	
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook! ***"));
-	if(ret==KErrNone)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
-		simPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
-		User::WaitForRequest(status);
-
-		for(TInt i=1; i<=KPPBEntriesNum; ++i)
-			{
-			simPhBk.Delete(status, i);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - ***Failed RMobilePhoneBookStore::Delete()")) ;
-			}
-
-		// now try to read first (empty) entry
-		simPhBk.Read(status, 1, 1, pbData);
-		User::WaitForRequest(status); 
-		CHECKPOINT(status.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ;
-		// If asked to read an emptry entry, TSY will not return an error
-		// It is now client's responsibility to ensure a valid index is supplied
-		}
-	simPhBk.Close();
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CTestNotifications::CTestNotifications()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestNotifications"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestNotifications::doTestStepL( void )
-/**
- * This function opens the SIM and MT (if supported) phonebooks and posts a request for
- * notification. Since this notification is not supported by any phonebook it should receive
- * KErrNotSupported.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-007.06 "Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty"
- * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-008.16 Test cancelling deleting individual phonebook entries from a phonebook
- */
-	{
-	TRequestStatus status;
-	RMobilePhoneBookStore simPhBk, combPhBk;
-	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
-	TInt index(0), ret(0);
-
-	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read/write phonebook entries
-	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
-
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook! ***"));
-	if(ret==KErrNone)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
-		simPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
-		User::WaitForRequest(status);
-
-		ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook);
-		if(ret==KErrNone)
-			{
-			combPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
-			User::WaitForRequest(status);
-
-			TRequestStatus status1, status2;
-			TInt index1 = 0;
-			TInt index2 = 0;
-			TUint32 eventToReturn;
-
-			simPhBk.NotifyStoreEvent(status1, eventToReturn,index1);	// Will Notify if an entry is added
-			TEST(status1.Int() == KRequestPending) ;
-
-			combPhBk.NotifyStoreEvent(status2, eventToReturn, index2); // Same here ;-)
-			TEST(status2.Int() == KRequestPending) ;
-
-			index = 1; // write to the first slot
-			// convert number into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
-			TEST(ret == KErrNone) ;
-
-			// convert number type into TLV format and append it to allocated buffer
-			TUint8 tonNpi=KTypeOfNumber;
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-			TEST(ret == KErrNone) ;
-
-			// convert text into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
-			TEST(ret == KErrNone) ;
-
-			simPhBk.Write(status, pbData, index);
-			User::WaitForRequest(status); // Write request
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed RMobilePhoneBookStore::Write() ***")) ;
-
-			User::WaitForRequest(status1); // Notification
-			if (status1==KErrNotSupported)
-				{
-				// Notification is not supported by phonebook store - as expected
-				INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported"));
-				}
-			else
-				{
-				// This should not happen since this notification is not supported by phonebook store
-				INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - failed"));
-				SetTestStepResult(EFail);
-				}
-
-			User::WaitForRequest(status2);
-			if (status2==KErrNotSupported)
-				{
-				// Notification is not supported by phonebook store - as expected
-				INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported"));
-				}
-			else
-				{
-				// This should not happen since this notification is not supported by phonebook store
-				INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - failed"));
-				SetTestStepResult(EFail);
-				}
-
-			status1= KErrNone; // reset status variable
-			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
-
-			combPhBk.NotifyStoreEvent(status2, eventToReturn, index2);
-
-			// Now delete that entry
-			simPhBk.Delete(status, 1);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - *** Failed RMobilePhoneBookStore::Delete() ***")) ;
-
-			User::WaitForRequest(status1);
-			if (status1==KErrNotSupported)
-				{
-				// Notification is not supported by phonebook store - as expected
-				INFO_PRINTF1(_L("Phonebook Store Delete Notification is NOT Supported"));
-				}
-			else
-				{
-				// This should not happen since this notification is not supported by phonebook store
-				INFO_PRINTF1(_L("Phonebook Store Delete Notification IS Supported - failed"));
-				SetTestStepResult(EFail);
-				}
-
-			User::WaitForRequest(status2);
-			if (status2==KErrNotSupported)
-				{
-				// Notification is not supported by phonebook store - as expected
-				INFO_PRINTF1(_L("Phonebook Store Delete Notification is NOT Supported"));
-				}
-			else
-				{
-				// This should not happen since this notification is not supported by phonebook store
-				INFO_PRINTF1(_L("Phonebook Store Delete Notification IS Supported - failed"));
-				SetTestStepResult(EFail);
-				}
-
-			// EntryChangedNotificationCancel Request
-			status1= KErrNone; // reset status variable
-			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
-			simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent);
-			User::WaitForRequest(status1);
-			// Isn't supported
-			// TEST_CHECKL(status1.Int(), KErrNone, _L("GT83-TPHBK-008.16")) ;
-
-			if (status1==KErrNotSupported)
-				{
-				// Notification is not supported by phonebook store - as expected
-				INFO_PRINTF1(_L("Phonebook Store Notification is NOT Supported"));
-				}
-			else
-				{
-				// This should not happen since this notification is not supported by phonebook store
-				INFO_PRINTF1(_L("Phonebook Store Notification cancelled"));
-				SetTestStepResult(EFail);
-				}
-
-			// Cancel Notification Request after 2 seconds
-			status1= KErrNone; // reset status variable
-			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
-
-			// Now write the same entry again
-			simPhBk.Write(status, pbData, index);		
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("*** Failed RMobilePhoneBookStore::Write() ***")) ;
-
-			User::After(2000000L);
-			simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent);
-			User::WaitForRequest(status1);
-
-			INFO_PRINTF2(TRefByValue<const TDesC>(_L("Cancel Status = %d")), status1.Int());
-
-			TEST(status1==KErrCancel || status1==KErrNotSupported);
-
-			simPhBk.Delete(status, 1); // Deleting the last added entry so that the test ends "clean".
-			User::WaitForRequest(status);
-			}
-		combPhBk.Close();
-		}
-	simPhBk.Close();
-	delete pbBuffer;
-	return TestStepResult();
-
-	}
-//------------------------------------------------------------------
-
-CTestInvalidOps::CTestInvalidOps()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestInvalidOps"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestInvalidOps::doTestStepL( void )
-/**
- * Stress test. Tries to perform invalid operations on the phonebook to make sure the
- * phone errors these operations accordingly.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
- */
-	{
-	RMobilePhoneBookStore simPhBk;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1	info;
-	TRequestStatus status;
-
-	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
-	TInt index(0); 
-	TInt numEntries(1);
-	TInt ret(KErrNone);
-
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{
-		CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read/write phonebook entries
-		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
-
-		// Read and write past the end of phone book - First ask the phone what is the maximum number of
-		// entries, then tries to write past the max index!
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
-		simPhBk.GetInfo(status, infoPckg);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - ***Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		TInt maxNumber = info.iTotalEntries;
-
-		// Write an entry beyond the returned phonebook limit
-		index = maxNumber + 1;
-
-		// convert number into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
-		TEST(ret == KErrNone) ;
-
-		// convert number type into TLV format and append it to allocated buffer
-		TUint8 tonNpi=KTypeOfNumber;
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi,tonNpi);
-		TEST(ret == KErrNone) ;
-
-		// convert text into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
-		TEST(ret == KErrNone) ;
-
-		simPhBk.Write(status, pbData, index);
-		User::WaitForRequest(status); // Write request
-		TEST(status!=KErrNone) ;  // Should not accept Phone book entry maxNumber + 1
-
-		pbData.Zero(); // Clear buffer
-
-		// Read that entry
-		simPhBk.Read(status, index, numEntries, pbData);
-		User::WaitForRequest(status);
-		TEST(status!=KErrNone); // There should be no entry written
-
-		// Delete an entry beyond the returned phonebook limit
-		simPhBk.Delete(status, index); // Testing to delete an impossible indexed entry
-		User::WaitForRequest(status);
-		TEST(status!=KErrNone); // There should be no entry deleted
-
-		// Write text field too long - assume 30 characters is too long!
-		index = 1;
-
-		// convert number into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
-		TEST(ret == KErrNone) ;
-
-		// convert number type into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-		TEST(ret == KErrNone) ;
-
-		// convert text into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KTextTooLong);
-		TEST(ret == KErrNone) ;
-
-		simPhBk.Write(status, pbData, index);
-		User::WaitForRequest(status); // Write request
-		if (status==KErrNone)
-			{
-			INFO_PRINTF1(_L("Phone book does not error writing a too long name tag!"));
-			simPhBk.Delete(status, index);
-			User::WaitForRequest(status);
-			TEST(status == KErrNone) ;
-			}
-		else
-			{
-			TEST(status == KErrGeneral) ;
-			}
-
-		// Write number field too long - assume 30 characters is too long!
-		index = 1;
-		// convert number into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KNumberTooLong);
-		TEST(ret == KErrNone) ;
-
-		// convert number type into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi,tonNpi);
-		TEST(ret == KErrNone) ;
-
-		// convert text into TLV format and append it to allocated buffer
-		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
-		TEST(ret == KErrNone) ;
-
-		simPhBk.Write(status, pbData, index);
-		User::WaitForRequest(status); // Write request
-		if (status==KErrNone)
-			{
-			INFO_PRINTF1(_L("Phone book does not error writing a too long number field!"));
-			simPhBk.Delete(status, index);
-			User::WaitForRequest(status);
-			TEST(status == KErrNone) ;
-			}
-		else
-			{
-			TEST(status == KErrGeneral) ;
-			}
-		delete pbBuffer;
-		}
-	simPhBk.Close();
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CTestAdvancedPhBk::CTestAdvancedPhBk()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestAdvancedPhBk"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CTestAdvancedPhBk::doTestStepL( void )
-/**
- * This function opens an Advanced Gsm SIM PhoneBook, then proceeds to write and then
- * delete 'KFillTo' entries from the phone book.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-007.06 "Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty"
- * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
- */
-	{
-	const TInt KFillTo=30;
-
-	TInt ret=KErrNone;
-	TRequestStatus status;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aPhoneStoreInfob;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aPhoneStoreInfoPckgb(aPhoneStoreInfob);
-	RMobilePhoneBookStore simPhBk;
-
-	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
-
-	_LIT16(KTel,"1632960000%02d");
-	_LIT16(KText,"Tel %02d");
-	TBuf16<15> text(KTel), number(KText);
-
-	TInt index(1);
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{
-		// Write the entries
-		INFO_PRINTF1(_L("Fill the 1st 30 locations in the SIM phonebook..."));
-		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
-		User::WaitForRequest(status);
-		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ;
-		aPhoneStoreInfob = aPhoneStoreInfoPckgb();
-		TInt used=aPhoneStoreInfob.iUsedEntries ;
-
-		CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
-		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
-
-		// Fields supported by this phonebook are returned to client as capabilities
-		// in aPhoneStoreInfoPckgb. It is assumed that all GSM phonebook fields (index, tel num,
-		// type and name) are supported even though that part of the code has to be tested as well.
-
-		while (used<KFillTo)
-			{
-			// First specify starting index and set iNumofEntries to 1, since it is only
-			// possible to write one entry at a time
-
-			number.FillZ(); // Reset previous values
-			number.Zero();
-			text.FillZ();
-			text.Zero();
-			pbData.FillZ();
-			pbData.Zero();
-
-			// convert number into TLV format and append it to allocated buffer
-			number.Format(KTel(), index);
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
-			TEST(ret == KErrNone) ;
-
-			// convert number type into TLV format and append it to allocated buffer
-			TUint8 tonNpi=KTypeOfNumber; 
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
-			TEST(ret == KErrNone) ;
-
-			text.Format(KText(), index);
-			INFO_PRINTF2(_L("Writing \'%S\'"),&text);
-			// convert text into TLV format and append it to allocated buffer
-			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
-			TEST(ret == KErrNone) ;
-
-			simPhBk.Write(status, pbData, index);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed RMobilePhoneBookStore::Write() *** "));
-			used++;
-			index++;
-			} // end while
-		delete pbBuffer;
-		}
-	simPhBk.Close();
-
-	// Delete the entries //
-	INFO_PRINTF1(_L("Re-opening phonebook..."));
-	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{
-		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-		aPhoneStoreInfob = aPhoneStoreInfoPckgb();
-		INFO_PRINTF1(_L("Deleting the entries..."));
-		for (int iy=1;iy<=KFillTo;++iy)
-			{
-			INFO_PRINTF2(_L("Deleting %03d"),iy);
-			simPhBk.Delete(status, iy);
-			User::WaitForRequest(status);
-			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - *** Failed RMobilePhoneBookStore::Delete() ***"));
-			}
-		}
-	simPhBk.Close();
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CRetrievalOfWholePhoneBook::CRetrievalOfWholePhoneBook()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("RetrievalOfWholePhoneBook"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CRetrievalOfWholePhoneBook::doTestStepL( void )
-/**
- * Detected Network test. This function gets the number of available networks
- * and information on these networks. Also tests some Cancel Requests.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-004.06 "Obtain total number of slots and number of slots used, using GetInfo method. Test  retrieval of the whole list of phone book entries from an ICC-based phonebook of abbreviated dialling numbers"
- */
-	{
-	INFO_PRINTF1(_L("==============================="));
-	INFO_PRINTF1(_L(" Test retrieval of a Phonebook "));
-	INFO_PRINTF1(_L("==============================="));
-	// First write 15 entries to the phone
-	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
-	WriteBatchOfEntriesToThePhoneL();
-
-	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
-	TBuf8<KPBDataClientBuf> pbReadData1; // Client reserved space for phonebook data
-	TRequestStatus status;
-
-	TUint16 index(0);
-	TUint8 tonNpi;
-	TPtrC16 number(NULL,0);
-	TPtrC16 text(NULL,0);
-
-	TUint8 tagValue(0);
-	CPhoneBookBuffer::TPhBkTagType aDataType;
-
-	RMobilePhoneBookStore simPhBk;
-	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{	
-		// Get total number of phonebook entires
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo;
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo);
-		simPhBk.GetInfo(status, aInfoPckg);
-		User::WaitForRequest(status);
-		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ;
-
-		INFO_PRINTF2(_L("Start retrieving %d phonebook entries"), aInfo.iTotalEntries);
-
-		simPhBk.Read(status, 1, aInfo.iTotalEntries, pbReadData1);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-004.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
-
-		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
-		// data to retrieve individual entries
-		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
-		pbBuffer->StartRead();       // Start reading received phonebook data
-		TInt entryCount=0;
-		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-			{
-			switch (tagValue)
-				{
-			case RMobilePhoneBookStore::ETagPBAdnIndex:
-				entryCount++;
-				pbBuffer->GetValue(index);			
-				break;
-			case RMobilePhoneBookStore::ETagPBTonNpi:
-				pbBuffer->GetValue(tonNpi);			
-				break;
-			case RMobilePhoneBookStore::ETagPBText:
-				pbBuffer->GetValue(text);			
-				break;
-			case RMobilePhoneBookStore::ETagPBNumber:
-				pbBuffer->GetValue(number);			
-				break;
-			default:
-				// An unsupported field type - just skip this value
-				pbBuffer->SkipValue(aDataType);
-				break;
-				}
-
-			// Print each individual entry
-			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
-				{
-				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
-				}
-			} // end while
-		}
-	simPhBk.Close();
-	delete pbBuffer;
-	INFO_PRINTF1(_L("Deleting the entries "));
-	clearPhoneBookL(KETelIccAdnPhoneBook());
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CRetrievalOfBatchOfPhoneBookEntries::CRetrievalOfBatchOfPhoneBookEntries()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("RetrievalOfBatchOfPhoneBookEntries"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CRetrievalOfBatchOfPhoneBookEntries::doTestStepL( void )
-/**
- * Test of retrieval of a batch of phonebook entries. This method is mainly used to test
- * removal of partially populated phonebook entries by the MMTSY.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-005.06 Test retieval of half of the entries from an ICC-based phonebook of abbreviated dialling numbers
- */
-	{
-	INFO_PRINTF1(_L("================================================"));
-	INFO_PRINTF1(_L(" Test retrieval of a Batch of Phonebook Entries "));
-	INFO_PRINTF1(_L("================================================"));
-	// First write 15 entries to the phone
-	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
-	WriteBatchOfEntriesToThePhoneL();
-
-	RMobilePhoneBookStore simPhBk;
-	TRequestStatus status;
-	TBuf8<KPBDataClientSmallBuf> pbReadData1; // Client reserved space for phonebook data
-	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
-
-	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
-		simPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
-		User::WaitForRequest(status);
-		TEST_CHECKL(status.Int(), KErrNone, _L("*** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		INFO_PRINTF1(_L("This test can take up to a minute to complete..."));
-		TInt startIndex = 3; // Where to start in the phonebook
-		TInt batchSize = 4; // How many entries to get.
-
-		INFO_PRINTF3(_L("Start retrieving a batch of %d phonebook entries with starting index %d"), batchSize, startIndex);
-
-		simPhBk.Read(status, startIndex, batchSize, pbReadData1);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-005.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
-
-		TUint16 index(0);
-		TUint8 tonNpi;
-		TPtrC16 number(NULL,0);
-		TPtrC16 text(NULL,0);
-
-		TUint8 tagValue(0);
-		CPhoneBookBuffer::TPhBkTagType aDataType;
-
-		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
-		// data to retrieve/decode individual entries
-		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
-		pbBuffer->StartRead();       // Start reading received phonebook data
-		TInt entryCount=0;
-		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-			{
-			switch (tagValue)
-				{
-			case RMobilePhoneBookStore::ETagPBAdnIndex:
-				entryCount++;
-				pbBuffer->GetValue(index);			
-				break;
-			case RMobilePhoneBookStore::ETagPBTonNpi:
-				pbBuffer->GetValue(tonNpi);			
-				break;
-			case RMobilePhoneBookStore::ETagPBText:
-				pbBuffer->GetValue(text);			
-				break;
-			case RMobilePhoneBookStore::ETagPBNumber:
-				pbBuffer->GetValue(number);			
-				break;
-			default:
-				// An unsupported field type - just skip this value
-				pbBuffer->SkipValue(aDataType);
-				break;
-				}
-
-			// Print each individual entry
-			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
-				{
-				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
-				}
-			} // end while
-		}
-	simPhBk.Close();
-	delete pbBuffer;
-
-	INFO_PRINTF1(_L("Deleting the entries "));
-	clearPhoneBookL(KETelIccAdnPhoneBook());
-	return TestStepResult();
-	}
-//------------------------------------------------------------------
-
-CRetrievalOfHalfOfPhoneBookEntries::CRetrievalOfHalfOfPhoneBookEntries()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("RetrievalOfHalfOfPhoneBookEntries"));
-	}
-//------------------------------------------------------------------
-
-TVerdict CRetrievalOfHalfOfPhoneBookEntries::doTestStepL( void )
-/**
- * Test of retrieval of a half of phonebook entries. This method is mainly used to test
- * removal of partially populated phonebook entries by the MMTSY.
- * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
- * @test GT83-TPHBK-005.06 Test retieval of half of the entries from an ICC-based phonebook of abbreviated dialling numbers
- */
-	{
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aPhoneStoreInfob;
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aPhoneStoreInfoPckgb(aPhoneStoreInfob);
-
-	INFO_PRINTF1(_L("================================================"));
-	INFO_PRINTF1(_L(" Test retrieval of a Batch of Phonebook Entries "));
-	INFO_PRINTF1(_L("================================================"));
-	// First write 15 entries to the phone
-	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
-	WriteBatchOfEntriesToThePhoneL();
-
-	RMobilePhoneBookStore simPhBk;
-	TRequestStatus status;
-	TBuf8<KPBDataClientBuf> pbReadData1; // Client reserved space for phonebook data
-	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
-
-	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
-	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
-	if(ret==KErrNone)
-		{
-		INFO_PRINTF1(_L("This test can take up to a minute to complete..."));
-
-		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
-		User::WaitForRequest(status);
-		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
-
-		aPhoneStoreInfob = aPhoneStoreInfoPckgb() ;
-		TInt batchSize = (aPhoneStoreInfob.iTotalEntries)/2; //50%
-
-		INFO_PRINTF2(_L("Start retrieving a batch of %d phonebook entries with starting index 1"), batchSize);
-
-		simPhBk.Read(status, 1, batchSize, pbReadData1);
-		User::WaitForRequest(status);
-		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-005.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
-
-		TUint16 index(0);
-		TUint8 tonNpi;
-		TPtrC16 number(NULL,0);
-		TPtrC16 text(NULL,0);
-
-		TUint8 tagValue(0);
-		CPhoneBookBuffer::TPhBkTagType aDataType;
-
-		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
-		// data to retrieve/decode individual entries
-		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
-		pbBuffer->StartRead();       // Start reading received phonebook data
-		TInt entryCount=0;
-		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
-			{
-			switch (tagValue)
-				{
-			case RMobilePhoneBookStore::ETagPBAdnIndex:
-				entryCount++;
-				pbBuffer->GetValue(index);			
-				break;
-			case RMobilePhoneBookStore::ETagPBTonNpi:
-				pbBuffer->GetValue(tonNpi);			
-				break;
-			case RMobilePhoneBookStore::ETagPBText:
-				pbBuffer->GetValue(text);			
-				break;
-			case RMobilePhoneBookStore::ETagPBNumber:
-				pbBuffer->GetValue(number);			
-				break;
-			default:
-				// An unsupported field type - just skip this value
-				pbBuffer->SkipValue(aDataType);
-				break;
-				}
-
-			// Print each individual entry
-			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
-				{
-				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
-				}
-			} // end while
-		}
-	simPhBk.Close();
-	delete pbBuffer;
-
-	INFO_PRINTF1(_L("Deleting the entries "));
-	clearPhoneBookL(KETelIccAdnPhoneBook());
-	return TestStepResult();
-	}
+// Copyright (c) 2002-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:
+//
+
+/**
+ @file
+*/
+
+#include <e32test.h>
+#include <c32comm.h>
+#include <etelmm.h>
+#include <mmretrieve.h>
+#include <mpbutil.h>
+
+#include "Te_PhBk.h"
+
+//------------------------------------------------------------------
+//			** TEST PhBk STEPS ***
+//------------------------------------------------------------------
+
+CTestPhoneInfo::CTestPhoneInfo()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestPhoneInfo"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestPhoneInfo::doTestStepL( void )
+/**
+ * This function gets information about the phone: the Phone Manufacturer's Id, the
+ * Model and Revision ID, the Serial number and the number of phone books supported,
+ * as well as information associated with each supported phone book.
+ * The functions are called on a RBasicGsmPhone object.
+ */
+	{
+	RMobilePhone::TMobilePhoneIdentityV1 aPhoneId;
+	TRequestStatus status;
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1 aPhoneStoreInfo;
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg aPhoneStoreInfoPckg(aPhoneStoreInfo);
+
+	iPhone.GetPhoneId(status, aPhoneId);
+	User::WaitForRequest(status);
+	CHECKPOINT(status, KErrNone, _L("*** Failed RMobilePhone::GetPhoneId() ***")) ;
+
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Manufacturer ID : %S")), &aPhoneId.iManufacturer);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Model ID : %S")), &aPhoneId.iModel);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Revision ID : %S")), &aPhoneId.iRevision);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Serial number : %S")), &aPhoneId.iSerialNumber);
+	User::After(4000000L);	// Give user time to see the test results
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeDialledPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"DIALLED_CALLS\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"DIALLED_CALLS\" not supported by this phone ***"));
+	    }
+
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeMissedPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"MISSED_CALLS\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"MISSED_CALLS\" not supported by this phone ***"));
+	    }
+
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeReceivedPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"RECEIVED_CALLS\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"RECEIVED_CALLS\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelMeAdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"ME_PHONEBOOK\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"ME_PHONEBOOK\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccVoiceMailBox);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"VOICE_MAILBOX\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"VOICE_MAILBOX\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccAdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"SIM_PHONEBOOK\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"SIM_PHONEBOOK\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelCombinedAdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"COMBINED_SIM_ME\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"COMBINED_SIM_ME\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccFdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"FIXED_DIAL_NUM\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"FIXED_DIAL_NUM\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccSdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"SERV_DIAL_NUM\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"SERV_DIAL_NUM\" not supported by this phone ***"));
+	    }
+
+	iPhone.GetPhoneStoreInfo(status, aPhoneStoreInfoPckg, KETelIccBdnPhoneBook);
+	User::WaitForRequest(status);
+	INFO_PRINTF2(TRefByValue<const TDesC>(_L("Testing \"BARRED_DIAL_NUM\" returned %d")), status.Int());
+	if(status.Int() == KErrNone)
+	    {
+		aPhoneStoreInfo = aPhoneStoreInfoPckg();
+		checkPhoneBookInfoL(aPhoneStoreInfo);
+	    }
+	else
+	    {
+		INFO_PRINTF1(_L("*** Phone Book \"BARRED_DIAL_NUM\" not supported by this phone ***"));
+	    }
+	    
+	// RAM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelGsmPhoneBookType, _L("RAM phonebook")) == KErrNone );
+	// Dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelGsmPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
+	// Missed calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelGsmPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
+	// Received calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelGsmPhoneBookType, _L("Received calls phonebook")) == KErrNone );
+	// SIM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelGsmPhoneBookType, _L("SIM phonebook")) == KErrNone );
+	// Fixed dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelGsmPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
+	// Service dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelGsmPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
+	// Own number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelGsmPhoneBookType, _L("Own number phonebook")) == KErrNone );
+	// Emergency number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelGsmPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
+	// SIM dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelGsmPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
+	// Voice mail
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelGsmPhoneBookType, _L("Voice mail")) == KErrNone );
+	// ICC SMS Store
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelGsmPhoneBookType, _L("ICC SMS Store")) == KErrNone );
+	
+	INFO_PRINTF1(_L("\n\nTest using RMobilePhone::GetPhoneStoreInfo() with CDMA mode specified\n"));
+	
+	// RAM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelCdmaPhoneBookType, _L("RAM phonebook")) == KErrNone );
+	// Dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelCdmaPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
+	// Missed calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelCdmaPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
+	// Received calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelCdmaPhoneBookType, _L("Received calls phonebook")) == KErrNone );
+	// SIM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelCdmaPhoneBookType, _L("SIM phonebook")) == KErrNone );
+	// Fixed dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelCdmaPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
+	// Service dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelCdmaPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
+	// Own number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelCdmaPhoneBookType, _L("Own number phonebook")) == KErrNone );
+	// Emergency number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelCdmaPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
+	// SIM dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelCdmaPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
+	// Voice mail
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelCdmaPhoneBookType, _L("Voice mail")) == KErrNone );
+	// ICC SMS Store
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelCdmaPhoneBookType, _L("ICC SMS Store")) == KErrNone );
+	
+	INFO_PRINTF1(_L("\n\nTest using RMobilePhone::GetPhoneStoreInfo() with USIM mode specified\n"));
+	
+	// RAM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeAdnPhoneBook, KEtelUSimPhoneBookType, _L("RAM phonebook")) == KErrNone );
+	// Dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeDialledPhoneBook, KEtelUSimPhoneBookType, _L("Dialled numbers phonebook")) == KErrNone );
+	// Missed calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeMissedPhoneBook, KEtelUSimPhoneBookType, _L("Missed calls phonebook")) == KErrNone );
+	// Received calls phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelMeReceivedPhoneBook, KEtelUSimPhoneBookType, _L("Received calls phonebook")) == KErrNone );
+	// SIM phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccAdnPhoneBook, KEtelUSimPhoneBookType, _L("SIM phonebook")) == KErrNone );
+	// Fixed dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccFdnPhoneBook, KEtelUSimPhoneBookType, _L("Fixed dialling numbers phonebook")) == KErrNone );
+	// Service dialling numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSdnPhoneBook, KEtelUSimPhoneBookType, _L("Service dialling numbers phonebook")) == KErrNone );
+	// Own number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelOwnNumberStore, KEtelUSimPhoneBookType, _L("Own number phonebook")) == KErrNone );
+	// Emergency number phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelEmergencyNumberStore, KEtelUSimPhoneBookType, _L("Emergency number phonebook")) == KErrNone );
+	// SIM dialled numbers phonebook
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccLndPhoneBook, KEtelUSimPhoneBookType, _L("SIM dialled numbers phonebook")) == KErrNone );
+	// Voice mail
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccVoiceMailBox, KEtelUSimPhoneBookType, _L("Voice mail")) == KErrNone );
+	// ICC SMS Store
+	TEST( CheckPhoneStoreInfo(iPhone, KETelIccSmsStore, KEtelUSimPhoneBookType, _L("ICC SMS Store")) == KErrNone );
+	    
+	return TestStepResult();
+	}
+	
+//------------------------------------------------------------------
+
+CTestGetCapsAndInfo::CTestGetCapsAndInfo()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestGetCapsAndInfo"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestGetCapsAndInfo::doTestStepL( void )
+/**
+ * This function gets the SIM phone book's static capabilities (as well as the ME &
+ * MT phone books, if supported), and information associated with the phone book.
+ * It also validates the obtained information.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.04 Test retrieval of the phone book store info and capabilities of an ME-based phonebook of abbreviated dialling numbers.
+ * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.11 Test retrieval of the phone book store info and capabilities of a combination of the ADN stored in ME and ICC
+ * @test GT83-TPHBK-003.13 Test cancelling a request to retrieve phone book store info and capabilities
+ */
+	{
+	TInt ret=KErrNone;
+	TRequestStatus status;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo);
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 *aInfob;
+
+	// SIM phone book - mandatory
+	RMobilePhoneBookStore simPhBk;
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook!! ***"));
+	simPhBk.GetInfo(status, aInfoPckg);
+	User::WaitForRequest(status);
+	CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+	aInfob = &aInfoPckg();
+	TEST(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess);
+	TEST(!aInfob->iName.Compare(KETelIccAdnPhoneBook()));
+	simPhBk.Close();
+
+	// ME phone book - optional support by the phones
+	RMobilePhoneBookStore mePhBk;
+	ret=mePhBk.Open(iPhone,  KETelMeAdnPhoneBook());
+	if (ret==KErrNone)
+		{
+		INFO_PRINTF1(_L("ME phonebook supported"));
+		mePhBk.GetInfo(status, aInfoPckg);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.04 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+		aInfob = &aInfoPckg();
+		TEST(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess);
+		TEST(!aInfob->iName.Compare(KETelMeAdnPhoneBook()));
+		}
+	else
+		INFO_PRINTF1(_L("*** Failed to open ME ADN Phonebook, Phonebook may not be supported by phone ***"));
+
+	mePhBk.Close();
+
+	// Combined ME and SIM phone book - optional support by the phones
+	RMobilePhoneBookStore combPhBk;
+	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook());
+	if (ret==KErrNone)
+		{
+		INFO_PRINTF1(_L("Combined ME & SIM phonebook supported"));
+
+		combPhBk.GetInfo(status, aInfoPckg);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.11 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		aInfob = &aInfoPckg();
+
+		TEST(aInfob->iCaps && RMobilePhoneStore::KCapsWriteAccess);
+		TEST(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook()));
+		}
+	combPhBk.Close();
+
+		// Combined ME and SIM phone book
+	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook());
+	if(ret==KErrNone)
+		{
+		combPhBk.GetInfo(status, aInfoPckg);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.11 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		aInfob = &aInfoPckg();
+
+		TEST(aInfob->iMaxNumLength >0);
+		TEST(aInfob->iMaxTextLength >=0);
+		TEST(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook()));
+
+		#ifdef __TEST_CANCEL__
+		combPhBk.GetInfo(status, aInfoPckg);
+		combPhBk.CancelAsyncRequest(EMobilePhoneStoreGetInfo);
+		User::WaitForRequest(status);
+		INFO_PRINTF2(_L("Async MT PhoneBook GetInfo Cancel Status = %d"),status);
+		CHECKPOINT_EXPR((status==KErrCancel || status==KErrNone), _L("GT83-TPHBK-003.13 - *** Failed CancelAsyncRequest(EMobilePhoneStoreGetInfo) ***"));
+		#endif
+		}
+	combPhBk.Close();
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CTestReadAndWrite::CTestReadAndWrite()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestReadAndWrite"));
+	}
+
+//------------------------------------------------------------------
+
+void CTestReadAndWrite::WriteToMEPhBkL()
+/**
+ * This function is called from the testReadAndWrite() function. Writes to the 1st 4
+ * locations in the ME PhoneBook. Any existing entries in these locations will be overwritten.
+ * @test GT83-TPHBK-001.04 Test opening a ME-based phonebook of abbreviated dialling numbers.
+ * @test GT83-TPHBK-007.04 "Test writing a single phonebook entry to a specified location in a ME-based phonebook of abbreviated dialling numbers, where the location is empty"
+*/
+	{
+	const TInt KEntries=4;
+	RMobilePhoneBookStore mePhBk;
+	TRequestStatus status;
+	TInt ret(KErrNone);
+	
+	ret=mePhBk.Open(iPhone,  KETelMeAdnPhoneBook);
+	if(ret==KErrNone)
+		{
+		INFO_PRINTF1(_L("Write to the ME PhoneBook..."));
+
+		TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
+
+		_LIT16(KTel,"123456%03d");
+		_LIT16(KText,"TelNo %03d");
+		TBuf16<13> text(KTel), number(KText);
+
+		CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+
+		for(TInt index=1;index<=KEntries;++index)
+			{
+			// First specify starting index and set iNumofEntries to 1, since it is only
+			// possible to write one entry at a time
+
+			number.FillZ(); // Reset previous values
+			number.Zero();
+			text.FillZ();
+			text.Zero();
+			pbData.FillZ();
+			pbData.Zero();
+
+			// convert number into TLV format and append it to allocated buffer
+			number.Format(KTel(), index);
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
+			TESTL(ret == KErrNone) ;
+
+			// convert number type into TLV format and append it to allocated buffer
+			TUint8 tonNpi=KTypeOfNumber; 
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+			TESTL(ret == KErrNone);
+
+			text.Format(KText(), index);
+			INFO_PRINTF2(_L("Writing \'%S\'"),&text);
+
+			// convert text into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
+			TESTL(ret == KErrNone);
+
+			mePhBk.Write(status, pbData, index);
+			User::WaitForRequest(status);
+			TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-007.04 - *** Failed to Write to the ME Phonebook! ***"));
+			}
+		delete pbBuffer;
+		}
+
+	else
+		INFO_PRINTF1(_L("*** Failed to open ME ADN Phonebook! ***"));
+
+	mePhBk.Close();
+	}
+
+//------------------------------------------------------------------
+
+TVerdict CTestReadAndWrite::doTestStepL( void )
+/**
+ * This function creates an array of names and telephone numbers which are to be used as
+ * phone book entries. It then writes these entries synchronously to the SIM phone book
+ * and reads them back. If the Combined Phone book is supported, entries are first written
+ * to the ME phonebook and then read from the Combined Phone book. This is because the MT
+ * (SIM + ME) phonebook does not have write access.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-001.11 Test opening a combination of the ADN stored in ME and ICC
+ * @test GT83-TPHBK-002.11 Test closing a combination of the ADN stored in ME and ICC
+ * @test GT83-TPHBK-006.06 Test retrieval of entries in an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-006.11 Test retrieval of entries in a combination of the ADN stored in ME and ICC
+ * @test GT83-TPHBK-007.06 Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty
+ * @test GT83-TPHBK-007.11 Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing the fixed dialling numbers list, when the phone is in a mode that allows editing the fixed dialling numbers, where the location is empty
+*/
+	{
+	TInt ret=KErrNone;
+	TRequestStatus status;
+	RMobilePhoneBookStore simPhBk;
+
+	TBuf8<KPBDataClientBuf> pbData, pbReadData1, pbReadData2, pbReadEmpty; // Client reserved space for phonebook data
+	TInt requestedIndex(0);
+
+	// Create array of names and numbers
+	const TText16* names[]={(TText16*)KAnnText.iBuf, (TText16*)KMattSText.iBuf, (TText16*)KAndyText.iBuf,
+						  (TText16*)KMattMText.iBuf,(TText16*)KPaulText.iBuf, (TText16*)KMumAndDadText.iBuf,
+						  (TText16*)KSymbolText.iBuf,(TText16*)KTextTooLong.iBuf};
+
+	const TText16* numbers[]={(TText16*)KAnnPhoneNum.iBuf, (TText16*)KMattSPhoneNum.iBuf, (TText16*)KAndyPhoneNum.iBuf,
+							(TText16*)KMattMPhoneNum.iBuf, (TText16*)KPaulPhoneNum.iBuf, (TText16*)KMumAndDadPhoneNum.iBuf,
+							(TText16*)KSymbolPhoneNum.iBuf,(TText16*)KNumberTooLong.iBuf};
+
+
+	TBuf16<KBufSize> entryNumber(numbers[0]);
+	TBuf16<KBufSize> entryName(names[0]);
+	// Motorola T260 requires a pause otherwise it does not respond to the 
+	// next AT command.
+	User::After(500000);
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer();
+	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+
+	// Write the entries to the SIM Phone Book
+	TInt writeIndex(0);
+	TInt i(0), size(KPPBEntriesNum);
+
+	TUint8 tagValue(0);
+	CPhoneBookBuffer::TPhBkTagType aDataType;
+
+
+	/* Read the entries back */
+	TUint16 index;
+	TUint8  tonNpi(0);
+	TPtrC16 number(NULL,0);
+	TPtrC16 text(NULL,0);
+
+
+
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook());
+	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook ***"));
+	if(ret==KErrNone)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
+		for (i=1; i<=size; ++i)
+			{
+			simPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
+			User::WaitForRequest(status);
+
+			//first reset the following three local buffers to delete any existing data
+			entryNumber.Zero();
+			entryName.Zero();
+			pbData.Zero();
+
+			entryNumber=numbers[i-1];
+			entryName=names[i-1];
+
+			// First specify starting index and set iNumofEntries to 1, since it is only
+			// possible to write one entry at a time
+
+			writeIndex = i; // Note that TSY will overwrite any existing data. It is up to
+							// the Sync to check whether it is the first available entry
+
+			// convert number into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, entryNumber);
+			TEST(ret == KErrNone) ;
+
+			// convert type into TLV format and append it to allocated buffer
+			TUint8 tonNpi=KTypeOfNumber; 
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+			TEST(ret == KErrNone) ;
+
+			// convert text into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, entryName);
+			TEST(ret == KErrNone) ;
+
+			simPhBk.Write(status, pbData, writeIndex);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed to write to the ICC ADN Phonebook ***"));
+			}
+
+		/* Reads Forwads and it reads all entries individually */
+		for(i=1; i<=size; ++i)
+			{
+			//first reset the following three local buffers to delete any existing data
+			entryNumber.Zero();
+			entryName.Zero();
+			pbData.Zero();
+
+			// reset all loop variables
+			index = 0;
+			tonNpi = 0;
+			tagValue = 0;
+
+			requestedIndex = i;
+			simPhBk.Read(status, requestedIndex, 1, pbReadData1);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06 - *** Failed to read from ICC ADN Phonebook ***")) ;
+
+			entryNumber=numbers[i-1];
+			entryName=names[i-1];
+
+			// now decode PB data received in TLV format
+			pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
+			pbBuffer->StartRead();       // Start reading received phonebook data
+
+			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+				{
+				switch (tagValue)
+					{
+				case RMobilePhoneBookStore::ETagPBAdnIndex:
+					pbBuffer->GetValue(index);			
+					break;
+				case RMobilePhoneBookStore::ETagPBTonNpi:
+					pbBuffer->GetValue(tonNpi);			
+					break;
+				case RMobilePhoneBookStore::ETagPBText:
+					pbBuffer->GetValue(text);			
+					break;
+				case RMobilePhoneBookStore::ETagPBNumber:
+					pbBuffer->GetValue(number);			
+					break;
+				default:
+					// An unsupported field type - just skip this value
+					pbBuffer->SkipValue(aDataType);
+					break;
+					}
+			}; // end while
+
+			TEST(tonNpi==KTypeOfNumber);
+			TEST(number.Compare(entryNumber)==KErrNone);
+			TEST(text.Compare(entryName)==KErrNone);
+			TEST(index == i) ;
+		} // end for
+
+		// Try to read an empty entry - find out which one is empty first
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
+		simPhBk.GetInfo(status,infoPckg);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		// If used entry information not available, use total entries and guess
+		// last one is not used.
+
+		requestedIndex = (info.iUsedEntries>=0) ? info.iUsedEntries+1 : info.iTotalEntries;
+
+		simPhBk.Read(status, requestedIndex, 1, pbReadEmpty);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ; // If asked to read an empty entry, TSY will return KErrNotFound
+								 // It is now clients responsibility to ensure a valid index is supplied
+
+		// Read Backwards, one by one
+		for(i=size; i>0; --i)
+			{
+			//first reset the following three local buffers to delete any existing data
+			entryNumber.Zero();
+			entryName.Zero();
+			pbData.Zero();
+
+			requestedIndex = i;
+			simPhBk.Read(status, requestedIndex, 1, pbReadData2);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ;
+
+			entryNumber=numbers[i-1];
+			entryName=names[i-1];
+
+			// reset all loop variables
+			index = 0;
+			tagValue = 0;
+
+			// now decode PB data received in TLV format
+			pbBuffer->Set(&pbReadData2); // Set pbBuffer to point to received phonebook data
+			pbBuffer->StartRead();       // Start reading received phonebook data
+			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+				{
+				switch (tagValue)
+					{
+				case RMobilePhoneBookStore::ETagPBAdnIndex:
+					pbBuffer->GetValue(index);			
+					break;
+				case RMobilePhoneBookStore::ETagPBTonNpi:
+					pbBuffer->GetValue(tonNpi);			
+					break;
+				case RMobilePhoneBookStore::ETagPBText:
+					pbBuffer->GetValue(text);			
+					break;
+				case RMobilePhoneBookStore::ETagPBNumber:
+					pbBuffer->GetValue(number);			
+					break;
+				default:
+					// An unsupported field type - just skip this value
+					pbBuffer->SkipValue(aDataType);
+					break;
+					}
+			} // end while
+
+			TEST(tonNpi==KTypeOfNumber);
+			TEST(number.Compare(entryNumber)==KErrNone);
+			TEST(text.Compare(entryName)==KErrNone);
+			TEST(index == i) ;
+			} // end for
+		} //end if
+
+	simPhBk.Close();
+
+// From Combined phone book
+
+	//
+	// This part of the test reads the 1st few entries in the combined Phone Book (ME+
+	// SIM). As the Combined Phonebook does not (should not) have 'WriteAccess', some
+	// entries will first be written to the ME phone book. The SIM phone book
+	// already contains the entries written above.
+	//
+	WriteToMEPhBkL();
+
+	RMobilePhoneBookStore combPhBk;
+	ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook);
+	if(ret==KErrNone)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
+		combPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
+		User::WaitForRequest(status);
+
+		const TInt KEntries=4;		// Same value in WriteToMEPhBk()
+		const TInt KBufSize=20;
+
+		// Read index locations 1 to KEntries
+		for(TUint16 index=1;index<=KEntries;++index)
+			{
+			combPhBk.Read(status, index, 1, pbReadData2);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-006.11 - *** Failed to read from Combined Phonebook ***")) ;
+
+			// now decode PB data received in TLV format
+			TPtrC16 telNumPtr;
+			TPtrC16 textPtr;
+
+			pbBuffer->Set(&pbReadData2); // Set pbBuffer to point to received phonebook data
+			pbBuffer->StartRead();       // Start reading received phonebook data
+
+			while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+				{
+				switch (tagValue)
+					{
+				case RMobilePhoneBookStore::ETagPBText:
+					pbBuffer->GetValue(textPtr);			
+					break;
+				case RMobilePhoneBookStore::ETagPBNumber:
+					pbBuffer->GetValue(telNumPtr);			
+					break;
+				default:
+					// An unsupported field type - just skip this value
+					pbBuffer->SkipValue(aDataType);
+					break;
+					}
+				} 
+
+			//
+			// Assemble the data we expect to have read
+			_LIT16(KTel,"123456%03d");
+			_LIT16(KText,"TelNo %03d");
+			TBuf16<KBufSize> telNumExpected;
+			TBuf16<KBufSize> textExpected;
+			telNumExpected.Format(KTel,index);
+			textExpected.Format(KText,index);
+						
+			//
+			// Check the data we actually read with what we expected to read
+			TEST(telNumPtr.Compare(telNumExpected)==0);
+			TEST(textPtr.Compare(textExpected)==0);
+			} 
+
+		// Entry to write - this should be read only...
+		requestedIndex = 5;
+
+		// convert number into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
+		TEST(ret == KErrNone) ;
+
+		// convert number type into TLV format and append it to allocated buffer
+		tonNpi=KTypeOfNumber;
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+		TEST(ret == KErrNone) ;
+
+		// convert text into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText);
+		TEST(ret == KErrNone) ;
+		}
+	combPhBk.Close();
+	delete pbBuffer;
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CTestDelete::CTestDelete()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestDelete"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestDelete::doTestStepL( void )
+/**
+ * This function deletes the first 7 entries from the SIM phone book
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-006.	06 Test retrieval of the first entry in an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
+ */
+	{
+	TRequestStatus status;
+	RMobilePhoneBookStore simPhBk;
+	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
+	TInt ret(KErrNone);
+	
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook! ***"));
+	if(ret==KErrNone)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
+		simPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
+		User::WaitForRequest(status);
+
+		for(TInt i=1; i<=KPPBEntriesNum; ++i)
+			{
+			simPhBk.Delete(status, i);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - ***Failed RMobilePhoneBookStore::Delete()")) ;
+			}
+
+		// now try to read first (empty) entry
+		simPhBk.Read(status, 1, 1, pbData);
+		User::WaitForRequest(status); 
+		CHECKPOINT(status.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ;
+		// If asked to read an emptry entry, TSY will not return an error
+		// It is now client's responsibility to ensure a valid index is supplied
+		}
+	simPhBk.Close();
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CTestNotifications::CTestNotifications()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestNotifications"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestNotifications::doTestStepL( void )
+/**
+ * This function opens the SIM and MT (if supported) phonebooks and posts a request for
+ * notification. Since this notification is not supported by any phonebook it should receive
+ * KErrNotSupported.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-007.06 "Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty"
+ * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-008.16 Test cancelling deleting individual phonebook entries from a phonebook
+ */
+	{
+	TRequestStatus status;
+	RMobilePhoneBookStore simPhBk, combPhBk;
+	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
+	TInt index(0), ret(0);
+
+	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read/write phonebook entries
+	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	CHECKPOINT(ret, KErrNone, _L("*** Failed to open ICC ADN Phonebook! ***"));
+	if(ret==KErrNone)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 info;
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
+		simPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
+		User::WaitForRequest(status);
+
+		ret=combPhBk.Open(iPhone,  KETelCombinedAdnPhoneBook);
+		if(ret==KErrNone)
+			{
+			combPhBk.GetInfo(status, infoPckg);		// Recommended by EtelMM API documentation
+			User::WaitForRequest(status);
+
+			TRequestStatus status1, status2;
+			TInt index1 = 0;
+			TInt index2 = 0;
+			TUint32 eventToReturn;
+
+			simPhBk.NotifyStoreEvent(status1, eventToReturn,index1);	// Will Notify if an entry is added
+			TEST(status1.Int() == KRequestPending) ;
+
+			combPhBk.NotifyStoreEvent(status2, eventToReturn, index2); // Same here ;-)
+			TEST(status2.Int() == KRequestPending) ;
+
+			index = 1; // write to the first slot
+			// convert number into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
+			TEST(ret == KErrNone) ;
+
+			// convert number type into TLV format and append it to allocated buffer
+			TUint8 tonNpi=KTypeOfNumber;
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+			TEST(ret == KErrNone) ;
+
+			// convert text into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
+			TEST(ret == KErrNone) ;
+
+			simPhBk.Write(status, pbData, index);
+			User::WaitForRequest(status); // Write request
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed RMobilePhoneBookStore::Write() ***")) ;
+
+			User::WaitForRequest(status1); // Notification
+			if (status1==KErrNotSupported)
+				{
+				// Notification is not supported by phonebook store - as expected
+				INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported"));
+				}
+			else
+				{
+				// This should not happen since this notification is not supported by phonebook store
+				INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - failed"));
+				SetTestStepResult(EFail);
+				}
+
+			User::WaitForRequest(status2);
+			if (status2==KErrNotSupported)
+				{
+				// Notification is not supported by phonebook store - as expected
+				INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported"));
+				}
+			else
+				{
+				// This should not happen since this notification is not supported by phonebook store
+				INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - failed"));
+				SetTestStepResult(EFail);
+				}
+
+			status1= KErrNone; // reset status variable
+			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
+
+			combPhBk.NotifyStoreEvent(status2, eventToReturn, index2);
+
+			// Now delete that entry
+			simPhBk.Delete(status, 1);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - *** Failed RMobilePhoneBookStore::Delete() ***")) ;
+
+			User::WaitForRequest(status1);
+			if (status1==KErrNotSupported)
+				{
+				// Notification is not supported by phonebook store - as expected
+				INFO_PRINTF1(_L("Phonebook Store Delete Notification is NOT Supported"));
+				}
+			else
+				{
+				// This should not happen since this notification is not supported by phonebook store
+				INFO_PRINTF1(_L("Phonebook Store Delete Notification IS Supported - failed"));
+				SetTestStepResult(EFail);
+				}
+
+			User::WaitForRequest(status2);
+			if (status2==KErrNotSupported)
+				{
+				// Notification is not supported by phonebook store - as expected
+				INFO_PRINTF1(_L("Phonebook Store Delete Notification is NOT Supported"));
+				}
+			else
+				{
+				// This should not happen since this notification is not supported by phonebook store
+				INFO_PRINTF1(_L("Phonebook Store Delete Notification IS Supported - failed"));
+				SetTestStepResult(EFail);
+				}
+
+			// EntryChangedNotificationCancel Request
+			status1= KErrNone; // reset status variable
+			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
+			simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent);
+			User::WaitForRequest(status1);
+			// Isn't supported
+			// TEST_CHECKL(status1.Int(), KErrNone, _L("GT83-TPHBK-008.16")) ;
+
+			if (status1==KErrNotSupported)
+				{
+				// Notification is not supported by phonebook store - as expected
+				INFO_PRINTF1(_L("Phonebook Store Notification is NOT Supported"));
+				}
+			else
+				{
+				// This should not happen since this notification is not supported by phonebook store
+				INFO_PRINTF1(_L("Phonebook Store Notification cancelled"));
+				SetTestStepResult(EFail);
+				}
+
+			// Cancel Notification Request after 2 seconds
+			status1= KErrNone; // reset status variable
+			simPhBk.NotifyStoreEvent(status1, eventToReturn, index1);
+
+			// Now write the same entry again
+			simPhBk.Write(status, pbData, index);		
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("*** Failed RMobilePhoneBookStore::Write() ***")) ;
+
+			User::After(2000000L);
+			simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent);
+			User::WaitForRequest(status1);
+
+			INFO_PRINTF2(TRefByValue<const TDesC>(_L("Cancel Status = %d")), status1.Int());
+
+			TEST(status1==KErrCancel || status1==KErrNotSupported);
+
+			simPhBk.Delete(status, 1); // Deleting the last added entry so that the test ends "clean".
+			User::WaitForRequest(status);
+			}
+		combPhBk.Close();
+		}
+	simPhBk.Close();
+	delete pbBuffer;
+	return TestStepResult();
+
+	}
+//------------------------------------------------------------------
+
+CTestInvalidOps::CTestInvalidOps()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestInvalidOps"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestInvalidOps::doTestStepL( void )
+/**
+ * Stress test. Tries to perform invalid operations on the phonebook to make sure the
+ * phone errors these operations accordingly.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
+ */
+	{
+	RMobilePhoneBookStore simPhBk;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1	info;
+	TRequestStatus status;
+
+	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
+	TInt index(0); 
+	TInt numEntries(1);
+	TInt ret(KErrNone);
+
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{
+		CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read/write phonebook entries
+		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+
+		// Read and write past the end of phone book - First ask the phone what is the maximum number of
+		// entries, then tries to write past the max index!
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg infoPckg(info);
+		simPhBk.GetInfo(status, infoPckg);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - ***Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		TInt maxNumber = info.iTotalEntries;
+
+		// Write an entry beyond the returned phonebook limit
+		index = maxNumber + 1;
+
+		// convert number into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
+		TEST(ret == KErrNone) ;
+
+		// convert number type into TLV format and append it to allocated buffer
+		TUint8 tonNpi=KTypeOfNumber;
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi,tonNpi);
+		TEST(ret == KErrNone) ;
+
+		// convert text into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
+		TEST(ret == KErrNone) ;
+
+		simPhBk.Write(status, pbData, index);
+		User::WaitForRequest(status); // Write request
+		TEST(status!=KErrNone) ;  // Should not accept Phone book entry maxNumber + 1
+
+		pbData.Zero(); // Clear buffer
+
+		// Read that entry
+		simPhBk.Read(status, index, numEntries, pbData);
+		User::WaitForRequest(status);
+		TEST(status!=KErrNone); // There should be no entry written
+
+		// Delete an entry beyond the returned phonebook limit
+		simPhBk.Delete(status, index); // Testing to delete an impossible indexed entry
+		User::WaitForRequest(status);
+		TEST(status!=KErrNone); // There should be no entry deleted
+
+		// Write text field too long - assume 30 characters is too long!
+		index = 1;
+
+		// convert number into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum);
+		TEST(ret == KErrNone) ;
+
+		// convert number type into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+		TEST(ret == KErrNone) ;
+
+		// convert text into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KTextTooLong);
+		TEST(ret == KErrNone) ;
+
+		simPhBk.Write(status, pbData, index);
+		User::WaitForRequest(status); // Write request
+		if (status==KErrNone)
+			{
+			INFO_PRINTF1(_L("Phone book does not error writing a too long name tag!"));
+			simPhBk.Delete(status, index);
+			User::WaitForRequest(status);
+			TEST(status == KErrNone) ;
+			}
+		else
+			{
+			TEST(status == KErrGeneral) ;
+			}
+
+		// Write number field too long - assume 30 characters is too long!
+		index = 1;
+		// convert number into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, KNumberTooLong);
+		TEST(ret == KErrNone) ;
+
+		// convert number type into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi,tonNpi);
+		TEST(ret == KErrNone) ;
+
+		// convert text into TLV format and append it to allocated buffer
+		ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, KAnnText);
+		TEST(ret == KErrNone) ;
+
+		simPhBk.Write(status, pbData, index);
+		User::WaitForRequest(status); // Write request
+		if (status==KErrNone)
+			{
+			INFO_PRINTF1(_L("Phone book does not error writing a too long number field!"));
+			simPhBk.Delete(status, index);
+			User::WaitForRequest(status);
+			TEST(status == KErrNone) ;
+			}
+		else
+			{
+			TEST(status == KErrGeneral) ;
+			}
+		delete pbBuffer;
+		}
+	simPhBk.Close();
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CTestAdvancedPhBk::CTestAdvancedPhBk()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestAdvancedPhBk"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CTestAdvancedPhBk::doTestStepL( void )
+/**
+ * This function opens an Advanced Gsm SIM PhoneBook, then proceeds to write and then
+ * delete 'KFillTo' entries from the phone book.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-007.06 "Test writing a single phonebook entry to a specified location in an ICC-based phonebook containing voice mailbox numbers, where the location is empty"
+ * @test GT83-TPHBK-008.06 Test deleting an individual phonebook entry from an ICC-based phonebook of abbreviated dialling numbers
+ */
+	{
+	const TInt KFillTo=30;
+
+	TInt ret=KErrNone;
+	TRequestStatus status;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aPhoneStoreInfob;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aPhoneStoreInfoPckgb(aPhoneStoreInfob);
+	RMobilePhoneBookStore simPhBk;
+
+	TBuf8<KPBDataClientBuf> pbData; // Client reserved space for phonebook data
+
+	_LIT16(KTel,"1632960000%02d");
+	_LIT16(KText,"Tel %02d");
+	TBuf16<15> text(KTel), number(KText);
+
+	TInt index(1);
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{
+		// Write the entries
+		INFO_PRINTF1(_L("Fill the 1st 30 locations in the SIM phonebook..."));
+		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
+		User::WaitForRequest(status);
+		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ;
+		aPhoneStoreInfob = aPhoneStoreInfoPckgb();
+		TInt used=aPhoneStoreInfob.iUsedEntries ;
+
+		CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+		pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+
+		// Fields supported by this phonebook are returned to client as capabilities
+		// in aPhoneStoreInfoPckgb. It is assumed that all GSM phonebook fields (index, tel num,
+		// type and name) are supported even though that part of the code has to be tested as well.
+
+		while (used<KFillTo)
+			{
+			// First specify starting index and set iNumofEntries to 1, since it is only
+			// possible to write one entry at a time
+
+			number.FillZ(); // Reset previous values
+			number.Zero();
+			text.FillZ();
+			text.Zero();
+			pbData.FillZ();
+			pbData.Zero();
+
+			// convert number into TLV format and append it to allocated buffer
+			number.Format(KTel(), index);
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
+			TEST(ret == KErrNone) ;
+
+			// convert number type into TLV format and append it to allocated buffer
+			TUint8 tonNpi=KTypeOfNumber; 
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+			TEST(ret == KErrNone) ;
+
+			text.Format(KText(), index);
+			INFO_PRINTF2(_L("Writing \'%S\'"),&text);
+			// convert text into TLV format and append it to allocated buffer
+			ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
+			TEST(ret == KErrNone) ;
+
+			simPhBk.Write(status, pbData, index);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-007.06 - *** Failed RMobilePhoneBookStore::Write() *** "));
+			used++;
+			index++;
+			} // end while
+		delete pbBuffer;
+		}
+	simPhBk.Close();
+
+	// Delete the entries //
+	INFO_PRINTF1(_L("Re-opening phonebook..."));
+	ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{
+		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+		aPhoneStoreInfob = aPhoneStoreInfoPckgb();
+		INFO_PRINTF1(_L("Deleting the entries..."));
+		for (int iy=1;iy<=KFillTo;++iy)
+			{
+			INFO_PRINTF2(_L("Deleting %03d"),iy);
+			simPhBk.Delete(status, iy);
+			User::WaitForRequest(status);
+			CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-008.06 - *** Failed RMobilePhoneBookStore::Delete() ***"));
+			}
+		}
+	simPhBk.Close();
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CRetrievalOfWholePhoneBook::CRetrievalOfWholePhoneBook()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("RetrievalOfWholePhoneBook"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CRetrievalOfWholePhoneBook::doTestStepL( void )
+/**
+ * Detected Network test. This function gets the number of available networks
+ * and information on these networks. Also tests some Cancel Requests.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-004.06 "Obtain total number of slots and number of slots used, using GetInfo method. Test  retrieval of the whole list of phone book entries from an ICC-based phonebook of abbreviated dialling numbers"
+ */
+	{
+	INFO_PRINTF1(_L("==============================="));
+	INFO_PRINTF1(_L(" Test retrieval of a Phonebook "));
+	INFO_PRINTF1(_L("==============================="));
+	// First write 15 entries to the phone
+	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
+	WriteBatchOfEntriesToThePhoneL();
+
+	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
+	TBuf8<KPBDataClientBuf> pbReadData1; // Client reserved space for phonebook data
+	TRequestStatus status;
+
+	TUint16 index(0);
+	TUint8 tonNpi;
+	TPtrC16 number(NULL,0);
+	TPtrC16 text(NULL,0);
+
+	TUint8 tagValue(0);
+	CPhoneBookBuffer::TPhBkTagType aDataType;
+
+	RMobilePhoneBookStore simPhBk;
+	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{	
+		// Get total number of phonebook entires
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo;
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo);
+		simPhBk.GetInfo(status, aInfoPckg);
+		User::WaitForRequest(status);
+		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ;
+
+		INFO_PRINTF2(_L("Start retrieving %d phonebook entries"), aInfo.iTotalEntries);
+
+		simPhBk.Read(status, 1, aInfo.iTotalEntries, pbReadData1);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-004.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
+
+		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
+		// data to retrieve individual entries
+		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
+		pbBuffer->StartRead();       // Start reading received phonebook data
+		TInt entryCount=0;
+		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+			{
+			switch (tagValue)
+				{
+			case RMobilePhoneBookStore::ETagPBAdnIndex:
+				entryCount++;
+				pbBuffer->GetValue(index);			
+				break;
+			case RMobilePhoneBookStore::ETagPBTonNpi:
+				pbBuffer->GetValue(tonNpi);			
+				break;
+			case RMobilePhoneBookStore::ETagPBText:
+				pbBuffer->GetValue(text);			
+				break;
+			case RMobilePhoneBookStore::ETagPBNumber:
+				pbBuffer->GetValue(number);			
+				break;
+			default:
+				// An unsupported field type - just skip this value
+				pbBuffer->SkipValue(aDataType);
+				break;
+				}
+
+			// Print each individual entry
+			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
+				{
+				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
+				}
+			} // end while
+		}
+	simPhBk.Close();
+	delete pbBuffer;
+	INFO_PRINTF1(_L("Deleting the entries "));
+	clearPhoneBookL(KETelIccAdnPhoneBook());
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CRetrievalOfBatchOfPhoneBookEntries::CRetrievalOfBatchOfPhoneBookEntries()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("RetrievalOfBatchOfPhoneBookEntries"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CRetrievalOfBatchOfPhoneBookEntries::doTestStepL( void )
+/**
+ * Test of retrieval of a batch of phonebook entries. This method is mainly used to test
+ * removal of partially populated phonebook entries by the MMTSY.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-005.06 Test retieval of half of the entries from an ICC-based phonebook of abbreviated dialling numbers
+ */
+	{
+	INFO_PRINTF1(_L("================================================"));
+	INFO_PRINTF1(_L(" Test retrieval of a Batch of Phonebook Entries "));
+	INFO_PRINTF1(_L("================================================"));
+	// First write 15 entries to the phone
+	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
+	WriteBatchOfEntriesToThePhoneL();
+
+	RMobilePhoneBookStore simPhBk;
+	TRequestStatus status;
+	TBuf8<KPBDataClientSmallBuf> pbReadData1; // Client reserved space for phonebook data
+	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
+
+	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg dummyInfoPckg(iDummyInfo);
+		simPhBk.GetInfo(status, dummyInfoPckg);		// Recommended by EtelMM API documentation
+		User::WaitForRequest(status);
+		TEST_CHECKL(status.Int(), KErrNone, _L("*** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		INFO_PRINTF1(_L("This test can take up to a minute to complete..."));
+		TInt startIndex = 3; // Where to start in the phonebook
+		TInt batchSize = 4; // How many entries to get.
+
+		INFO_PRINTF3(_L("Start retrieving a batch of %d phonebook entries with starting index %d"), batchSize, startIndex);
+
+		simPhBk.Read(status, startIndex, batchSize, pbReadData1);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-005.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
+
+		TUint16 index(0);
+		TUint8 tonNpi;
+		TPtrC16 number(NULL,0);
+		TPtrC16 text(NULL,0);
+
+		TUint8 tagValue(0);
+		CPhoneBookBuffer::TPhBkTagType aDataType;
+
+		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
+		// data to retrieve/decode individual entries
+		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
+		pbBuffer->StartRead();       // Start reading received phonebook data
+		TInt entryCount=0;
+		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+			{
+			switch (tagValue)
+				{
+			case RMobilePhoneBookStore::ETagPBAdnIndex:
+				entryCount++;
+				pbBuffer->GetValue(index);			
+				break;
+			case RMobilePhoneBookStore::ETagPBTonNpi:
+				pbBuffer->GetValue(tonNpi);			
+				break;
+			case RMobilePhoneBookStore::ETagPBText:
+				pbBuffer->GetValue(text);			
+				break;
+			case RMobilePhoneBookStore::ETagPBNumber:
+				pbBuffer->GetValue(number);			
+				break;
+			default:
+				// An unsupported field type - just skip this value
+				pbBuffer->SkipValue(aDataType);
+				break;
+				}
+
+			// Print each individual entry
+			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
+				{
+				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
+				}
+			} // end while
+		}
+	simPhBk.Close();
+	delete pbBuffer;
+
+	INFO_PRINTF1(_L("Deleting the entries "));
+	clearPhoneBookL(KETelIccAdnPhoneBook());
+	return TestStepResult();
+	}
+//------------------------------------------------------------------
+
+CRetrievalOfHalfOfPhoneBookEntries::CRetrievalOfHalfOfPhoneBookEntries()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("RetrievalOfHalfOfPhoneBookEntries"));
+	}
+//------------------------------------------------------------------
+
+TVerdict CRetrievalOfHalfOfPhoneBookEntries::doTestStepL( void )
+/**
+ * Test of retrieval of a half of phonebook entries. This method is mainly used to test
+ * removal of partially populated phonebook entries by the MMTSY.
+ * @test GT83-TPHBK-001.06 Test opening an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-002.06 Test closing an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-003.06 Test retrieval of the phone book store info and capabilities of an ICC-based phonebook of abbreviated dialling numbers
+ * @test GT83-TPHBK-005.06 Test retieval of half of the entries from an ICC-based phonebook of abbreviated dialling numbers
+ */
+	{
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aPhoneStoreInfob;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aPhoneStoreInfoPckgb(aPhoneStoreInfob);
+
+	INFO_PRINTF1(_L("================================================"));
+	INFO_PRINTF1(_L(" Test retrieval of a Batch of Phonebook Entries "));
+	INFO_PRINTF1(_L("================================================"));
+	// First write 15 entries to the phone
+	INFO_PRINTF1(_L("Writing 15 entries to the phone"));
+	WriteBatchOfEntriesToThePhoneL();
+
+	RMobilePhoneBookStore simPhBk;
+	TRequestStatus status;
+	TBuf8<KPBDataClientBuf> pbReadData1; // Client reserved space for phonebook data
+	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
+
+	TInt ret=simPhBk.Open(iPhone,  KETelIccAdnPhoneBook);
+	TEST_CHECKL(ret, KErrNone, _L("*** Failed to open ICC ADN PhoneBook ***"));
+	if(ret==KErrNone)
+		{
+		INFO_PRINTF1(_L("This test can take up to a minute to complete..."));
+
+		simPhBk.GetInfo(status, aPhoneStoreInfoPckgb);
+		User::WaitForRequest(status);
+		TEST_CHECKL(status.Int(), KErrNone, _L("GT83-TPHBK-003.06 - *** Failed RMobilePhoneBookStore::GetInfo() ***")) ;
+
+		aPhoneStoreInfob = aPhoneStoreInfoPckgb() ;
+		TInt batchSize = (aPhoneStoreInfob.iTotalEntries)/2; //50%
+
+		INFO_PRINTF2(_L("Start retrieving a batch of %d phonebook entries with starting index 1"), batchSize);
+
+		simPhBk.Read(status, 1, batchSize, pbReadData1);
+		User::WaitForRequest(status);
+		CHECKPOINT(status.Int(), KErrNone, _L("GT83-TPHBK-005.06 - *** Failed RMobilePhoneBookStore::Read() ***")) ;
+
+		TUint16 index(0);
+		TUint8 tonNpi;
+		TPtrC16 number(NULL,0);
+		TPtrC16 text(NULL,0);
+
+		TUint8 tagValue(0);
+		CPhoneBookBuffer::TPhBkTagType aDataType;
+
+		// pbReadData1 will contain a batch of retrieved entries, so start by parsing through its
+		// data to retrieve/decode individual entries
+		pbBuffer->Set(&pbReadData1); // Set pbBuffer to point to received phonebook data
+		pbBuffer->StartRead();       // Start reading received phonebook data
+		TInt entryCount=0;
+		while (pbBuffer->GetTagAndType(tagValue, aDataType)==KErrNone)
+			{
+			switch (tagValue)
+				{
+			case RMobilePhoneBookStore::ETagPBAdnIndex:
+				entryCount++;
+				pbBuffer->GetValue(index);			
+				break;
+			case RMobilePhoneBookStore::ETagPBTonNpi:
+				pbBuffer->GetValue(tonNpi);			
+				break;
+			case RMobilePhoneBookStore::ETagPBText:
+				pbBuffer->GetValue(text);			
+				break;
+			case RMobilePhoneBookStore::ETagPBNumber:
+				pbBuffer->GetValue(number);			
+				break;
+			default:
+				// An unsupported field type - just skip this value
+				pbBuffer->SkipValue(aDataType);
+				break;
+				}
+
+			// Print each individual entry
+			if((tagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (entryCount>1)) // Only print if all fields retrieved
+				{
+				INFO_PRINTF4(_L("%d = >%S<  >%S<"), index, &text, &number); // It is not displaying data corectly on the console
+				}
+			} // end while
+		}
+	simPhBk.Close();
+	delete pbBuffer;
+
+	INFO_PRINTF1(_L("Deleting the entries "));
+	clearPhoneBookL(KETelIccAdnPhoneBook());
+	return TestStepResult();
+	}