diff -r d4f567ce2e7c -r 5b6f26637ad3 phonebookengines_old/contactsmodel/tsrc/cntmodel2/T_Packager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines_old/contactsmodel/tsrc/cntmodel2/T_Packager.cpp Tue Aug 31 15:05:21 2010 +0300 @@ -0,0 +1,1255 @@ +// Copyright (c) 2005-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: +// Packaging Test module +// +// + + +#include +#include + +_LIT(KTestName, "T_Packager"); // Used by Testhelper + +#include +#include "testhelpers.h" +//#include "T_CntTest.h" + +#include "NbCntTestLib/NbCntTestLib.h" + +#include "T_Packager.h" +#include "T_CntTestImplDefs.h" +#include "CCntPackager.h" +#include + + + +//#define RUN_CNT +#define RUN_PL + +// +// This test used to spit out a lot of html files which display +// the contents of contact items. There are a lot of files +// generated in the process which, as this is normally run on the +// overnight build, are not read and just take up disk space. +// Therefore, the call to the contact dumping method has been +// configured out by #ifdefs and needs to be manually re-activated. +// +// So, uncomment the following line to turn on contact dumping. +//#define __T_PACKAGER_DUMP_CONTACT__ +// + + +#define KUidContactFieldCustom1Value 0x101FD209 +#define KUidContactFieldCustom2Value 0x101FD20A +const TUid KUidContactFieldCustom1={KUidContactFieldCustom1Value}; +const TUid KUidContactFieldCustom2={KUidContactFieldCustom2Value}; + +_LIT(KCreatePlPerform, "C:PlPerform.cdb"); + + +void CPackagerTests::AllTestsL() + { + ContactItemTestL(); +// iCntTestImpl.CloseDatabase(); + EmptyContactItemTestL(); +// ContentTypeTestL(); + CntItemViewDefTestL(); + CntViewDefTestL(); + DescArrayTestL(); +// CContactIdArrayTestL(); + CCntFilterTestL(); + CntTextDefTestL(); +// MessageBufferTestL(); + + iCntTestImpl.CloseDatabase(); + } + +void CPackagerTests::ContactItemTestL() + { + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + test.Next(_L("ContactItemTestL")); + + + iCntTestImpl.CreateDatabaseL(nsCntTestImpl::KSecureDBName, ETrue); + + const CContactTemplate& goldenTemplate = iCntTestImpl.GetSysTemplate(); + //iTempl = iCntTestImpl.GetSysTemplate(); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(goldenTemplate, _L("Template"))); +#endif + + CContactItem* card = CContactCard::NewLC(&goldenTemplate); + TCnt theCnt(card); + + theCnt[KUidContactFieldGivenName] = _L("AExample"); + theCnt[KUidContactFieldFamilyName] = _L("BExample"); + + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell = _L("mo1 39849342"); + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell += _L("mo2 34530903495803948503984545"); + + theCnt[KUidContactFieldEMail] & KHome = _L("home@email"); + theCnt[KUidContactFieldAddress] & KHome = _L("Home addresssssss"); + theCnt[KUidContactFieldLocality] & KHome = _L("Glazgo"); + theCnt[KUidContactFieldIMAddress] & KHome & KWv = _L("wireless@village"); + theCnt[KUidContactFieldSecondName] = _L("Second name"); + + theCnt[KUidContactFieldCompanyName] = _L("SymbianFoundation"); + theCnt[KUidContactFieldJobTitle] = _L("Driver"); + theCnt[KUidContactFieldPhoneNumber] & KWork & KVoice = _L("work Tel 2342"); + + theCnt[KUidContactFieldEMail] & KWork = _L("work@email"); + theCnt[KUidContactFieldUrl] & KWork = _L("sdfsd"); + theCnt[KUidContactFieldAddress] & KWork = _L("afas df asd"); + theCnt[KUidContactFieldLocality] & KWork = _L("sdfsd"); + + theCnt[KUidContactFieldCustom1] = _L("Filterable 1"); + theCnt[KUidContactFieldCustom2] = _L("Filterable 2"); + + theCnt[KUidContactFieldGivenNamePronunciation] = _L("first name re"); + theCnt[KUidContactFieldFamilyNamePronunciation] = _L("Last name re"); + + theCnt[KUidContactFieldSIPID] & KPoc = _L("SIP POC"); + theCnt[KUidContactFieldSIPID] & KSwis = _L("SIP SWIS"); + theCnt[KUidContactFieldSIPID] & KVoip = _L("SIP VOIP"); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(*card, _L("Before Creation"))); +#endif + + iCntTestImpl.CreateL(*card); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*card)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactItem* cntItem = thePackage->UnpackCntItemLC(); +// CleanupStack::PushL(cntItem); + err = CompareContactItemTestL(cntItem, card); + User::LeaveIfError(err); + CleanupStack::PopAndDestroy(3, thePackage); +// POPD(cntItem); +// POPD(card); +// POPD(thePackage); + + + } + +void CPackagerTests::EmptyContactItemTestL() + { + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + test.Next(_L("EmptyContactItemTestL")); + + + CPersistenceLayer* iPersistLayer = CPersistenceLayer::NewLC(iFs); + CContactItemViewDef* cntItemVdef = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields, CContactItemViewDef::EMaskHiddenFields); + cntItemVdef->AddL(KUidContactFieldMatchAll); + + MLplContactsFile& cntFile = iPersistLayer->ContactsFileL(); + + TRAPD(err, cntFile.CreateL(KCreatePlPerform, true ? MLplContactsFile::EPlOverwrite : MLplContactsFile::EPlLeaveIfExist)); + User::LeaveIfError(err); + TRAP(err, while(cntFile.OpenStepL(KCreatePlPerform)){}); + User::LeaveIfError(err); + + CContactItem* card = NULL; + card = iPersistLayer->PersistenceBroker().ReadLC(KGoldenTemplateId, *cntItemVdef, EPlAllInfo, 0); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + + err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*card)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactItem* cntItem = thePackage->UnpackCntItemLC(); + err = CompareContactItemTestL(cntItem, card); + User::LeaveIfError(err); + CleanupStack::PopAndDestroy(5, thePackage); + + } + +void CPackagerTests::ContentTypeTestL() + { + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + test.Next(_L("ContentTypeTestL")); + + + iCntTestImpl.CreateDatabaseL(nsCntTestImpl::KSecureDBName, ETrue); + + const CContactTemplate& goldenTemplate = iCntTestImpl.GetSysTemplate(); + //iTempl = iCntTestImpl.GetSysTemplate(); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(goldenTemplate, _L("Template"))); +#endif + + + CContactItem* card = CContactCard::NewLC(&goldenTemplate); + TCnt theCnt(card); + + theCnt[KUidContactFieldGivenName] = _L("AExample"); + theCnt[KUidContactFieldFamilyName] = _L("BExample"); + + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell = _L("mo1 39849342"); + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell += _L("mo2 34530903495803948503984545"); + + theCnt[KUidContactFieldEMail] & KHome = _L("home@email"); + theCnt[KUidContactFieldAddress] & KHome = _L("Home addresssssss"); + theCnt[KUidContactFieldLocality] & KHome = _L("Glazgo"); + theCnt[KUidContactFieldIMAddress] & KHome & KWv = _L("wireless@village"); + theCnt[KUidContactFieldSecondName] = _L("Second name"); + + theCnt[KUidContactFieldCompanyName] = _L("SymbianFoundation"); + theCnt[KUidContactFieldJobTitle] = _L("Driver"); + theCnt[KUidContactFieldPhoneNumber] & KWork & KVoice = _L("work Tel 2342"); + + theCnt[KUidContactFieldEMail] & KWork = _L("work@email"); + theCnt[KUidContactFieldUrl] & KWork = _L("sdfsd"); + theCnt[KUidContactFieldAddress] & KWork = _L("afas df asd"); + theCnt[KUidContactFieldLocality] & KWork = _L("sdfsd"); + + theCnt[KUidContactFieldCustom1] = _L("Filterable 1"); + theCnt[KUidContactFieldCustom2] = _L("Filterable 2"); + + theCnt[KUidContactFieldGivenNamePronunciation] = _L("first name re"); + theCnt[KUidContactFieldFamilyNamePronunciation] = _L("Last name re"); + + theCnt[KUidContactFieldSIPID] & KPoc = _L("SIP POC"); + theCnt[KUidContactFieldSIPID] & KSwis = _L("SIP SWIS"); + theCnt[KUidContactFieldSIPID] & KVoip = _L("SIP VOIP"); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(*card, _L("Before Creation"))); +#endif + +// iCntTestImpl.CreateL(*card); + + // Get the Content Type from the contact item for testing. + // Contact Item Field Set + CContactItemFieldSet& item1Fieldset = card->CardFields(); + //CContactItemField* item1Field = &(item1Fieldset)[0]; + TInt item1Fieldset_Count = item1Fieldset.Count(); + CContentType* cntType1 = CContentType::NewL(item1Fieldset[0].ContentType()); + CleanupStack::PushL(cntType1); + + if(item1Fieldset_Count<=0) + { + return; + } + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*cntType1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContentType* cntType2 = thePackage->UnpackCntContentTypeLC(); + err = CompareContentTypeTestL(*cntType1, *cntType2); + User::LeaveIfError(err); + CleanupStack::PopAndDestroy(4, thePackage); + + } + + +void CPackagerTests::CntTextDefTestL() + { + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + test.Next(_L("CntTextDefTestL")); + + + // To Do: Generate Test CContactTextDef object. + CContactTextDef* textDef1 = CContactTextDef::NewLC(); + + //TContactViewPreferences preferences = static_cast (EContactsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField); + + textDef1->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); + textDef1->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); + textDef1->AppendL(TContactTextDefItem(KUidContactFieldCompanyName)); + textDef1->AppendL(TContactTextDefItem(KUidContactFieldAddress)); + textDef1->AppendL(TContactTextDefItem(KUidContactFieldEMail)); + textDef1->AppendL(TContactTextDefItem(KUidContactFieldAdditionalName)); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + TRAPD(error, (theBuffer.Set(thePackage->PackL(*textDef1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactTextDef* textDef2 = thePackage->UnpackCntTextDefLC(); + err = CompareCntTextDefL(textDef1, textDef2); + User::LeaveIfError(err); + CleanupStack::PopAndDestroy(3, thePackage); + + } + +TInt CPackagerTests::CompareContactItemTestL(CContactItem* item1, CContactItem* item2) + { + + // Contact Item type + if(item1->Type()!=item2->Type()) + { + return KErrNotFound; + } + + // Contact Item Field Set + CContactItemFieldSet& item1Fieldset = item1->CardFields(); + CContactItemFieldSet& item2Fieldset = item2->CardFields(); + TInt item1Fieldset_Count = item1Fieldset.Count(); + TInt item2Fieldset_Count = item2Fieldset.Count(); + if(item1Fieldset_Count!=item2Fieldset_Count) + { + return KErrNotFound; + } + + else // Same count! + { + for(TInt i=0; iiAttributes!=item2->iAttributes) + { + return KErrNotFound; + } + + // Contact item's ID + if(item1->Id()!=item2->Id()) + { + return KErrNotFound; + } + + // Contact item's TemplateRefId + if(item1->TemplateRefId()!=item2->TemplateRefId()) + { + return KErrNotFound; + } + + // Contact item's LastModified + if(item1->LastModified()!=item2->LastModified()) + { + return KErrNotFound; + } + + // Contact item's iCreationDate + if(item1->iCreationDate!=item2->iCreationDate) + { + return KErrNotFound; + } + + // Contact item's iAccessCount + if(item1->AccessCount()!=item2->AccessCount()) + { + return KErrNotFound; + } + + // Contact item's iGuid + if((item1->iGuid==NULL)||(item2->iGuid==NULL)) + { + if(!((item1->iGuid==NULL)&&(item2->iGuid==NULL))) + { + return KErrNotFound; + } + } + else + { + if(item1->iGuid->Length()!=item2->iGuid->Length()) + { + return KErrNotFound; + } + + else + { + if(item1->iGuid->Compare(item2->iGuid->Des())!=0) + { + return KErrNotFound; + } + } + } + + // Contact item's group if applicable. + // We already check type above. + if((item1->Type()==KUidContactGroup)|| + (item1->Type()==KUidContactICCEntry)|| + (item1->Type()==KUidContactCard)|| + (item1->Type()==KUidContactOwnCard)) + { + CContactCard* card1 = (CContactCard*) item1; + CContactCard* card2 = (CContactCard*) item2; + if((card1->GroupsJoined()==NULL)||(card2->GroupsJoined()==NULL)) + { + if(!((card1->GroupsJoined()==NULL)&&(card2->GroupsJoined()==NULL))) + { + return KErrNotFound; + } + + } + else + { + CContactIdArray* array1 = card1->GroupsJoinedLC(); + CContactIdArray* array2 = card2->GroupsJoinedLC(); + if(array1->Count()!=array2->Count()) + { + return KErrNotFound; + } + + // Checked count above already. + for(TInt i=0;iCount();i++) + { + if((*array1)[i]!=(*array2)[i]) + { + return KErrNotFound; + } + } + CleanupStack::PopAndDestroy(2); + } + } + + // Contact item's items if applicable. + if(item1->Type()==KUidContactGroup) + { + CContactGroup* group1 = (CContactGroup*) item1; + CContactGroup* group2 = (CContactGroup*) item2; + if((group1->GroupsJoined()==NULL)||(group2->GroupsJoined()==NULL)) + { + if(!((group1->GroupsJoined()==NULL)&&(group2->GroupsJoined()==NULL))) + { + return KErrNotFound; + } + } + + else + { + CContactIdArray* array1 = group1->GroupsJoinedLC(); + CContactIdArray* array2 = group2->GroupsJoinedLC(); + if(array1->Count()!=array2->Count()) + { + return KErrNotFound; + } + + // Checked count above already. + for(TInt i=0;iCount();i++) + { + if((*array1)[i]!=(*array2)[i]) + { + return KErrNotFound; + } + } + CleanupStack::PopAndDestroy(2); + } + } + + + return KErrNone; + + } + +TInt CPackagerTests::CompareContactItemFieldTestL(CContactItemField* itemField1, CContactItemField* itemField2) + { + // CContentType *iContentType; + /*if(!(itemField1->ContentType()==itemField2->ContentType())) + { + return KErrNotFound; + }*/ + if(CompareContentTypeTestL(itemField1->ContentType(), itemField2->ContentType())!=KErrNone) + { + return KErrNotFound; + } + + // TStorageType iStorageType; + if(itemField1->StorageType()!=itemField2->StorageType()) + { + return KErrNotFound; + } + + // HBufC* iLabel; + if((itemField1->iLabel==NULL)||(itemField2->iLabel==NULL)) + { + if(!((itemField1->iLabel==NULL)&&(itemField2->iLabel==NULL))) + { + return KErrNotFound; + } + } + else + { + if(itemField1->iLabel->Length()!=itemField2->iLabel->Length()) + { + return KErrNotFound; + } + else + { + if(itemField1->iLabel->Compare(itemField2->iLabel->Des())!=0) + { + return KErrNotFound; + } + } + } + + // TInt iId; + if(itemField1->iId!=itemField2->iId) + { + return KErrNotFound; + } + + // TUint32 iAttributes; + if(itemField1->iAttributes!=itemField2->iAttributes) + { + return KErrNotFound; + } + + // TUint32 iExtendedAttributes; + if(itemField1->iExtendedAttributes!=itemField2->iExtendedAttributes) + { + return KErrNotFound; + } + + // CContactFieldStorage* iStorage; + switch (itemField1->StorageType()) + { + case KStorageTypeText: + if(itemField1->TextStorage()->Text()!=itemField2->TextStorage()->Text()) + { + return KErrNotFound; + } + break; + + case KStorageTypeStore: + if(itemField1->StoreStorage()->Thing()!=itemField2->StoreStorage()->Thing()) + { + return KErrNotFound; + } + break; + + case KStorageTypeDateTime: + if(itemField1->DateTimeStorage()->Time()!=itemField2->DateTimeStorage()->Time()) + { + return KErrNotFound; + } + break; + + case KStorageTypeContactItemId: + if(itemField1->AgentStorage()->Value()!=itemField2->AgentStorage()->Value()) + { + return KErrNotFound; + } + break; + + default: + User::Leave(KErrNotSupported); + break; + } + + // TInt iTemplateFieldId; + if(itemField1->iTemplateFieldId!=itemField2->iTemplateFieldId) + { + return KErrNotFound; + } + + return KErrNone; + } + +TInt CPackagerTests::CompareContentTypeTestL(const CContentType& contentType1, const CContentType& contentType2) + { + // CContentType *iContentType; + if(!(contentType1==contentType2)) + { + return KErrNotFound; + } + + + return KErrNone; + } + +TInt CPackagerTests::CompareCntTextDefL(CContactTextDef* textDef1, CContactTextDef* textDef2) + { + // CContactTextDef* + TInt textDef1_Count = textDef1->Count(); + TInt textDef2_Count = textDef2->Count(); + if(textDef1_Count!=textDef2_Count) + { + return KErrNotFound; + } + + else // Same count! + { + for(TInt i=0; iFallbackField()!=textDef2->FallbackField()) + { + return KErrNotFound; + } + + if(textDef1->ExactMatchOnly()!=textDef2->ExactMatchOnly()) + { + return KErrNotFound; + } + + return KErrNone; + } + + +void CPackagerTests::DescArrayTestL() + { + test.Next(_L("DescArrayTestL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a Descriptor Array. + CDesCArray* testArray1 = new(ELeave) CDesCArrayFlat(5); + CleanupStack::PushL(testArray1); + testArray1->AppendL(_L("Symbian")); + testArray1->AppendL(_L("Software")); + testArray1->AppendL(_L("Ltd.")); + testArray1->AppendL(_L("United Kingdom")); + testArray1->AppendL(_L("SE1")); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*testArray1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CDesCArray* testArray2 = thePackage->UnpackDesCArrayLC(); +// CleanupStack::PushL(testArray2); + err = CompareDescArrayTestL(testArray2, testArray1); + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(3, thePackage); + + } + +TInt CPackagerTests::CompareDescArrayTestL(CDesCArray* testArray1, CDesCArray* testArray2) + { + // CDesCArray + if((testArray1==NULL)||(testArray2==NULL)) + { + if(!((testArray1==NULL)&&(testArray2==NULL))) + { + return KErrNotFound; + } + } + + else + { + if(testArray1->Count()!=testArray2->Count()) + { + return KErrNotFound; + } + else + { + for(TInt i=0; iCount(); i++) + { + if((*testArray1)[i]!=(*testArray2)[i]) + { + return KErrNotFound; + } + } + } + } + + + return KErrNone; + } + + +void CPackagerTests::CntItemViewDefTestL() + { + test.Next(_L("CntItemViewDefL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a populated CContactItemViewDef object. + CContactItemViewDef* viewDef1=CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EMaskHiddenFields); + viewDef1->AddL(KUidContactFieldGivenName); + viewDef1->AddL(KUidContactFieldFamilyName); + viewDef1->AddL(KUidContactFieldPhoneNumber); + viewDef1->AddL(KUidContactFieldCompanyName); + viewDef1->AddL(KUidContactFieldAddress); + test(viewDef1->Count()==5); + test((*viewDef1)[0]==KUidContactFieldGivenName); + test((*viewDef1)[1]==KUidContactFieldFamilyName); + test((*viewDef1)[2]==KUidContactFieldPhoneNumber); + test((*viewDef1)[3]==KUidContactFieldCompanyName); + test((*viewDef1)[4]==KUidContactFieldAddress); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*viewDef1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactItemViewDef* viewDef2 = thePackage->UnpackCntItemViewDefLC(); + err = CompareCntItemViewDefTestL(viewDef1, viewDef2); + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(3, thePackage); + + } + + +void CPackagerTests::CntViewDefTestL() + { + test.Next(_L("CntViewDefL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a populated CContactItemViewDef object. + CContactItemViewDef* viewDef1=CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EMaskHiddenFields); + // CleanupStack::PushL(viewDef1); + viewDef1->AddL(KUidContactFieldGivenName); + viewDef1->AddL(KUidContactFieldFamilyName); + viewDef1->AddL(KUidContactFieldPhoneNumber); + viewDef1->AddL(KUidContactFieldCompanyName); + viewDef1->AddL(KUidContactFieldAddress); + test(viewDef1->Count()==5); + test((*viewDef1)[0]==KUidContactFieldGivenName); + test((*viewDef1)[1]==KUidContactFieldFamilyName); + test((*viewDef1)[2]==KUidContactFieldPhoneNumber); + test((*viewDef1)[3]==KUidContactFieldCompanyName); + test((*viewDef1)[4]==KUidContactFieldAddress); + + // Create CContactViewDef + CContactViewDef* def1=CContactViewDef::NewL(viewDef1); + CleanupStack::Pop(viewDef1); // viewDef1 + CleanupStack::PushL(def1); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer = thePackage->GetTransmittingBuffer(); + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*def1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactViewDef* def2 = thePackage->UnpackCntViewDefLC(); + + err = CompareCntViewDefTestL(def1, def2); + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(3, thePackage); + + } + +void CPackagerTests::MessageBufferTestL() + { + test.Next(_L("MessageBufferTestL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a Descriptor Array. + CDesCArray* testArray1 = new(ELeave) CDesCArrayFlat(5); + CleanupStack::PushL(testArray1); + testArray1->AppendL(_L("Symbian")); + testArray1->AppendL(_L("Software")); + testArray1->AppendL(_L("Ltd.")); + testArray1->AppendL(_L("United Kingdom")); + testArray1->AppendL(_L("SE1")); + + // For now, call this to allocate memory for buffer in packager. + TPtr8 theBuffer(NULL, NULL, NULL); + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + + TRAPD(error, (theBuffer.Set(thePackage->PackL(*testArray1)))); + err = error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + RMessage2 testMessage; +// TDesC8& desBuf(theBuffer); + TInt length = theBuffer.Length(); + TInt size = theBuffer.Size(); + +// HBufC8* data = theBuffer.AllocLC();// HBufC8::NewLC(2000); + +// TPtr8 theBufferClone(data->Des()); +// theBufferClone.Copy(theBuffer.Ptr()); + length = theBuffer.Length(); + size = theBuffer.Size(); + testMessage.WriteL(0, theBuffer); + testMessage.Complete(KErrNone); + + // Reset buffer and set buffer from the Message + thePackage->Clear(); + thePackage->SetBufferFromMessageL(testMessage); + + + CDesCArray* testArray2 = thePackage->UnpackDesCArrayLC(); +// CleanupStack::PushL(testArray2); + err = CompareDescArrayTestL(testArray2, testArray1); + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(3, thePackage); + } + + +void CPackagerTests::CContactIdArrayTestL() + { + test.Next(_L("CContactIdArrayTestL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a CContactIdArrayTestL Array from a contact item. + iCntTestImpl.CreateDatabaseL(nsCntTestImpl::KSecureDBName, ETrue); + + const CContactTemplate& goldenTemplate = iCntTestImpl.GetSysTemplate(); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(goldenTemplate, _L("Template"))); +#endif + + CContactItem* card = CContactCard::NewLC(&goldenTemplate); + TCnt theCnt(card); + + theCnt[KUidContactFieldGivenName] = _L("AExample"); + theCnt[KUidContactFieldFamilyName] = _L("BExample"); + + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell = _L("mo1 39849342"); + theCnt[KUidContactFieldPhoneNumber] & KHome & KVoice & KCell += _L("mo2 34530903495803948503984545"); + + theCnt[KUidContactFieldEMail] & KHome = _L("home@email"); + theCnt[KUidContactFieldAddress] & KHome = _L("Home addresssssss"); + theCnt[KUidContactFieldLocality] & KHome = _L("Glazgo"); + theCnt[KUidContactFieldIMAddress] & KHome & KWv = _L("wireless@village"); + theCnt[KUidContactFieldSecondName] = _L("Second name"); + + theCnt[KUidContactFieldCompanyName] = _L("SymbianFoundation"); + theCnt[KUidContactFieldJobTitle] = _L("Driver"); + theCnt[KUidContactFieldPhoneNumber] & KWork & KVoice = _L("work Tel 2342"); + + theCnt[KUidContactFieldEMail] & KWork = _L("work@email"); + theCnt[KUidContactFieldUrl] & KWork = _L("sdfsd"); + theCnt[KUidContactFieldAddress] & KWork = _L("afas df asd"); + theCnt[KUidContactFieldLocality] & KWork = _L("sdfsd"); + + theCnt[KUidContactFieldCustom1] = _L("Filterable 1"); + theCnt[KUidContactFieldCustom2] = _L("Filterable 2"); + + theCnt[KUidContactFieldGivenNamePronunciation] = _L("first name re"); + theCnt[KUidContactFieldFamilyNamePronunciation] = _L("Last name re"); + + theCnt[KUidContactFieldSIPID] & KPoc = _L("SIP POC"); + theCnt[KUidContactFieldSIPID] & KSwis = _L("SIP SWIS"); + theCnt[KUidContactFieldSIPID] & KVoip = _L("SIP VOIP"); + +#ifdef __T_PACKAGER_DUMP_CONTACT__ + TESTTRAP(iCntTestImpl.DumpContactL(*card, _L("Before Creation"))); +#endif + + iCntTestImpl.CreateL(*card); + + // Create second contact item + CPersistenceLayer* iPersistLayer = CPersistenceLayer::NewLC(iFs); + CContactItemViewDef* cntItemVdef = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields, CContactItemViewDef::EMaskHiddenFields); + cntItemVdef->AddL(KUidContactFieldMatchAll); + + MLplContactsFile& cntFile = iPersistLayer->ContactsFileL(); + + TRAPD(err, cntFile.CreateL(KCreatePlPerform, true ? MLplContactsFile::EPlOverwrite : MLplContactsFile::EPlLeaveIfExist)); + User::LeaveIfError(err); + TRAP(err, while(cntFile.OpenStepL(KCreatePlPerform)){}); + User::LeaveIfError(err); + + CContactItem* card2 = NULL; + card2 = iPersistLayer->PersistenceBroker().ReadLC(KGoldenTemplateId, *cntItemVdef, EPlAllInfo, 0); + + + // Create CContactIdArray + CContactIdArray* theIdArray1 = CContactIdArray::NewLC(); + theIdArray1->AddL(card->Id()); + theIdArray1->AddL(card->TemplateRefId()); + theIdArray1->AddL(card2->Id()); + theIdArray1->AddL(card2->TemplateRefId()); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer(NULL, NULL); + TInt err2 = KErrNoMemory; + while(err2==KErrNoMemory) + { + TRAPD(error, (theBuffer.Set(thePackage->PackL(*theIdArray1)))); + err2= error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CContactIdArray* theIdArray2 = thePackage->UnpackCntIdArrayLC(); + err2 = CompareCContactIdArrayTestL(theIdArray1, theIdArray2); + User::LeaveIfError(err2); + + CleanupStack::PopAndDestroy(7, thePackage); + } + +TInt CPackagerTests::CompareCContactIdArrayTestL(CContactIdArray* idArray1, CContactIdArray* idArray2) + { + // CContactIdArray + if((idArray1==NULL)||(idArray2==NULL)) + { + if(!((idArray1==NULL)&&(idArray2==NULL))) + { + return KErrNotFound; + } + } + + else + { + if(idArray1->Count()!=idArray2->Count()) + { + return KErrNotFound; + } + else + { + for(TInt i=0; iCount(); i++) + { + if((*idArray1)[i]!=(*idArray2)[i]) + { + return KErrNotFound; + } + } + } + } + + return KErrNone; + } + +TInt CPackagerTests::CompareCntItemViewDefTestL(CContactItemViewDef* viewDef1, CContactItemViewDef* viewDef2) + { + // CContactItemViewDef + + if(viewDef1->Mode()!=viewDef2->Mode()) + { + return KErrNotFound; + } + + if(viewDef1->Use()!=viewDef2->Use()) + { + return KErrNotFound; + } + + if(viewDef1->Count()!=viewDef2->Count()) + { + return KErrNotFound; + } + else + { + for(TInt i=0; iCount(); i++) + { + if((*viewDef1)[i]!=(*viewDef2)[i]) + { + return KErrNotFound; + } + } + } + + return KErrNone; + } + +TInt CPackagerTests::CompareCntViewDefTestL(CContactViewDef* def1, CContactViewDef* def2) + { + // CContactViewDef + + return CompareCntItemViewDefTestL(&(def1->ItemDef()), &(def2->ItemDef())); + } + + +void CPackagerTests::CCntFilterTestL() + { + test.Next(_L("CContactIdArrayTestL")); + + CCntPackager* thePackage = CCntPackager::NewL(); + CleanupStack::PushL(thePackage); + + // Create a CCntFilter item. + CCntFilter* filter1 = CCntFilter::NewL(); + CleanupStack::PushL(filter1); + + filter1->SetContactFilterTypeCard(ETrue); + TTime time; + time.UniversalTime(); + time-=TTimeIntervalMinutes(20); // changes in the last 20 mins + filter1->SetFilterDateTime(time); + filter1->SetIncludeNewContacts(ETrue); + filter1->SetContactFilterTypeALL(ETrue); + + // For now, call this to allocate memory for buffer in packager. + TPtrC8 theBuffer(NULL, NULL); + TInt err = KErrNoMemory; + while(err==KErrNoMemory) + { + TRAPD(error, (theBuffer.Set(thePackage->PackL(*filter1)))); + err= error; + if(error==KErrNoMemory) + { + thePackage->GetTransmittingBuffer(); + + } + } + + CCntFilter* filter2 = thePackage->UnpackCntFilterLC(); + err = CompareCCntFilterTestL(filter1, filter2); + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(3, thePackage); + } + +TInt CPackagerTests::CompareCCntFilterTestL(CCntFilter* filter1, CCntFilter* filter2) + { + // CCntFilter + if(CompareCContactIdArrayTestL(filter1->iIds, filter2->iIds)!=KErrNone) + { + return KErrNotFound; + } + + if(filter1->GetFilterDateTime()!=filter2->GetFilterDateTime()) + { + return KErrNotFound; + } + + if(filter1->iInclude!=filter2->iInclude) + { + return KErrNotFound; + } + + if(filter1->iContactType!=filter2->iContactType) + { + return KErrNotFound; + } + + return KErrNone; + } + +//Persistence test construction and destruction +CPackagerTests* CPackagerTests::NewLC (CCntTestImplementor& aCntTestImpl) + { + CPackagerTests* self = new (ELeave) CPackagerTests(aCntTestImpl); + CleanupStack::PushL(self); + + self->ConstructL(); + + return self; + } + +void CPackagerTests::ConstructL() + { + User::LeaveIfError(iFs.Connect()); + iMatchAll = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EIncludeHiddenFields); + iMatchAll->AddL(KUidContactFieldMatchAll); + CleanupStack::Pop(iMatchAll); + } + +CPackagerTests::~CPackagerTests() + { + delete iMatchAll; + iFs.Close(); + } + + +/** + +@SYMTestCaseID PIM-T-PACKAGER-0001 + +*/ + + +LOCAL_C void DoTestsL() + { + CleanupClosePushL(test); + CPackagerTests* cntTester = NULL; + test.Start(_L("@SYMTESTCaseID:PIM-T-PACKAGER-0001 Persistency tests")); + + + RPIMTestServer serv; + User::LeaveIfError(serv.Connect()); + +#ifdef RUN_CNT + + test.Start(_L("Contact model tests")); + + __UHEAP_MARK; + CCntTestImpl* oldCntTestImpl = CCntTestImpl::NewLC(); + + cntTester = CPackagerTests::NewLC(*oldCntTestImpl); + cntTester->AllTestsL(); + POPD(cntTester); + + CleanupStack::PopAndDestroy(oldCntTestImpl); + oldCntTestImpl = NULL; + test.End(); + __UHEAP_MARKEND; +#endif + +#ifdef RUN_PL + + test.Start(_L("Persistence Layer Tests")); + + __UHEAP_MARK; + CPlTestImpl* plCntTestImpl = CPlTestImpl::NewLC(); + cntTester = CPackagerTests::NewLC(*plCntTestImpl); + cntTester->AllTestsL(); + + POPD(cntTester); + CleanupStack::PopAndDestroy(plCntTestImpl); + plCntTestImpl = NULL; + test.End(); + __UHEAP_MARKEND; + +#endif + + + serv.Close(); + test.End(); + CleanupStack::PopAndDestroy(1); // test.Close + + } + + + + +GLDEF_C TInt E32Main() + { + // Init + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + if (!cleanupStack) + { + return KErrNoMemory; + } + + CActiveScheduler* activeScheduler = new CActiveScheduler; + if (!activeScheduler) + { + return KErrNoMemory; + } + CActiveScheduler::Install(activeScheduler); + + // Run the tests + __UHEAP_MARK; + TRAPD(err, DoTestsL()); + __UHEAP_MARKEND; + + + test(__NB_failures == 0); + + // Cleanup + delete activeScheduler; + delete cleanupStack; + activeScheduler = NULL; + cleanupStack = NULL; + + return err; + } + +