diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/simtsy/test/Te_SimPhBk/Te_SimPhBk.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/simtsy/test/Te_SimPhBk/Te_SimPhBk.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,2693 @@ + +// 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: +// TS_SimPhBk.CPP +// This tests the GSM Phone Book functions including phonebook searching. +// The PhoneBook search functions are implemented in the T_SEARCH files. +// +// + +/** + @file +*/ + +#include "Te_SimPhBk.h" +#include "Te_SimPhBkConstants.h" + +#define __TEST_CANCEL__ + +#define __TEST_WRITE_TO_NEXT_AVAIL__ + + +#define SIM_TSY + +//------------------------------------------------------------------ +// ** TEST 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 aStatus; + RMobilePhoneStore::TMobilePhoneStoreInfoV1 aPhoneStoreInfo; + RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg aPhoneStoreInfoPckg(aPhoneStoreInfo); + + iPhone.GetPhoneId(aStatus, aPhoneId); + User::WaitForRequest(aStatus); + if(aStatus == KErrNotSupported) + { + INFO_PRINTF1(_L("iPhone.GetPhoneId(aStatus, aPhoneId) not supported")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelMeMissedPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"MISSED_CALLS\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"MISSED_CALLS\" not supported by this phone")); + } + + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelMeReceivedPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"RECEIVED_CALLS\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"RECEIVED_CALLS\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelMeAdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"ME_PHONEBOOK\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"ME_PHONEBOOK\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelIccVoiceMailBox); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"VOICE_MAILBOX\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"VOICE_MAILBOX\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelIccAdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"SIM_PHONEBOOK\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"SIM_PHONEBOOK\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelCombinedAdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"COMBINED_SIM_ME\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"COMBINED_SIM_ME\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelIccFdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"FIXED_DIAL_NUM\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"FIXED_DIAL_NUM\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelIccSdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"SERV_DIAL_NUM\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"SERV_DIAL_NUM\" not supported by this phone")); + } + + iPhone.GetPhoneStoreInfo(aStatus, aPhoneStoreInfoPckg, KETelIccBdnPhoneBook); + User::WaitForRequest(aStatus); + INFO_PRINTF2(TRefByValue(_L("Testing \"BARRED_DIAL_NUM\" returned %d")), aStatus.Int()); + if(aStatus.Int() == KErrNone) + { + aPhoneStoreInfo = aPhoneStoreInfoPckg(); + CheckPhoneBookInfoL(aPhoneStoreInfo); + } + else + { + INFO_PRINTF1(_L("Phone Book \"BARRED_DIAL_NUM\" not supported by this phone")); + } + 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 + */ + { + // SIM phone book - mandatory + TInt ret=KErrNone; + TRequestStatus aStatus; + RMobilePhoneBookStore simPhBk; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo); + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 *aInfob; + + ret=simPhBk.Open(iPhone, KETelIccAdnPhoneBook()); + if( KErrNone ==ret ) + { + + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.06")) ; + simPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + aInfob = &aInfoPckg(); + + //MKV Print_TMobilePhoneBookInfoV1(aInfoPckg()) ; + + TESTL(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess); + TESTL(!aInfob->iName.Compare(KETelIccAdnPhoneBook())); + simPhBk.Close(); + + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk.Close(); + } + + // ME phone book - optional support by the phones + RMobilePhoneBookStore mePhBk; + ret=mePhBk.Open(iPhone, KETelMeAdnPhoneBook()); + + if (ret==KErrNone) + { + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.06")) ; + INFO_PRINTF1(_L("ME phonebook supported")); + iMESupported=ETrue; + + mePhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.04")) ; + + aInfob = &aInfoPckg(); + + TESTL(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess); + TESTL(!aInfob->iName.Compare(KETelMeAdnPhoneBook())); + mePhBk.Close(); + CHECKPOINT(0, KErrNone, _L("GT83-TPHBK-002.06")) ; + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelMeAdnPhoneBook?")) ; + mePhBk.Close(); + } + + // Combined ME and SIM phone book - optional support by the phones + if (iMTSupported) + { + RMobilePhoneBookStore combPhBk; + ret=combPhBk.Open(iPhone, KETelCombinedAdnPhoneBook()); + if (ret==KErrNone) + { + INFO_PRINTF1(_L("Combined ME & SIM phonebook supported")); + iMTSupported=ETrue; + + combPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.11")) ; + + aInfob = &aInfoPckg(); + + TESTL(aInfob->iCaps && RMobilePhoneStore::KCapsWriteAccess); + TESTL(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook())); + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelCombinedAdnPhoneBook?")) ; + } + combPhBk.Close(); + + // Combined ME and SIM phone book + if (iMTSupported) + { + RMobilePhoneBookStore combPhBk; + TESTL(combPhBk.Open(iPhone, KETelCombinedAdnPhoneBook())==KErrNone); + + combPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.11")) ; + + aInfob = &aInfoPckg(); + + TESTL(aInfob->iMaxNumLength >0); + TESTL(aInfob->iMaxTextLength >=0); + TESTL(!aInfob->iName.Compare(KETelCombinedAdnPhoneBook())); + TESTL(aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess); + + #ifdef __TEST_CANCEL__ + combPhBk.GetInfo(aStatus, aInfoPckg); + combPhBk.CancelAsyncRequest(EMobilePhoneStoreGetInfo); + User::WaitForRequest(aStatus); + INFO_PRINTF2(_L("Async MT PhoneBook GetInfo Cancel Status = %d"),aStatus.Int()); + TESTL(aStatus==KErrCancel || aStatus==KErrNone); + TEST_CHECKL((aStatus==KErrCancel || aStatus==KErrNone), ETrue, _L("GT83-TPHBK-003.13")); + #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 aStatus; + CHECKPOINT(mePhBk.Open(iPhone,KETelMeAdnPhoneBook), KErrNone, _L("GT83-TPHBK-001.04")); + + INFO_PRINTF1(_L("Write to the ME PhoneBook...")); + + TBuf8 pbData; // Client reserved space for phonebook data + + _LIT8(KTel,"123456%03d"); + _LIT8(KText,"TelNo %03d"); + TBuf8<13> text(KTel), number(KText); + TBuf<13> showText; + + CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data + pbBuffer->Set(&pbData); // Set it to point to the Client buffer + + TInt index(0); + TInt idx(1); + + while (index <= KEntries) + { + // First specify starting index and set iNumofEntries to 1, since it is only + // possible to write one entry at a time + + //index = idx; // set index + + 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); + TInt ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, number); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + + text.Format(KText(), index); + showText.Copy(text) ; + INFO_PRINTF2(_L("Writing %S"), &showText); + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, text); + + mePhBk.Write(aStatus, pbData, idx); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.04")); + User::WaitForRequest(aStatus); + index++; + } + + mePhBk.Close(); + + delete pbBuffer; + } +//------------------------------------------------------------------ + +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-002.11 Test closing a combination of the ADN stored in ME and ICC + * @test GT83-TPHBK-001.11 Test opening a combination of the ADN stored in ME and ICC + * @test GT83-TPHBK-006.06 Test retrieval of the first entry in an ICC-based phonebook of abbreviated dialling numbers + * @test GT83-TPHBK-006.11 Test retrieval of the first entry 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 aStatus; + RMobilePhoneBookStore* simPhBk = new(ELeave) RMobilePhoneBookStore(); + CleanupStack::PushL(simPhBk); + + // 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}; + + TBuf entryNumber(numbers[0]); + TBuf entryName(names[0]); + + CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); + CleanupStack::PushL(pbBuffer); + + // Write the entries to the SIM Phone Book + TBuf8* pbData = new(ELeave) TBuf8; // Client reserved space for phonebook data + CleanupStack::PushL(pbData); + + TBuf8* pbReadData1 = new(ELeave) TBuf8; // Client reserved space for phonebook data + CleanupStack::PushL(pbReadData1); + + TBuf8* pbReadData2 = new(ELeave) TBuf8; // Client reserved space for phonebook data + CleanupStack::PushL(pbReadData2); + + TBuf8* pbReadEmpty = new(ELeave) TBuf8; // Client reserved space for phonebook data + CleanupStack::PushL(pbReadEmpty); + + TInt requestedIndex(0), numOfEntries(1); + + // Read the entries back + TPtrC number(NULL,0); + TPtrC text(NULL,0); + + TUint8 aTagValue(0); + CPhoneBookBuffer::TPhBkTagType aDataType; + TPtrC field(NULL,0); + TUint i(0) ; + TInt counter(0); + TUint type; + + ret=simPhBk->Open(iPhone, KETelIccAdnPhoneBook()); + + if( ret != KErrNone) + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk->Close(); + } + else + { + TUint size(KPPBEntriesNum); + TInt writeIndex(0); + TUint index; + + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.06")) ; + + pbBuffer->Set(pbData); // Set it to point to the Client buffer + + for (i=1; i<=size; ++i) + { + //first reset the following three local buffers to delete any existing data + entryNumber.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData->FillZ(); + 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((TUint8)RMobilePhoneBookStore::ETagPBNumber, entryNumber); + TESTL(ret == KErrNone) ; + + // convert type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); // AMC - "Unknown" numbers are written, so unknown numbers will be read in the tests below. + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, entryName); + TESTL(ret == KErrNone) ; + + simPhBk->Write(aStatus, *pbData, writeIndex); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.06")); //??????? + } + + + // 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.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData->FillZ(); + pbData->Zero(); + + // reset all loop variables + index = 0; + type = 0; + counter = 0; + aTagValue = 0; + + requestedIndex = i; + simPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadData1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ; + + 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(counter < pbReadData1->Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + pbBuffer->GetValue(int8); + counter = counter + 2; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBTonNpi) + { + type = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + index = int16; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + TESTL(TInt(type)==RMobilePhone::EUnknownNumber); + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i) ; + } // end for + + + // Try to read an empty entry + requestedIndex = i+1; // Now set index to point to last entry in phonebook + simPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadEmpty); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ; // If asked to read an empty entry, TSY will not return an error + // 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.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData->FillZ(); + pbData->Zero(); + + requestedIndex = i; + simPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadData2); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ; + + entryNumber=numbers[i-1]; + entryName=names[i-1]; + + // reset all loop variables + index = 0; + type = 0; + counter = 0; + aTagValue = 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(counter < pbReadData2->Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 2; // add tag-field only in case that is beginning of new field + pbBuffer->GetValue(int8); // + if(aTagValue == RMobilePhoneBookStore::ETagPBTonNpi) + { + type = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + index = int16; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + TESTL(TInt(type)==RMobilePhone::EUnknownNumber); // AMC - modified to match the Phonebook number "type" written at the start of this test program. + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i) ; + } // end for + + // Try to read below the phonebook limits + requestedIndex = i-1; + simPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadEmpty); + User::WaitForRequest(aStatus); + INFO_PRINTF2(_L("DEBUG_LOG: aStatus == %d"), aStatus.Int()); + //CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ; // If asked to read an empty entry, TSY will not return an error + TEST((aStatus.Int()==KErrNone) || (aStatus.Int()==KErrArgument)); + // It is now clients responsibility to ensure a valid index is supplied + + // Read by index, uses the Read() method + for(i=1; i<=size; ++i) + { + //first reset the following three local buffers to delete any existing data + entryNumber.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData->FillZ(); + pbData->Zero(); + + requestedIndex = i; + simPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadData1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ; + + entryNumber=numbers[i-1]; + entryName=names[i-1]; + + // reset all loop variables + index = 0; + type = 0; + counter = 0; + aTagValue = 0; + + // 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(counter < pbReadData1->Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 2; // add tag-field only in case that is beginning of new field + pbBuffer->GetValue(int8); // + if(aTagValue == RMobilePhoneBookStore::ETagPBTonNpi) + { + type = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + index = int16; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + TESTL(TInt(type)==RMobilePhone::EUnknownNumber); // AMC - modified to match the Phonebook number "type" written at the start of this test program. + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i) ; + } + + simPhBk->Close(); + } +// From Combined phone book + + if (iMTSupported) + { + // + // 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(); //writing 5 entries to ME ph/book + + RMobilePhoneBookStore* combPhBk = new(ELeave) RMobilePhoneBookStore(); + CleanupStack::PushL(combPhBk); + + ret=combPhBk->Open(iPhone, KETelCombinedAdnPhoneBook); + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.11")) ; + + const TUint KEntries=4; // Same value in WriteToMEPhBk() + const TInt KBufSize=20; + + _LIT(KTel,"123456%03d"); + _LIT(KText,"TelNo %03d"); + TBuf TelNum; + TBuf Text; + + // Read index locations 1 to KEntries + TUint index=1; + i = KEntries ; + while (index<=KEntries) + { + requestedIndex = i; + TelNum.Format(KTel,index); + Text.Format(KText,index); + + combPhBk->Read(aStatus, requestedIndex, numOfEntries, *pbReadData2); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.11")) ; + entryNumber=numbers[i-1]; + entryName=names[i-1]; + + // reset all loop variables + index = 0; + type = 0; + counter = 0; + aTagValue = 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(counter < pbReadData2->Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBTonNpi) + { + type = int16; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + } // end while + + + TESTL(TInt(type)==RMobilePhone::EUnknownNumber); // AMC - modified to match the Phonebook number "type" written at the start of this test program. + TESTL(number.Compare(TelNum)==KErrNone); + TESTL(text.Compare(Text)==KErrNone); + TESTL(index == i) ; + index++; + } // end while + + // Entry to write - this should be read only... + requestedIndex = 5; + + // convert number into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText); + TESTL(ret == KErrNone) ; + + combPhBk->Write(aStatus, *pbData, requestedIndex); + User::WaitForRequest(aStatus); + if (aStatus!=KErrNotSupported) + { + INFO_PRINTF1(_L("A write has completed successfully to the MT PhoneBook.")); + INFO_PRINTF1(_L("** The MT PhoneBook should NOT have WriteAccess!! ** ")); + } + else + { + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.11")) ; + } + + combPhBk->Close(); + CleanupStack::PopAndDestroy(combPhBk); + } + + CleanupStack::PopAndDestroy(pbReadEmpty); + CleanupStack::PopAndDestroy(pbReadData2); + CleanupStack::PopAndDestroy(pbReadData1); + CleanupStack::PopAndDestroy(pbData); + CleanupStack::PopAndDestroy(pbBuffer); + CleanupStack::PopAndDestroy(simPhBk); + + 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 aStatus; + RMobilePhoneBookStore simPhBk; + TBuf8 pbData; // Client reserved space for phonebook data + TInt index(0), numOfEntries(0); + + TInt ret = simPhBk.Open(iPhone, KETelIccAdnPhoneBook) ; + if( ret ==KErrNone) + { + TInt i=0; + TInt size=KPPBEntriesNum; + + for(i=1; i<=size; ++i) + { + simPhBk.Delete(aStatus, i); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-008.06")) ; + } + + // now try to read first (empty) entry + index = 1; + simPhBk.Read(aStatus, index, numOfEntries, pbData); + User::WaitForRequest(aStatus); //hs + CHECKPOINT(aStatus.Int(), KErrNotFound, _L("GT83-TPHBK-006.06")) ; + // If asked to read an emptry entry, TSY will return KErrNotFound error + // It is now client's responsibility to ensure a valid index is supplied + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + } + + 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 + * @test GT83-TPHBK-007.17 Test writing a single phonebook entry to a combination of the ADN stored in ME and ICC + * @test GT83-TPHBK-008.13 Test deleting an individual phonebook entry from a combination of the ADN stored in ME and ICC +*/ + { + RMobilePhoneBookStore simPhBk, combPhBk; + TBuf8 pbData; // Client reserved space for phonebook data + TInt index(0), ret(0); + TRequestStatus aStatus, status1, status2; + TInt index1 = 0; + TInt index2 = 0; + TUint32 eventToReturn; + + 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) ; + + if(ret!=KErrNone) + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + } + else + { + + simPhBk.NotifyStoreEvent(status1, eventToReturn,index1); // Will Notify if an entry is added + TESTL(status1.Int() == KRequestPending) ; + + if (iMTSupported && combPhBk.Open(iPhone, KETelCombinedAdnPhoneBook)==KErrNone) + { + TESTL(combPhBk.Open(iPhone, KETelCombinedAdnPhoneBook)==KErrNone); + combPhBk.NotifyStoreEvent(status2, eventToReturn, index2); // Same here ;-) + } + + index = 1; // write to the first slot + // convert number into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText); + TESTL(ret == KErrNone) ; + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.06")) ; + User::WaitForRequest(status1); // Notification + + if (status1==KErrNotSupported) + { + // Notification is not supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported")); + } + else + { + // This should happen since this notification is supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - Succeeded")); + } + + if (iMTSupported) + { + + combPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.17")) ; + + User::WaitForRequest(status2); + + if (status2==KErrNotSupported) + { + // Notification is not supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Write Notification is NOT Supported")); + } + else + { + // This should happen since this notification is not supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Write Notification IS Supported - Succeeded")); + } + } + + status1= KErrNone; // reset status variable + simPhBk.NotifyStoreEvent(status1, eventToReturn, index1); + + if (iMTSupported) + { + combPhBk.NotifyStoreEvent(status2, eventToReturn, index2); + } + + // Now delete that entry + simPhBk.Delete(aStatus, 1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-008.06")) ; + + User::WaitForRequest(status1); + if (status1==KErrNotSupported) + { + // Notification is not supported by phonebook store + 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 - Succeeded")); + } + + if (iMTSupported) + { + // Now delete that entry + combPhBk.Delete(aStatus, 1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-008.013")) ; + + User::WaitForRequest(status2); + if (status2==KErrNotSupported) + { + // Notification is not supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Delete Notification is NOT Supported")); + } + else + { + // This should happen since this notification is supported by phonebook store + INFO_PRINTF1(_L("Phonebook Store Delete Notification IS Supported - Succeeded")); + } + } + + // EntryChangedNotificationCancel Request + status1= KErrNone; // reset status variable + simPhBk.NotifyStoreEvent(status1, eventToReturn, index1); + simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent); + User::WaitForRequest(status1); + CHECKPOINT(status1.Int(), KErrCancel, _L("GT83-TPHBK-008.16")) ; + + // Cancel Notification Request after 2 seconds + status1= KErrNone; // reset status variable + simPhBk.NotifyStoreEvent(status1, eventToReturn, index1); + User::After(2000000L); + simPhBk.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent); + User::WaitForRequest(status1); + + INFO_PRINTF2(TRefByValue(_L("Cancel Status = %d")), status1.Int()); + TESTL(status1==KErrCancel); + + // Now write the same entry again + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-0")) ; + + simPhBk.Delete(aStatus, 1); // Deleting the last added entry so that the test ends "clean". + User::WaitForRequest(aStatus); + if (iMTSupported) + { + 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 aInfo; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 *bInfo; + TRequestStatus aStatus; + + TInt ret = simPhBk.Open(iPhone, KETelIccAdnPhoneBook) ; + if(ret != KErrNone) + { + ERR_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk.Close() ; + return EFail; + } + + TBuf8 pbData; // Client reserved space for phonebook data + TInt maxNumber, index(0), numEntries(1); + + 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 aInfoPckg(aInfo); + simPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + bInfo = &aInfoPckg(); + + maxNumber = bInfo->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((TUint8)RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText); + TESTL(ret == KErrNone) ; + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + TESTL(aStatus == KErrArgument) ; // Should not accept Phone book entry maxNumber + 1 + // Anuli (12/12/01) changed from KErrGeneral to KErrArgument + pbData.FillZ(); // Clear the buffer + pbData.Zero(); + + // Read that entry + index=maxNumber + 1; + simPhBk.Read(aStatus, index, numEntries, pbData); + User::WaitForRequest(aStatus); + TESTL(aStatus==KErrArgument); // There should be no entry written + + // Delete an entry beyond the returned phonebook limit + simPhBk.Delete(aStatus, maxNumber + 1000L); // Testing to delete an impossible indexed entry + User::WaitForRequest(aStatus); + TESTL(aStatus == KErrArgument) ; + + // Write text field too long - 62 character is more than 60 defined in config file + index = 1; + + // convert number into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KTextTooLong); + TESTL(ret == KErrNone) ; + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + if (aStatus==KErrNone) + { + INFO_PRINTF1(_L("Phone book does not error writing a too long name tag!")); + simPhBk.Delete(aStatus, index); + User::WaitForRequest(aStatus); + TESTL(aStatus == KErrNone) ; + } + else + { + TESTL(aStatus == KErrOverflow) ; + } + + // Write number field too long - assume 80 characters is more than 50 defined in config file + index = 1; + // convert number into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, KNumberTooLong); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText); + TESTL(ret == KErrNone) ; + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + if (aStatus==KErrNone) + { + INFO_PRINTF1(_L("Phone book does not error writing a too long number field!")); + simPhBk.Delete(aStatus, index); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-0")) ; + } + else + { + CHECKPOINT(aStatus.Int(), KErrOverflow, _L("GT83-TPHBK-0")) ; + } + + + // Write International TON! Some phones do not support this. + index = 1; + + // convert number into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, KAnnPhoneNum); + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-0")) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EInternationalNumber); + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-0")) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, KAnnText); + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-0")) ; + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); // Write request + if (aStatus==KErrNone) + { + index=maxNumber + 1; + simPhBk.Read(aStatus, index, numEntries, pbData); + User::WaitForRequest(aStatus); + INFO_PRINTF1(_L("Phone book does not error write with International TOA ")); + simPhBk.Delete(aStatus, 1); + User::WaitForRequest(aStatus); + } + else + CHECKPOINT(aStatus.Int(), KErrGeneral, _L("GT83-TPHBK-0")) ; + + User::After(5000000L); + + simPhBk.Close(); + delete pbBuffer; + 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 aStatus; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aPhoneStoreInfob; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aPhoneStoreInfoPckgb(aPhoneStoreInfob); + RMobilePhoneBookStore simPhBk; + + TBuf8 pbData; // Client reserved space for phonebook data + + _LIT(KTel,"1632960000%02d"); + _LIT(KText,"Tel %02d"); + TBuf<15> text(KTel), number(KText); + + TInt index(1); + + ret=simPhBk.Open(iPhone, KETelIccAdnPhoneBook()); + if( ret == KErrNone) + { + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.06")) ; + + simPhBk.DeleteAll(aStatus); + User::WaitForRequest(aStatus); + + // Write the entries + INFO_PRINTF1(_L("Fill the 1st 30 locations in the SIM phonebook...")); + + simPhBk.GetInfo(aStatus, aPhoneStoreInfoPckgb); + User::WaitForRequest(aStatus); + + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + aPhoneStoreInfob = aPhoneStoreInfoPckgb(); + TInt used=aPhoneStoreInfob.iUsedEntries ; + + TESTL(used==0); + + 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 (usedPutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBNumber, number); + TESTL(ret == KErrNone) ; + + // convert number type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + + text.Format(KText(), index); + INFO_PRINTF2(_L("Writing \'%S\'"),&text); + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, text); + + simPhBk.Write(aStatus, pbData, index); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-007.06")); + used++; + index++; + } // end while + + delete pbBuffer; + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + } + simPhBk.Close(); + + // Delete the entries // + INFO_PRINTF1(_L("Re-opening phonebook...")); + ret=simPhBk.Open(iPhone, KETelIccAdnPhoneBook()); + if( ret == KErrNone) + { + CHECKPOINT(ret, KErrNone, _L("GT83-TPHBK-001.06")) ; + simPhBk.GetInfo(aStatus, aPhoneStoreInfoPckgb); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + aPhoneStoreInfob = aPhoneStoreInfoPckgb(); + INFO_PRINTF1(_L("Deleting the entries...")); + for (int iy=1;iy<=KFillTo;++iy) + { + INFO_PRINTF2(_L("Deleting %03d"),iy); + simPhBk.Delete(aStatus, iy); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-008.06")); + } + } + else + { + INFO_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + } + 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("===============================")); + INFO_PRINTF1(_L("This test can take up to a minute to complete...")); + + RMobilePhoneBookStore simPhBk; + TInt ret = simPhBk.Open(iPhone, KETelIccAdnPhoneBook) ; + if(ret != KErrNone) + { + ERR_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk.Close() ; + return EFail; + } + + // 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 pbReadData1; // Client reserved space for phonebook data + TRequestStatus aStatus; + + TUint index(1); + TPtrC8 number(NULL,0); + TPtrC8 text(NULL,0); + + TUint8 aTagValue(0); + CPhoneBookBuffer::TPhBkTagType aDataType; + TPtrC8 field(NULL,0); + TInt counter(0); + + + // Get total number of phonebook entires + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo); + simPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + + INFO_PRINTF2(_L("Start retrieving %d phonebook entries"), aInfo.iTotalEntries); + + TInt numOfEntries(aInfo.iTotalEntries-1); + simPhBk.Read(aStatus, 1, numOfEntries, pbReadData1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-004.06")) ; + + // 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 + while(counter < pbReadData1.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + // Print each individual entry + if((aTagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (counter>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("================================================")); + + RMobilePhoneBookStore simPhBk; + TInt ret = simPhBk.Open(iPhone, KETelIccAdnPhoneBook) ; + if(ret != KErrNone) + { + ERR_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk.Close() ; + return EFail; + } + + // First write 15 entries to the phone + INFO_PRINTF1(_L("Writing 15 entries to the phone")); + WriteBatchOfEntriesToThePhoneL(); + + TRequestStatus aStatus; + TBuf8 pbReadData1; // Client reserved space for phonebook data + CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data + + 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(aStatus, startIndex, batchSize, pbReadData1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-005.06")) ; + + TUint index(0); + TUint temp(0); + TPtrC8 number(NULL,0); + TPtrC8 text(NULL,0); + + TUint8 aTagValue(0); + CPhoneBookBuffer::TPhBkTagType aDataType; + TPtrC8 field(NULL,0); + TInt counter(0); + + // 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 + while(counter < pbReadData1.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + // Print each individual entry + if((aTagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (counter>1)) // Only print if all fields retrieved + { + temp++; + 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("================================================")); + + RMobilePhoneBookStore simPhBk; + TInt ret = simPhBk.Open(iPhone,KETelIccAdnPhoneBook) ; + if(ret != KErrNone) + { + ERR_PRINTF1(_L("Does SIM.TSY support KETelIccAdnPhoneBook?")) ; + simPhBk.Close() ; + return EFail; + } + + // First write 15 entries to the phone + INFO_PRINTF1(_L("Writing 15 entries to the phone")); + WriteBatchOfEntriesToThePhoneL(); + + TRequestStatus aStatus; + TBuf8 pbReadData1; // Client reserved space for phonebook data + CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data + + 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. + + simPhBk.GetInfo(aStatus, aPhoneStoreInfoPckgb); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.06")) ; + + aPhoneStoreInfob = aPhoneStoreInfoPckgb() ; + batchSize = (aPhoneStoreInfob.iTotalEntries)/2; //50% + + INFO_PRINTF3(_L("Start retrieving a batch of %d phonebook entries with starting index %d"), batchSize, startIndex); + + simPhBk.Read(aStatus, startIndex, batchSize, pbReadData1); + User::WaitForRequest(aStatus); + CHECKPOINT(aStatus.Int(), KErrNone, _L("GT83-TPHBK-005.06")) ; + + TUint index(0); + TUint temp(0); + TPtrC8 number(NULL,0); + TPtrC8 text(NULL,0); + + TUint8 aTagValue(0); + CPhoneBookBuffer::TPhBkTagType aDataType; + TPtrC8 field(NULL,0); + TInt counter(0); + + // 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 + while(counter < pbReadData1.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + // Print each individual entry + if((aTagValue == RMobilePhoneBookStore::ETagPBNewEntry) && (counter>1)) // Only print if all fields retrieved + { + temp++; + 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(); + } + +//------------------------------------------------------------------ + +CTestAllPhBooks::CTestAllPhBooks() +/** 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("TestAllPhBooks")); + } +//------------------------------------------------------------------ + +TVerdict CTestAllPhBooks::doTestStepL( void ) + { +// Added during port to test execute +// Not part of original test +// This test step seems to rely on state from previous steps which it should not +// Should be reviewed!!!!!! +// Contractor - December 2005 +// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + CSimPhBkTestStepBase::ClearPhoneBookL(KETelIccAdnPhoneBook()); +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + //I'm very sorry for such code, + //but I have troubles with CW, thus when I + //have my personal copy I'll sort it out better way. + + iPhBkNames[0].iPhBkName = KETelMeDialledPhoneBook ; + iPhBkNames[0].iPhBkID = 1 ; //"ME_DIALLEDPHONEBOOK"); + + iPhBkNames[1].iPhBkName = KETelMeMissedPhoneBook ; + iPhBkNames[1].iPhBkID = 2 ; //"ME_MISSEDPHONEBOOK"); + + iPhBkNames[2].iPhBkName = KETelMeReceivedPhoneBook ; + iPhBkNames[2].iPhBkID = 3 ;//"ME_RECEIVEDPHONEBOOK"); + + iPhBkNames[3].iPhBkName = KETelMeAdnPhoneBook; + iPhBkNames[3].iPhBkID = 4 ; //"ME_ADNPHONEBOOK"); + + iPhBkNames[4].iPhBkName = KETelIccVoiceMailBox; + iPhBkNames[4].iPhBkID = 5 ; //"ICC_VOICEMAILBOX"); + + iPhBkNames[5].iPhBkName = KETelIccAdnPhoneBook; + iPhBkNames[5].iPhBkID = 6 ; //"ICC_ADNPHONEBOOK"); + + iPhBkNames[6].iPhBkName = KETelIccFdnPhoneBook; + iPhBkNames[6].iPhBkID = 7 ; //"ICC_FDNPHONEBOOK"); + + iPhBkNames[7].iPhBkName = KETelIccSdnPhoneBook; + iPhBkNames[7].iPhBkID = 8 ; //"ICC_SDNPHONEBOOK"); + + iPhBkNames[8].iPhBkName = KETelIccBdnPhoneBook; + iPhBkNames[8].iPhBkID = 10 ; //"ICC_BDNPHONEBOOK"); + + iPhBkNames[9].iPhBkName = KETelCombinedAdnPhoneBook; + iPhBkNames[9].iPhBkID = 11 ; //"COMB_ADNPHONEBOOK"); + + iPhBkNames[10].iPhBkName = KETelTaAdnPhoneBook; + iPhBkNames[10].iPhBkID = 12 ; //"TA_ADNPHONEBOOK"); + TBuf<32> BookName; + + for(TUint index = 0; index<(sizeof(iPhBkNames)/sizeof(TPhBkNameAndID)); index++) + { + BookName.Copy(iPhBkNames[index].iPhBkName); + INFO_PRINTF1(BookName); + //if(IsPhBookSupportedByPhone(iPhone, BookName)) //Is phone book supported by phone? + { + INFO_PRINTF1(_L("RW...")); + TestReadAndWritePhBkL(BookName, iPhBkNames[index].iPhBkID) ; + INFO_PRINTF1(_L("Delete...")); + ClearPhoneBookL(BookName, iPhBkNames[index].iPhBkID) ; + INFO_PRINTF1(_L("Get info...")); + GetPhoneBookInfoL(BookName, iPhBkNames[index].iPhBkID) ; + } + } ; + return TestStepResult(); + } + +//------------------------------------------------------------------ + +TPtrC CTestAllPhBooks::MakeCheckPointName(TInt aMajorNum, TInt aMinorNum ) +/** Make test id + * @param text buf > 20 symbols + * @param major number + * @param minor number +*/ + { + TBuf<32> theBuf ; + //clear old string + theBuf.Copy(_L("GT83-TPHBK-")); + theBuf.AppendFormat(_L("%03d.%03d"), aMajorNum, aMinorNum) ; + return theBuf.Ptr() ; + } + +//------------------------------------------------------------------ + +void CTestAllPhBooks::Print_TMobilePhoneBookInfoV1(RMobilePhoneBookStore::TMobilePhoneBookInfoV1& aArg) +/** Display value of RMobilePhoneBookStore::TMobilePhoneBookInfoV1 + * @param value to print +*/ + { + INFO_PRINTF1(_L("\tTMobilePhoneBookInfoV1:")) ; + INFO_PRINTF2(_L("iMaxNumLength = %d"), aArg.iMaxNumLength) ; + INFO_PRINTF2( _L("iMaxTextLength = %d"), aArg.iMaxTextLength) ; + Print_TMobilePhoneBookLocation(aArg.iLocation) ; + INFO_PRINTF2(_L("iChangeCounter = %d"), aArg.iChangeCounter) ; + INFO_PRINTF2(_L("iIdentity = %S"), &aArg.iIdentity) ; + Print_TMobilePhoneBookCaps(aArg.iCaps) ; + + } + +//------------------------------------------------------------------ + +void CTestAllPhBooks::Print_TMobilePhoneBookLocation(RMobilePhoneBookStore::TMobilePhoneBookLocation& aArg) +/** Display value of enum RMobilePhoneBookStore::TMobilePhoneBookLocation to screen. + * @param value to print +*/ + { + switch(aArg) + { + case RMobilePhoneBookStore::ELocationUnknown: + INFO_PRINTF1(_L("Value of enum is RMobilePhoneBookStore::ELocationUnknown")) ; + break ; + case RMobilePhoneBookStore::ELocationIccMemory: + INFO_PRINTF1(_L("Value of enum is RMobilePhoneBookStore::ELocationIccMemory")) ; + break ; + case RMobilePhoneBookStore::ELocationPhoneMemory: + INFO_PRINTF1(_L("Value of enum is RMobilePhoneBookStore::ELocationPhoneMemory")) ; + break ; + case RMobilePhoneBookStore::ELocationExternalMemory: + INFO_PRINTF1(_L("Value of enum is RMobilePhoneBookStore::ELocationExternalMemory")) ; + break ; + case RMobilePhoneBookStore::ELocationCombinedMemory: + INFO_PRINTF1(_L("Value of enum is RMobilePhoneBookStore::ELocationCombinedMemory")) ; + break ; + } + } + +//------------------------------------------------------------------ + +void CTestAllPhBooks::Print_TMobilePhoneBookCaps(TUint32 aArg) +/** Display value of enum RMobilePhoneBookStore::TMobilePhoneBookCaps to screen. + * @param value to print +*/ + { + if(aArg & RMobilePhoneBookStore::KCapsRestrictedWriteAccess) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsRestrictedWriteAccess")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsSecondNameUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsSecondNameUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsAdditionalNumUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsAdditionalNumUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsGroupingUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsGroupingUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsEntryControlUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsEntryControlUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsEmailAddressUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsEmailAddressUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsBearerCapUsed ) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsBearerCapUsed ")) ; + } + if(aArg & RMobilePhoneBookStore::KCapsSynchronisationUsed) + { + INFO_PRINTF1(_L("Has a flag TMobilePhoneBookCaps::KCapsSynchronisationUsed")) ; + } + } + +//------------------------------------------------------------------ + +TInt CTestAllPhBooks::GetPhoneBookInfoL(const TDesC& aPhoneBookName, TInt aMinorNum) +/** + * This function gets phone book info and prints it. + * @param ph/book name + * @param test ID minor number + * @return error code + * @test GT83-TPHBK-001.00 Test opening a phone book (Generic) + * @test GT83-TPHBK-002.00 Test closing a phone book (Generic) + * @test GT83-TPHBK-003.00 Test retrieval of the phone book store info and capabilities (generic) + */ + { + TRequestStatus aStatus; + RMobilePhoneBookStore thePhBk; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo); + TInt ret=thePhBk.Open(iPhone, aPhoneBookName); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-001.00")) ; + if(ret == KErrNotSupported) + { + INFO_PRINTF2(_L("%S phone book isn't supported!"), &aPhoneBookName) ; + thePhBk.Close() ; + return ret; + } + else if(ret != KErrNone ) + { //It doesn have any sence to continue. + INFO_PRINTF2(_L("I can't open %S phone book!"), &aPhoneBookName) ; + //TEST_CHECKL(ret, KErrNone, MakeCheckPointName(1, aMinorNum)) ; + thePhBk.Close() ; + return ret; + } + + thePhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-003.00")) ; + CHECKPOINT(aStatus.Int(), KErrNone, MakeCheckPointName(3, aMinorNum)) ; + aInfo = aInfoPckg() ; + if(aStatus == KErrNone) + { //Does it have any sence to print? + Print_TMobilePhoneBookInfoV1(aInfo) ; + } + thePhBk.Close() ; + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-002.00")) ; + return ret; +} + +//--------------------------------------------------------------------------- + +TInt CTestAllPhBooks::ClearPhoneBookL(const TDesC& aPhoneBookName, TInt aMinorNum) +/** + * This function deletes the first 7 entries in the specified Phone Book. + * @param ph/book name + * @param test ID minor number + * @return error code + * @test GT83-TPHBK-001.00 Test opening a phone book (Generic) + * @test GT83-TPHBK-002.00 Test closing a phone book (Generic) + * @test GT83-TPHBK-008.00 Test deleting individual entries from the phone book (Generic) + */ + { + TRequestStatus aStatus; + RMobilePhoneBookStore thePhBk; + TInt ret=thePhBk.Open(iPhone, aPhoneBookName); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-001.00")) ; + if(ret == KErrNotSupported) + { + INFO_PRINTF2(_L("%S phone book isn't supported!"), &aPhoneBookName) ; + thePhBk.Close() ; + return ret; + } + else if(ret != KErrNone ) + { //It doesn have any sence to continue. + INFO_PRINTF2(_L("I can't open %S phone book!"), &aPhoneBookName) ; + //TEST_CHECKL(ret, KErrNone, MakeCheckPointName(1, aMinorNum)) ; + thePhBk.Close() ; + return ret; + } + + INFO_PRINTF2(_L("Atempt to delete %S phonebook 7 first entries..."), &aPhoneBookName); + + TInt i; + for (i=1; i<=7; i++) + { + thePhBk.Delete(aStatus, i); + User::WaitForRequest(aStatus); + if(aStatus!=KErrNotFound) + { + break; //The ph/book just empty! + } + else if (aStatus!=KErrNone) + { + //Something happend + //TEST_CHECKL(1, KErrNone, _L("GT83-TPHBK-008.00")) ; + CHECKPOINT(ret, KErrNone, MakeCheckPointName(8, aMinorNum)) ; + break; + } + } + + thePhBk.Close(); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-002.00")) ; + return ret; + } + +//------------------------------------------------------------------------------- + +void CTestAllPhBooks::TestReadAndWritePhBkL(const TDesC& aPhoneBookName, TInt aMinorNum ) +/** + * 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. + * @param phone book name + * @param minor test id number + * @test GT83-TPHBK-001.00 Test opening a phone book (Generic) + * @test GT83-TPHBK-003.00 Test retrieval of the phone book store info and capabilities (generic) + * @test GT83-TPHBK-006.00 Test retrieval of individual entries from the phone book (Generic) + * @test GT83-TPHBK-006.06 Test retrieval of the first entry in an ICC-based phonebook of abbreviated dialling numbers + */ + { + TInt ret=KErrNone; + TRequestStatus aStatus; + RMobilePhoneBookStore simPhBk; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 aInfo; + RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg aInfoPckg(aInfo); + RMobilePhoneBookStore::TMobilePhoneBookInfoV1 *aInfob; + + TBuf8 pbData, pbReadData1, pbReadData2, pbReadEmpty; // Client reserved space for phonebook data + TInt requestedIndex(0), numOfEntries(1); + TInt i(0), size(KPPBEntriesNum); + + ret=simPhBk.Open(iPhone, aPhoneBookName); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-001.00")) ; + + if(ret == KErrNotSupported) + { + INFO_PRINTF2(_L("%S phone book isn't supported!"), &aPhoneBookName) ; + simPhBk.Close() ; + return ; + } + else if(ret != KErrNone ) + { //It doesn have any sence to continue. + INFO_PRINTF2(_L("I can't open %S phone book!"), &aPhoneBookName) ; + //TEST_CHECKL(ret, KErrNone, MakeCheckPointName(1, aMinorNum)) ; + simPhBk.Close() ; + return ; + } + + simPhBk.GetInfo(aStatus, aInfoPckg); + User::WaitForRequest(aStatus); + //TEST_CHECKL(aStatus.Int(), KErrNone, _L("GT83-TPHBK-003.00")) ; + CHECKPOINT(ret, KErrNone, MakeCheckPointName(3, aMinorNum)) ; + aInfob = &aInfoPckg(); + + + // Create array of names and numbers + const TText* 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 TText* 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}; + + + TBuf entryNumber(numbers[0]); + TBuf entryName(names[0]); + + CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); + pbBuffer->Set(&pbData); // Set it to point to the Client buffer + + //Is it posible to write anything ? + if (aInfob->iCaps & RMobilePhoneStore::KCapsWriteAccess) + { + // Write the entries to the SIM Phone Book + TInt writeIndex(0); + + for (i=1; i<=size; ++i) + { + //first reset the following three local buffers to delete any existing data + entryNumber.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData.FillZ(); + 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((TUint8)RMobilePhoneBookStore::ETagPBNumber, entryNumber); + TESTL(ret == KErrNone) ; + + // convert type into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBTonNpi, (TUint8)RMobilePhone::EUnknownNumber); + TESTL(ret == KErrNone) ; + + // convert text into TLV format and append it to allocated buffer + ret=pbBuffer->PutTagAndValue((TUint8)RMobilePhoneBookStore::ETagPBText, entryName); + TESTL(ret == KErrNone) ; + + simPhBk.Write(aStatus, pbData, writeIndex); + //TEST_CHECKL(ret, KErrNone, _L("GT83-TPHBK-07.00")) ; + User::WaitForRequest(aStatus); + if(aStatus == KErrNotSupported) + { + INFO_PRINTF2(_L("Write operation for %S phone book is not supporded!"), &aPhoneBookName) ; + break ; + } + TEST_CHECKL((aStatus == KErrNone || aStatus == KErrNotSupported), ETrue, MakeCheckPointName(7, aMinorNum)) ; + } + } + else + { + INFO_PRINTF2(_L("Write operation for %S phone book is not supporded!"), &aPhoneBookName) ; + } + + if (aInfob->iCaps & RMobilePhoneStore::KCapsReadAccess) + {//Is posible to read this ph/book and does it have any etries? + /* Read the entries back */ + TInt index; + TPtrC number(NULL,0); + TPtrC text(NULL,0); + + TUint8 aTagValue(0); + CPhoneBookBuffer::TPhBkTagType aDataType; + TPtrC field(NULL,0); + TInt counter(0); + + //How many records could we read? + if(-1 == aInfob->iUsedEntries) + { //Is phone book empty? + size = 0; + } + else + { + size = (size < aInfob->iUsedEntries )? size: aInfob->iUsedEntries; + } + /* 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.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData.FillZ(); + pbData.Zero(); + + // reset all loop variables + index = 0; + counter = 0; + aTagValue = 0; + + requestedIndex = i; + simPhBk.Read(aStatus, requestedIndex, numOfEntries, pbReadData1); + User::WaitForRequest(aStatus); + //TEST_CHECKL(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.00")) ; + CHECKPOINT(ret, KErrNone, MakeCheckPointName(6, aMinorNum)) ; + + 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(counter < pbReadData1.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + //TESTL(TInt(type)==RMobilePhone::EUnknownNumber); + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i) ; + } // end for + + + // Try to read an empty entry + requestedIndex = i+1; // Now set index to point to last entry in phonebook + simPhBk.Read(aStatus, requestedIndex, numOfEntries, pbReadEmpty); + User::WaitForRequest(aStatus); +#ifndef SIM_TSY + CHECKPOINT(ret, KErrNone, MakeCheckPointName(6, aMinorNum)) ; + //TEST_CHECKL(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.00")) ; // If asked to read an empty entry, TSY will not return an error + // It is now clients responsibility to ensure a valid index is supplied +#endif + // Read Backwards, one by one + for(i=size; i>0; --i) + { + //first reset the following three local buffers to delete any existing data + entryNumber.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData.FillZ(); + pbData.Zero(); + + requestedIndex = i; + simPhBk.Read(aStatus, requestedIndex, numOfEntries, pbReadData2); + User::WaitForRequest(aStatus); + //TEST_CHECKL(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.06")) ; + CHECKPOINT(ret, KErrNone, MakeCheckPointName(6, aMinorNum)) ; + + entryNumber=numbers[i-1]; + entryName=names[i-1]; + + // reset all loop variables + index = 0; + counter = 0; + aTagValue = 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(counter < pbReadData2.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + // TESTL(TInt(type)==RMobilePhone::ENationalNumber); + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i ) ; + } // end for + + // Try to read below the phonebook limits + requestedIndex = i-1; + simPhBk.Read(aStatus, requestedIndex, numOfEntries, pbReadEmpty); + User::WaitForRequest(aStatus); +#ifndef SIM_TSY + TESTL(aStatus==KErrNotFound || aStatus==KErrGeneral); // this entry should be empty +#endif + // Read by index, uses the Read() method + for(i=1; i<=size; ++i) + { + //first reset the following three local buffers to delete any existing data + entryNumber.FillZ(); + entryNumber.Zero(); + entryName.FillZ(); + entryName.Zero(); + pbData.FillZ(); + pbData.Zero(); + + requestedIndex = i; + simPhBk.Read(aStatus, requestedIndex, numOfEntries, pbReadData1); + User::WaitForRequest(aStatus); + //TEST_CHECKL(aStatus.Int(), KErrNone, _L("GT83-TPHBK-006.00")) ; + CHECKPOINT(ret, KErrNone, MakeCheckPointName(6, aMinorNum)) ; + + entryNumber=numbers[i-1]; + entryName=names[i-1]; + + // reset all loop variables + index = 0; + counter = 0; + aTagValue = 0; + + // 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(counter < pbReadData1.Length()) + { + TInt ret = pbBuffer->GetTagAndType(aTagValue, aDataType); + if(ret==KErrNotFound) // Reached the end of phonebook data + break; + TESTL(ret == KErrNone) ; + switch(aDataType) + { + case CPhoneBookBuffer::EPhBkTypeInt8: + { + TUint8 int8(0); + counter = counter + 1; // add tag-field only in case that is beginning of new field + if(aTagValue == RMobilePhoneBookStore::ETagPBAdnIndex) + { + pbBuffer->GetValue(int8); // + counter = counter + 1; // 1-byte integer + index = int8; + } + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt16: + { + TUint16 int16(0); + pbBuffer->GetValue(int16); + counter = counter + 3; // 2-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeInt32: + { + TUint32 int32(0); + pbBuffer->GetValue(int32); + counter = counter + 5; // 4-byte integer + tag-field + } + break; + + case CPhoneBookBuffer::EPhBkTypeDes16: + { + pbBuffer->GetValue(field); + counter = counter + field.Length() + 3; // add desc length + length-field + tag-field + if(aTagValue == RMobilePhoneBookStore::ETagPBText) + { + text.Set(field); + } + else if(aTagValue == RMobilePhoneBookStore::ETagPBNumber) + { + number.Set(field); + } + } + break; + + default: + break; + } // end switch aDataType + + } // end while + + + // TESTL(TInt(type)==RMobilePhone::ENationalNumber); + TESTL(number.Compare(entryNumber)==KErrNone); + TESTL(text.Compare(entryName)==KErrNone); + TESTL(index == i) ; + } + } //Is posible to read this ph/book? + else + { + INFO_PRINTF2(_L("Read operation for %S phone book is not supporded!"), &aPhoneBookName) ; + } + simPhBk.Close(); + + delete pbBuffer; + } +