--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/T_EXPDEL.CPP Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,394 @@
+// Copyright (c) 1997-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:
+//
+
+#include <e32test.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <s32mem.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include <e32def.h>
+#include "T_EXPDEL.H"
+#include "T_UTILS.H"
+#include <coreappstest/testserver.h>
+
+CCntTest* CntTest=NULL;
+LOCAL_D RTest test(_L("T_EXPDEL"));
+LOCAL_D CContactIdArray* TheIds;
+
+LOCAL_D CArrayPtr<CContactItem>* TheItems;
+LOCAL_D CArrayPtr<CContactItem>* TheItems2;
+LOCAL_D CTestRegister* FileRegister;
+
+const TPtrC KDatabaseFileName=_L("C:T_EXPDEL");
+//
+// CVersitTest
+//
+
+void CVCardTest::GetSampleVersitL()
+ {
+ iParser=CParserVCard::NewL();
+ iVersit.Zero();
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("BEGIN:VCARD"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("VERSION:2.1"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("N:FName1;GName1"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("TEL;HOME:111"));
+ iVersit.Append(KVersitTokenCRLF);
+
+ iVersit.Append(_L8("AGENT:"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("BEGIN:VCARD"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("VERSION:2.1"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("N:FName2;GName2"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("TEL;HOME:222"));
+ iVersit.Append(KVersitTokenCRLF);
+ iVersit.Append(_L8("END:VCARD"));
+ iVersit.Append(KVersitTokenCRLF);
+
+
+ iVersit.Append(_L8("END:VCARD"));
+ iVersit.Append(KVersitTokenCRLF);
+ }
+
+void CVCardTest::GetSampleVersit2L()
+ {
+ }
+
+
+CVersitTest::CVersitTest()
+ {}
+
+CVersitTest::~CVersitTest()
+ {
+ delete iParser;
+ delete iStore;
+ }
+
+void CVersitTest::StreamInL()
+//Convert the iVersit into stream format, save it as "ExpDelVersitIn"
+//and internalize it as a CVersitParser
+ {
+ RFile file;
+ FileRegister->CreateTempFileLC(file, _L("ExpDelVersit2"));
+ CDirectFileStore* store = CDirectFileStore::NewLC(file);
+ store->SetTypeL(KDirectFileStoreLayoutUid);
+ RStoreWriteStream outstream;
+ TStreamId id = outstream.CreateLC(*store);
+ TInt length=iVersit.Length();
+ for (TInt ii=0; ii<length; ii++)
+ outstream.WriteInt8L(iVersit[ii]);
+ outstream.CommitL();
+ CleanupStack::PopAndDestroy();
+ store->SetRootL(id);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(2); // store + file
+ FileRegister->OpenTempFileLC(file, _L("ExpDelVersit2"));
+ store = CDirectFileStore::NewLC(file);
+ RStoreReadStream instream;
+ instream.OpenLC(*store,store->Root());
+ iParser->InternalizeL(instream);
+ CleanupStack::PopAndDestroy(3); //store + stream + file
+ }
+
+void CVersitTest::StreamLC(RReadStream& aStream)
+ {
+ GetSampleVersitL();
+ RFile file;
+ FileRegister->CreateTempFileLC(file, _L("ExpDelVersitIn"));
+ CDirectFileStore* store = CDirectFileStore::NewLC(file);
+ store->SetTypeL(KDirectFileStoreLayoutUid);
+ RStoreWriteStream outstream;
+ TStreamId id = outstream.CreateLC(*store);
+ TInt length=iVersit.Length();
+ for (TInt ii=0; ii<length; ii++)
+ outstream.WriteInt8L(iVersit[ii]);
+ outstream.CommitL();
+ CleanupStack::PopAndDestroy();
+ store->SetRootL(id);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(2); // store + file
+ FileRegister->OpenTempFileLC(file, _L("ExpDelVersitIn"));
+ store = CDirectFileStore::NewLC(file);
+ RStoreReadStream instream;
+ instream.OpenLC(*store,store->Root());
+ CleanupStack::Pop(); // instream
+ aStream=RReadStream(instream);
+ }
+
+void CVersitTest::Stream2LC(RReadStream& aStream)
+ {
+ GetSampleVersit2L();
+ RFile file;
+ FileRegister->CreateTempFileLC(file, _L("ExpDelVersitIn2"));
+ CDirectFileStore* store = CDirectFileStore::NewLC(file);
+ store->SetTypeL(KDirectFileStoreLayoutUid);
+ RStoreWriteStream outstream;
+ TStreamId id = outstream.CreateLC(*store);
+ TInt length=iVersit.Length();
+ for (TInt ii=0; ii<length; ii++)
+ outstream.WriteInt8L(iVersit[ii]);
+ outstream.CommitL();
+ CleanupStack::PopAndDestroy();
+ store->SetRootL(id);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(); // store
+ FileRegister->OpenTempFileLC(file, _L("ExpDelVersitIn2"));
+ store = CDirectFileStore::NewLC(file);
+ RStoreReadStream instream;
+ instream.OpenLC(*store,store->Root());
+ CleanupStack::Pop(); // instream
+ aStream=RReadStream(instream);
+ }
+
+void CVersitTest::StreamOutL()
+ {
+ }
+
+void CVersitTest::SaveFileVersitL()
+// Save iParser into VersitFile
+ {
+ if (iParser)
+ {
+ RFile file;
+ FileRegister->CreateTempFileLC(file, _L("VersitFile"));
+ iParser->ExternalizeL(file);
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+
+//
+// CVCardTest
+//
+
+void CVCardTest::LoadFileVersitL()
+// Read VCard.vcf into iVersit
+ {
+ iParser=CParserVCard::NewL();
+ RFs fsSession;
+ User::LeaveIfError(fsSession.Connect());
+ RFile file;
+ FileRegister->OpenTempFileLC(file, _L("VCard.vcf"));
+ TInt start=0;
+ iParser->InternalizeL(file,start);
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+LOCAL_C void SetNameL(CContactItem& aItem,TUid aVcardType,const TDesC& aName)
+//
+// Set the contents of a text field, creating the field if required
+//
+ {
+ CContactItemFieldSet& fieldSet=aItem.CardFields();
+ const TInt pos=fieldSet.Find(KUidContactFieldFamilyName);
+ if (pos!=KErrNotFound)
+ fieldSet[pos].TextStorage()->SetTextL(aName);
+ else
+ {
+ CContactItemField* field=CContactItemField::NewLC(KStorageTypeText,KUidContactFieldFamilyName);
+ field->SetMapping(aVcardType);
+ field->TextStorage()->SetTextL(aName);
+ aItem.AddFieldL(*field);
+ CleanupStack::Pop(); // item
+ }
+ }
+
+
+LOCAL_C void AddNewContactsL()
+//
+// Add 20 new contacts
+//
+ {
+
+ for (TInt ii=0;ii<20;ii++)
+ {
+ CContactCard* card=CContactCard::NewL();
+ CleanupStack::PushL(card);
+ TBuf<16> name;
+ name.Format(_L("NAME #%d"),ii);
+ SetNameL(*card,KUidContactFieldVCardMapUnusedN,name);
+ CContactItemField* field=CContactItemField::NewLC(KStorageTypeText,KUidContactFieldPhoneNumber);
+ field->SetMapping(KUidContactFieldVCardMapTEL);
+ field->TextStorage()->SetTextL(_L("123"));
+ card->AddFieldL(*field);
+ CleanupStack::Pop(); // field
+ CntTest->Db()->AddNewContactL(*card);
+ CleanupStack::PopAndDestroy(); // card
+ }
+
+ }
+
+LOCAL_C void EmptyDatabase()
+ {
+ TContactItemId theid;
+ TContactIter iter(*CntTest->Db());
+ theid=iter.FirstL();
+ while(theid!=KNullContactId )
+ {
+ CntTest->Db()->DeleteContactL(theid);
+ theid=iter.NextL();
+ }
+ }
+
+
+LOCAL_C void IncAccessCount()
+ {
+ TContactItemId theid;
+ TContactIter iter(*CntTest->Db());
+ theid=iter.FirstL();
+ while(theid!=KNullContactId )
+ {
+ CContactItem* contactItem=CntTest->Db()->OpenContactL(theid);
+ CleanupStack::PushL(contactItem);
+ contactItem->IncAccessCount();
+ theid=iter.NextL();
+ CntTest->Db()->CommitContactL(*contactItem);
+ CleanupStack::PopAndDestroy(); // contactitem
+ }
+ }
+
+
+LOCAL_C void DecAccessCount()
+ {
+ TContactItemId theid;
+ TContactIter iter(*CntTest->Db());
+ theid=iter.FirstL();
+ while(theid!=KNullContactId )
+ {
+ CContactItem* contactItem=CntTest->Db()->OpenContactL(theid);
+ CleanupStack::PushL(contactItem);
+ if (contactItem->IsDeleted())
+ test.Next(_L("Synchronizer knows record 2 is deleted"));
+
+ contactItem->DecAccessCount();
+ CntTest->Db()->CommitContactL(*contactItem);
+ theid=iter.NextL();
+ CleanupStack::PopAndDestroy(); // contactitem
+ }
+ }
+
+LOCAL_C void Synchronize()
+ {
+ DecAccessCount();
+ }
+
+/**
+
+@SYMTestCaseID PIM-T-EXPDEL-0001
+
+*/
+
+LOCAL_C void DoTestsL()
+ {
+ // create test database
+ test.Start(_L("@SYMTESTCaseID:PIM-T-EXPDEL-0001 Preparing tests"));
+
+
+ FileRegister = CTestRegister::NewLC();
+
+ TheIds=CContactIdArray::NewLC();
+
+ TRAPD(err,CContactDatabase::DeleteDatabaseL(KDatabaseFileName));
+ if (err < KErrNotFound)
+ {
+ User::Leave(err);
+ }
+
+ CVersitTest* vtest=NULL;
+ if (vtest)
+ CleanupStack::PopAndDestroy(); //vtest;
+ vtest=new(ELeave)CVCardTest;
+ CleanupStack::PushL(vtest);
+ CVersitTest* vtest2=NULL;
+ vtest2=new(ELeave)CVCardTest;
+ CleanupStack::PushL(vtest2);
+
+ //Populating
+ test.Next(_L("creating 20 contacts"));
+
+ CContactDatabase *db=CntTest->CreateDatabaseL();
+ AddNewContactsL();
+ test(db->CountL()==20);
+ test.Next(_L("Increase Access Count"));
+
+ IncAccessCount();
+ test.Next(_L("Removing second contact"));
+
+ TContactIter iter(*db);
+ TContactItemId theid=iter.FirstL();
+ theid=iter.NextL();
+ db->DeleteContactL(theid);
+ test(db->CountL()==19);
+ test.Next(_L("Synchronizing"));
+
+ Synchronize();
+ test(db->CountL()==19);
+ test.Next(_L("Exporting"));
+
+ TheIds=CContactIdArray::NewLC();
+ theid=iter.FirstL();
+ while(theid!=KNullContactId )
+ {
+ TheIds->AddL(theid);
+ theid=iter.NextL();
+ }
+ RFile file;
+ FileRegister->CreateTempFileLC(file, _L("expdela"));
+ CDirectFileStore* store = CDirectFileStore::NewLC(file);
+ store->SetTypeL(KDirectFileStoreLayoutUid);
+ RStoreWriteStream outstream;
+ TStreamId id = outstream.CreateLC(*store);
+ TUid uid;
+ uid.iUid=KVersitEntityUidVCard;
+ db->ExportSelectedContactsL(uid,*TheIds,outstream,CContactDatabase::EIncludeX | CContactDatabase::EIncreaseAccessCount);
+
+ outstream.CommitL();
+ store->SetRootL(id);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(3); // store, oustream, file
+
+ CleanupStack::PopAndDestroy(); //TheIds
+ test.Next(_L("Emptying database"));
+
+ EmptyDatabase();
+
+ if (TheItems)
+ TheItems->ResetAndDestroy();
+ delete TheItems;
+ if (TheItems2)
+ TheItems2->ResetAndDestroy();
+ delete TheItems2;
+
+ CleanupStack::PopAndDestroy(2); // vtest, vtest2
+ CntTest->CloseDatabase();
+ CleanupStack::PopAndDestroy(); //TheIds
+ CleanupStack::PopAndDestroy(FileRegister);
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ CntTest=new(ELeave) CCntTest;
+ CntTest->ConstructL(test,KDatabaseFileName);
+ TRAPD(err,DoTestsL());
+ CntTest->EndTestLib(err);
+ return KErrNone;
+ }