phonebookengines_old/contactsmodel/tsrc/T_EXPDEL.CPP
changeset 40 b46a585f6909
--- /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;
+    }