messagingapp/msgappfw/plugins/msgplugin/tsrc/src/test_pluginblocks.cpp
changeset 37 518b245aa84c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/src/test_pluginblocks.cpp	Fri Jun 25 15:47:40 2010 +0530
@@ -0,0 +1,985 @@
+/*
+#
+# Copyright (c) 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:   Main test class for CS Message Plugin
+#*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <msvsearchsortoperation.h>
+#include <msvsearchsortquery.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <TXTRICH.H>
+#include <SMUTHDR.H>
+#include <smut.h>
+#include <msvstd.h>
+#include <rsendas.h>
+#include <rsendasmessage.h>
+#include <ecom\ECom.h>
+#include "test_plugin.h"
+#include "CCsPlugin.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::Delete
+//  
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::Delete() 
+    {          
+	iResultConversationEntryList.ResetAndDestroy();
+	iResultConversationEntryList.Close();
+
+	 iTestConversationEntryList.ResetAndDestroy();
+	 iTestConversationEntryList.Close();
+
+	 if( iPlugin )
+		 {
+			 delete iPlugin;
+			 iPlugin = NULL;
+		 }
+	 
+	 if (iSession)
+		 {
+			 delete iSession;
+			 iSession = NULL;
+		 }
+	}
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::RunMethodL
+// 
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::RunMethodL( CStifItemParser& aItem ) 
+    {
+    TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        		
+        ENTRY( "Example", Ctest_plugin::ExampleL ),
+        ENTRY( "CacheFromCcsPluginL", Ctest_plugin::CacheFromCcsPluginL ),
+        ENTRY( "CreateCCsMsgL", Ctest_plugin::CreateCCsMsgL ),		
+        
+        ENTRY( "CreateCcsPluginL", Ctest_plugin::CreateCcsPluginL ),
+        ENTRY( "SendCcsMessageL", Ctest_plugin::SendCcsMessageL ),
+        ENTRY( "SmsMsgPluginValidationL", Ctest_plugin::SmsMsgPluginValidationL),
+        ENTRY( "MmsMsgPluginValidationL",Ctest_plugin::MmsMsgPluginValidationL),
+        ENTRY( "BioMsgPluginValidationL",Ctest_plugin::BioMsgPluginValidationL)
+              
+        };
+
+    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+    return RunInternalL( KFunctions, count, aItem );
+    }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::ExampleL( CStifItemParser& aItem )
+    {
+	
+    // Print to UI
+    _LIT( Ktestplugin, "testplugin" );
+    _LIT( KExample, "In Example" );
+    TestModuleIf().Printf( 0, Ktestplugin, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, Ktestplugin,
+                KParam, i, &string );
+        i++;
+        }
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateCCsMsgL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CreateCCsMsgL( CStifItemParser& /*aItem*/ )
+	{
+	
+	// Print to UI
+    _LIT( Ktestplugin, "CreateCCsMsgL" );
+    _LIT( KFunction, "In CreateCCsMsgL" );
+    TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+	// Print to log file
+	iLog->Log( KFunction );
+	iPlugin = CCsMsg::NewL(this);
+	iPlugin->GetConversationsL();
+	
+    return KErrNone;
+ 	 
+	} 
+ 
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CacheFromCcsPluginL
+// Creates the ccs plugin and initiates the caching
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CacheFromCcsPluginL( CStifItemParser& /*aItem*/ )
+    {
+	// Print to UI
+	_LIT( Ktestplugin, "CacheFromCcsPluginL" );
+	_LIT( KFunction, "In CacheFromCcsPluginL" );
+	TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+		// Print to log file
+	iLog->Log( KFunction );
+
+    iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+    
+    iPlugin = CCsMsg::NewL(this);
+    iPlugin->GetConversationsL();
+     
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateCcsPluginL
+// Creates ccs plugin.
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CreateCcsPluginL( CStifItemParser& /*aItem*/ )
+    {
+	// Print to UI
+	_LIT( Ktestplugin, "CreateCcsPluginL" );
+	_LIT( KFunction, "In CreateCcsPluginL" );
+	TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+			// Print to log file
+	iLog->Log( KFunction );
+
+    iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+    
+    iPlugin = CCsMsg::NewL(this);
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::SendCcsMessageL
+// Send ccs message using RSendAs api
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::SendCcsMessageL( CStifItemParser& /*aItem*/ )
+    {
+	// Print to UI
+	_LIT( Ktestplugin, "SendCcsMessageL" );
+	_LIT( KFunction, "In SendCcsMessageL" );
+	TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+	// Print to log file
+	iLog->Log( KFunction );
+
+    iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+
+    RSendAs sendas;
+    CleanupClosePushL(sendas);
+    TInt res = sendas.Connect();
+    User::LeaveIfError(res);
+    
+    RSendAsMessage message;
+    CleanupClosePushL(message);
+    TRAP(res, message.CreateL(sendas, KUidMsgTypeSMS));
+    User::LeaveIfError(res);
+
+    TBuf<512> MsgText;
+    MsgText.Copy(_L("Message being sent"));
+    message.SetBodyTextL(MsgText);
+    TBuf<15> RecAdd;
+    RecAdd.Copy(_L("123456789"));
+    message.AddRecipientL(RecAdd,RSendAsMessage::ESendAsRecipientTo );
+
+
+    message.SendMessageAndCloseL();
+    CleanupStack::Pop(1); // RMessage
+    CleanupStack::PopAndDestroy(1); // RSendAs
+
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateMmsMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateMmsMessageL(const TMsvId aFolderId,
+        TBool aUnReadFlag)
+	{
+		
+	// create a new object to access an existing entry
+	CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
+	CleanupStack::PushL(msvEntry);
+	
+	TMsvId defaultServiceId = 0;
+	defaultServiceId = iMmsClientMtm->DefaultServiceL();
+	
+	_LIT( KMMSBody, " Hi !!!");
+	
+	CleanupStack::Pop(msvEntry);
+	iMmsClientMtm->SetCurrentEntryL(msvEntry);
+	iMmsClientMtm->CreateMessageL(defaultServiceId);
+	iMmsClientMtm->SetSubjectL(KMMSBody);
+	
+	// set some mms defaults
+	iMmsClientMtm->SetMessageClass(EMmsClassPersonal);
+	iMmsClientMtm->SetExpiryInterval(86400);
+	iMmsClientMtm->SetDeliveryTimeInterval(3600);
+	iMmsClientMtm->SetMessagePriority(EMmsPriorityLow);
+	iMmsClientMtm->SetSenderVisibility(EMmsMaximumSenderVisibility);
+	iMmsClientMtm->SetDeliveryReport(EMmsDeliveryReportYes);
+	iMmsClientMtm->SetReadReply(EMmsReadReplyYes);        
+	
+	_LIT(KPhoneNumberString,"234567");
+	TBuf<15> phoneNumberString;
+	phoneNumberString.Copy(KPhoneNumberString);
+	_LIT(KPhoneNumberString1,"mine<98450>");
+	_LIT(KResultPhoneNumberString,"98450");
+	
+	if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+		{
+	iMmsClientMtm->SetSenderL(KResultPhoneNumberString);
+		}
+	
+	iMmsClientMtm->AddAddresseeL(KResultPhoneNumberString);
+	
+	CMsvStore* store = msvEntry->EditStoreL();
+	CleanupStack::PushL(store);
+	
+	// set body as an attachment
+	CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+	CleanupStack::PushL(mimeHeaders);
+	mimeHeaders->SetContentTypeL( _L8("text") );
+	mimeHeaders->SetContentSubTypeL( _L8("plain") );
+	mimeHeaders->SetMimeCharset( KMmsUtf8 );
+	mimeHeaders->SetSuggestedFilenameL( _L("body.txt") );    
+	         
+	MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+	CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+	CleanupStack::PushL(attachmentInfo);
+	attachmentInfo->SetAttachmentNameL( _L("body.txt") );
+	attachmentInfo->SetMimeTypeL( _L8("text/plain") );
+	mimeHeaders->StoreL( *attachmentInfo );
+	    
+	RFile textFile;
+
+	CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+	attachMan.CreateAttachmentL(_L("body.txt"), textFile, attachmentInfo, waiter->iStatus );
+	CleanupStack::Pop(); // waiter
+	CleanupStack::Pop(); // attachmentInfo
+	CleanupStack::PushL(waiter);
+	waiter->Start();
+	CleanupStack::PopAndDestroy(waiter);    
+	
+	HBufC8* tempBuf = HBufC8::NewLC( 10 );
+	tempBuf->Des().Copy( KMMSBody );
+	textFile.Write( tempBuf->Des() );        
+	textFile.Close();
+	CleanupStack::PopAndDestroy(); //tempBuf
+	    
+	CleanupStack::PopAndDestroy(); //mimeHeaders
+
+	// get the entry of the message
+	 TMsvEntry messageEntry = iMmsClientMtm->Entry().Entry();        
+	
+	 // set the description field same as the message subject
+	 messageEntry.iDescription.Set( KMMSBody );
+
+	// save the changes done above
+	iMmsClientMtm->Entry().ChangeL(messageEntry); 
+	
+	TFileName attachmentFile( _L("c:\\pictures\\picture123.txt") );	
+	HandleAttachementL(store,attachmentFile );
+	
+	// save the changes made to the message store
+	store->CommitL();
+	CleanupStack::PopAndDestroy(store);   
+	               
+	// save the message      
+	iMmsClientMtm->SaveMessageL();
+	   
+	   // final fine tuning
+	messageEntry.SetAttachment(ETrue);
+	messageEntry.iDate.HomeTime();
+	messageEntry.SetVisible(ETrue);
+	messageEntry.SetInPreparation(EFalse);
+	
+	if( aUnReadFlag )
+      {
+		  messageEntry.SetUnread(ETrue);
+	      messageEntry.SetNew(ETrue);
+	   }
+	  else
+	  {
+		  messageEntry.SetUnread(EFalse);
+		  messageEntry.SetNew(EFalse);
+	  }
+	  messageEntry.SetComplete(ETrue);
+	  messageEntry.iServiceId = defaultServiceId;
+	  messageEntry.iRelatedId = 0;
+	      
+	  if (aFolderId == KMsvDraftEntryId) 
+	          messageEntry.SetReadOnly(EFalse);
+	  else
+	          messageEntry.SetReadOnly(ETrue);
+     
+	  messageEntry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
+	  	
+	  iMmsClientMtm->Entry().ChangeL(messageEntry);
+	      
+	  }
+
+void Ctest_plugin:: HandleAttachementL(CMsvStore* store,TFileName& sourceFileName )
+	{
+    
+	// attachment settings
+	MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+	CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+	CleanupStack::PushL(attachmentInfo);
+	attachmentInfo->SetAttachmentNameL( sourceFileName);        
+	attachmentInfo->SetMimeTypeL(_L8("text") );
+
+	CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+    CleanupStack::PushL(mimeHeaders);
+    mimeHeaders->SetContentTypeL( _L8("text") );
+    mimeHeaders->SetContentSubTypeL( _L8("plain") );
+    mimeHeaders->SetMimeCharset( KMmsUtf8 );
+    mimeHeaders->StoreL( *attachmentInfo );
+    CleanupStack::PopAndDestroy( mimeHeaders );
+	 
+	CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+	TInt err;
+	TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
+	if (err == KErrNone)
+	{
+		 waiter->Start();
+	     CleanupStack::PopAndDestroy(waiter);
+	     CleanupStack::Pop(); // attachmentInfo, the ownership is transferred
+	 }	
+	 else
+	 {
+		 CleanupStack::PopAndDestroy(waiter);
+	     CleanupStack::PopAndDestroy(); // attachmentInfo, ownership is not transferred (leave occurs)
+	     _LIT( Ktestplugin, "HandleAttachment" );
+	     _LIT( KFunction, "In HandleAttachment::Failed" );
+	 }
+		
+	 }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateSmartMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateSmartMessageL(const TMsvId aFolderId,TBool aUnReadFlag)
+{
+
+    // create a new object to access an existing entry
+    CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
+    CleanupStack::PushL(msvEntry);
+
+    TMsvId defaultServiceId = 0;
+    defaultServiceId = iSmsClientMtm->DefaultServiceL();
+
+   // mtm takes ownership of entry context	
+    CleanupStack::Pop(msvEntry);
+    iSmsClientMtm->SetCurrentEntryL(msvEntry);    
+    
+    // create a new message
+    iSmsClientMtm->CreateMessageL(defaultServiceId);
+    
+    // Add addressee
+    _LIT(KPhoneNumberString,"234567");
+    TBuf<15> phoneNumberString;
+    phoneNumberString.Copy(KPhoneNumberString);
+
+    _LIT(KPhoneNumberString1,"mine<98450>");
+    _LIT(KResultPhoneNumberString,"98450");
+    
+    // set the from field to sms header
+    if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+    {
+		CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader();
+		smsHeader.SetFromAddressL(KResultPhoneNumberString);
+    }
+    
+    // set body, the BIO message itself
+    iSmsClientMtm->Body().Reset();
+    iSmsClientMtm->Body().InsertL(0, _L("Business Card\nTester Mike\nThe Company Ltd.\nSoftware Engineer\ntel +358 66 1234567\n")); 
+
+    // get the entry of the message
+    TMsvEntry messageEntry = iSmsClientMtm->Entry().Entry();
+
+    // TO-DO: Add support for all BIO messages, currently just insert a business card message ... :
+    // set the message type
+    // parameters.iBIOMessageType ...
+    iSmsClientMtm->BioTypeChangedL(KMsgBioUidVCard);
+    messageEntry.iBioType = KMsgBioUidVCard.iUid;
+    
+    if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+    {
+        iMmsClientMtm->SetSenderL(KResultPhoneNumberString);
+    }
+    
+    _LIT( KBioBody, " Hi !!!");
+ 
+    messageEntry.iDescription.Set(KBioBody);
+    
+    // set correct MTM type
+    messageEntry.iMtm= KUidBIOMessageTypeMtm;
+
+   // save the changes done above
+   iSmsClientMtm->Entry().ChangeL(messageEntry);
+
+    // save the message     
+   iSmsClientMtm->SaveMessageL();
+        	
+   // final fine tuning
+   messageEntry.SetAttachment(EFalse);
+   messageEntry.iDate.HomeTime();
+   messageEntry.SetVisible(ETrue);
+   messageEntry.SetInPreparation(EFalse);
+   
+   if( aUnReadFlag )
+   	{
+   		  messageEntry.SetUnread(ETrue);
+   	      messageEntry.SetNew(ETrue);
+   	 }
+   else
+   	 {
+   		  messageEntry.SetUnread(EFalse);
+   		  messageEntry.SetNew(EFalse);
+   	  }
+
+   messageEntry.SetComplete(ETrue);
+   messageEntry.iServiceId = defaultServiceId;
+   messageEntry.iRelatedId = 0;
+   iSmsClientMtm->Entry().ChangeL(messageEntry);
+  
+
+}
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateMessageL(const TMsvId aFolderId,
+        TBool aUnReadFlag)
+    {
+    CCsConversationEntry *conversationEntry = CCsConversationEntry::NewL();
+    CleanupStack::PushL(conversationEntry);
+
+    //Create entry from this index entry
+    iSmsClientMtm->SwitchCurrentEntryL( aFolderId );
+    iSmsClientMtm->CreateMessageL(KUidMsgTypeSMS.iUid);
+
+    TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry();
+
+    indexEntry.SetInPreparation(ETrue);
+    indexEntry.iMtm = KUidMsgTypeSMS;
+    indexEntry.iType = KUidMsvMessageEntry;
+    indexEntry.iServiceId = iSmsClientMtm->ServiceId();
+    indexEntry.iDate.HomeTime();
+
+    //AddBody
+    _LIT( KSMSBody, " Hi,Hello Phone Owner !!!");
+    TBuf<160> shortDescription;
+    shortDescription.Append(KSMSBody);
+    CRichText& body = iSmsClientMtm->Body();
+    body.Reset();
+    body.InsertL( 0, KSMSBody );
+    indexEntry.iDescription.Set(KSMSBody);
+
+    // Add addressee
+    _LIT(KPhoneNumberString,"234567");
+    TBuf<15> phoneNumberString;
+    phoneNumberString.Copy(KPhoneNumberString);
+
+    _LIT(KPhoneNumberString1,"mine<98450>");
+    _LIT(KResultPhoneNumberString,"98450");
+
+    if( aFolderId == KMsvDraftEntryId )
+        {
+        iSmsClientMtm->AddAddresseeL(KPhoneNumberString,TPtrC());
+        iSmsClientMtm->AddAddresseeL(KPhoneNumberString1,TPtrC());
+
+        CCsConversationEntry *conversationEntry1 = CCsConversationEntry::NewL();
+        conversationEntry->SetContactL(KPhoneNumberString);
+        conversationEntry->SetEntryId( indexEntry.Id());
+        conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+        conversationEntry->SetDescriptionL(shortDescription);
+        conversationEntry->ChangeAttributes(ECsAttributeDraft, ECsAttributeNone);
+        conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+        conversationEntry->SetSendState( ECsSendStateUnknown );
+        conversationEntry->SetType( ECsSMS );
+
+        conversationEntry1->SetContactL(KResultPhoneNumberString);
+        conversationEntry1->SetEntryId( indexEntry.Id());
+        conversationEntry1->SetTimeStampL( indexEntry.iDate.Int64());
+        conversationEntry1->SetDescriptionL(shortDescription);
+        conversationEntry1->ChangeAttributes(ECsAttributeDraft, ECsAttributeNone);
+        conversationEntry1->SetConversationDir(ECsDirectionOutgoing);
+        conversationEntry1->SetSendState( ECsSendStateUnknown );
+        conversationEntry1->SetType( ECsSMS );
+
+        CleanupStack::PushL(conversationEntry1);
+        iTestConversationEntryList.AppendL(conversationEntry);
+        iTestConversationEntryList.AppendL(conversationEntry1);
+        CleanupStack::Pop(conversationEntry1);
+        }
+    else if( aFolderId == KMsvGlobalOutBoxIndexEntryId )
+        {
+        iSmsClientMtm->AddAddresseeL(KPhoneNumberString,TPtrC());
+        indexEntry.SetSendingState( KMsvSendStateWaiting );
+
+        conversationEntry->SetContactL(KPhoneNumberString);
+        conversationEntry->SetEntryId( indexEntry.Id());
+        conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+        conversationEntry->SetDescriptionL(shortDescription);
+        conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+        conversationEntry->SetSendState( ECsSendStateWaiting );
+        conversationEntry->SetType( ECsSMS );
+
+        iTestConversationEntryList.AppendL(conversationEntry);
+        }
+    else if( aFolderId == KMsvSentEntryId )
+        {
+        CSmsHeader&  smsHeader = iSmsClientMtm->SmsHeader();
+        smsHeader.SetFromAddressL(KPhoneNumberString);
+        indexEntry.iDetails.Set( KPhoneNumberString );
+
+        conversationEntry->SetContactL(KPhoneNumberString);
+        conversationEntry->SetEntryId( indexEntry.Id());
+        conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+        conversationEntry->SetDescriptionL(shortDescription);
+        conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+        conversationEntry->SetSendState( ECsSendStateUnknown );
+        conversationEntry->SetType( ECsSMS );
+
+        iTestConversationEntryList.AppendL(conversationEntry);
+        }
+    // final fine tuning
+    indexEntry.SetAttachment(EFalse);
+
+    indexEntry.SetVisible(ETrue);
+    indexEntry.SetInPreparation(EFalse);
+
+    if ( aFolderId == KMsvGlobalInBoxIndexEntryId )
+        {
+        CSmsHeader&  smsHeader = iSmsClientMtm->SmsHeader();
+        smsHeader.SetFromAddressL(KPhoneNumberString);
+        indexEntry.iDetails.Set( KPhoneNumberString );
+
+        if( aUnReadFlag )
+            {
+            indexEntry.SetUnread(ETrue);
+            conversationEntry->SetSendState( ECsSendStateUnknown );
+            conversationEntry->ChangeAttributes( ECsAttributeUnread, ECsAttributeNone );
+            }
+        else
+            {
+            conversationEntry->SetSendState( ECsSendStateUnknown );
+            conversationEntry->ChangeAttributes( ECsAttributeNone, ECsAttributeUnread );
+            }
+        conversationEntry->SetContactL(KPhoneNumberString);
+        conversationEntry->SetEntryId( indexEntry.Id());
+        conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+        conversationEntry->SetDescriptionL(shortDescription);
+        conversationEntry->SetConversationDir(ECsDirectionIncoming);
+        conversationEntry->SetType( ECsSMS );
+
+        iTestConversationEntryList.AppendL(conversationEntry);
+
+        indexEntry.SetNew(ETrue);
+        }
+
+    indexEntry.SetComplete(ETrue);
+    iSmsClientMtm->Entry().ChangeL(indexEntry);
+    iSmsClientMtm->SaveMessageL();
+
+    if ( iTestConversationEntryList.Count() == 0 )
+        {
+    	CleanupStack::PopAndDestroy(conversationEntry);
+        }
+    else
+        {
+        CleanupStack::Pop(conversationEntry);
+        }
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CacheFromCcsPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::SmsMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT(Ktestplugin, "CacheFromCcsPluginValidationL" );
+    _LIT( KFunction, "In CacheFromCcsPluginValidationL" );
+    TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+    // Print to log file
+    iLog->Log( KFunction );
+
+    CleanAllFoldersL();
+    CreateInitialCacheL();
+
+    iPlugin = CCsMsg::NewL(this);
+    iPlugin->GetConversationsL();
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::MmsPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::MmsMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT(Ktestplugin, "MmsPluginValidationL" );
+    _LIT( KFunction, "In MmsPluginValidationL" );
+    TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+    // Print to log file
+    iLog->Log( KFunction );
+
+    CleanAllFoldersL();
+   
+    iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+    
+    CreateMmsMessageL(KMsvGlobalInBoxIndexEntryId);
+    CreateMmsMessageL(KMsvSentEntryId);
+    CreateMmsMessageL(KMsvDraftEntryId);
+    CreateMmsMessageL(KMsvGlobalOutBoxIndexEntryId);;
+
+    iPlugin = CCsMsg::NewL(this);
+    iPlugin->GetConversationsL();
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::BioMsgPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::BioMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT(Ktestplugin, "BioMsgPluginValidationL" );
+    _LIT( KFunction, "In BioMsgPluginValidationL" );
+    TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+    // Print to log file
+    iLog->Log( KFunction );
+
+    CleanAllFoldersL();
+   
+    iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+    
+    CreateSmartMessageL(KMsvGlobalOutBoxIndexEntryId);
+    CreateSmartMessageL(KMsvSentEntryId);
+    CreateSmartMessageL(KMsvDraftEntryId);
+    CreateSmartMessageL(KMsvGlobalOutBoxIndexEntryId);
+    
+    iPlugin = CCsMsg::NewL(this);
+    iPlugin->GetConversationsL();
+
+    return KErrNone;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CleanAllFoldersL
+// Cleans messages from all folders
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CleanAllFoldersL()
+    {
+    CleanMessagesInFolderL(KMsvGlobalInBoxIndexEntryId);
+    CleanMessagesInFolderL(KMsvGlobalOutBoxIndexEntryId);
+    CleanMessagesInFolderL(KMsvDraftEntryId);
+ // CleanMessagesInFolderL(KMsvSentEntryId);
+    }
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateInitialCacheL
+// Populates the messages in different folders which are used
+// to verify the caching logic of ccs plugin
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CreateInitialCacheL()
+    {
+	
+	iTestConversationEntryList.ResetAndDestroy();
+    iResultConversationEntryList.ResetAndDestroy();
+    
+    CreateMessageL(KMsvGlobalInBoxIndexEntryId);
+    CreateMessageL(KMsvSentEntryId);
+    CreateMessageL(KMsvDraftEntryId);
+    CreateMessageL(KMsvGlobalOutBoxIndexEntryId);
+       
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CleanMessagesInFolderL
+// Cleans messages from the specified folder
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CleanMessagesInFolderL(TMsvId aBoxId,TBool aDeleteOne)
+    {
+    iLog->Log(_L("In CleanMessagesInFolderL"));
+    TInt count;
+    CMsvEntry* cEntry = NULL;
+    // delete messages from the specified box
+    cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+    CleanupStack::PushL(cEntry);
+    cEntry->SetEntryL(aBoxId);
+    // show invisible entries
+    cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+    CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeSMS);
+    CleanupStack::PushL(msvEntrySelection);
+
+    if( aDeleteOne )
+        {
+        count =1;
+        }
+    else
+        {
+        count = msvEntrySelection->Count();
+        }
+
+    for ( int i = 0; i < count ; i++ )
+        {
+        CMsvEntry* entry = iSession->GetEntryL( msvEntrySelection->At(i) );
+        CleanupStack::PushL( entry );
+        TMsvEntry tEntry = entry->Entry();
+        tEntry.SetReadOnly(EFalse);
+        entry->ChangeL(tEntry);
+        cEntry->DeleteL( msvEntrySelection->At(i) );
+        CleanupStack::PopAndDestroy( entry );
+        }
+
+    CleanupStack::PopAndDestroy(msvEntrySelection);
+    CleanupStack::PopAndDestroy(cEntry);
+    iLog->Log(_L("End of CleanMessagesInFolderL"));
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CachingCompleted.
+// Caching error event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CachingError(const TInt /*aError*/)
+    {
+    Signal(KErrGeneral);
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CachingCompleted.
+// Caching complete event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CachingCompleted()
+    {
+    if( iTestConversationEntryList.Count() == 0 )
+        {
+        Signal(KErrNone);
+        return;
+        }
+    if( iResultConversationEntryList.Count() != iTestConversationEntryList.Count() )
+        {
+        // Delete();
+        Signal(KErrCancel);
+        }
+    else
+        {
+        TInt i;
+        for( i=0; i < iResultConversationEntryList.Count() ; i++ )
+            {
+            if( Compare(iResultConversationEntryList[i],iTestConversationEntryList[i] )!=0 )
+                {
+                break;
+                }
+            }
+        if( i == iResultConversationEntryList.Count() )
+            {
+            iTestConversationEntryList.ResetAndDestroy();
+            iResultConversationEntryList.ResetAndDestroy();
+            Signal(KErrNone);
+            }
+        else
+            {
+            Signal(KErrNotFound);
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::Compare
+// Compares the conversation entry stored conversation entry with
+// the conversation entry returned from sms plugin
+// -----------------------------------------------------------------------------
+TInt Ctest_plugin::Compare(CCsConversationEntry *aResult, CCsConversationEntry *aTest)
+    {
+    TInt comparison = 0;
+
+    if( aResult->Contact()->Des().Compare(aTest->Contact()->Des()) )
+        comparison++;
+
+    if( aResult->EntryId() != aTest->EntryId() )
+        comparison ++;
+
+    if( aResult->TimeStamp() != aTest->TimeStamp() )
+        comparison++;
+
+    if( aResult->ConversationDir() != aTest->ConversationDir() )
+        comparison++;
+
+    if( aResult->GetSendState() != aTest->GetSendState() )
+        comparison++;
+
+    if( aResult->GetType() != aTest->GetType() )
+        comparison++;
+
+    return comparison;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::AddConversations.
+// Handle Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::AddConversations(
+        const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+    {
+    CCsConversationEntry *conversationEntry ;
+   
+    for ( TInt i=0; i < aConversationEntryLists.Count(); i++ )
+        {
+        TRAP_IGNORE(
+                conversationEntry = aConversationEntryLists[i]->CloneL();
+                iResultConversationEntryList.AppendL(conversationEntry);
+        );
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::ModifyConversations.
+// Update Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::ModifyConversations(
+        const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+    {
+    if( iTestConversationEntryList.Count() == 0 )
+        {
+        Signal(KErrNone);
+        return;
+        }
+    //Expecting update for one entry at a time
+    TInt i;
+    for( i=0; i < aConversationEntryLists.Count() ; i++ )
+        {
+        if( Compare(aConversationEntryLists[i],iTestConversationEntryList[i] )!=0 )
+            {
+            break;
+            }
+        }
+    if( i == aConversationEntryLists.Count() )
+        {
+        iTestConversationEntryList.ResetAndDestroy();
+        iResultConversationEntryList.ResetAndDestroy();
+        Signal(KErrNone);
+        }
+    else
+        {
+        Signal(KErrNotFound);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::DeleteConversations.
+// Delete Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_plugin::DeleteConversations(
+        const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+    {
+    if( iTestConversationEntryList.Count() == 0 )
+        {
+        Signal(KErrNone);
+        return;
+        }
+    //Expecting update for one entry at a time
+    TInt i;
+    for( i=0; i < aConversationEntryLists.Count() ; i++ )
+        {
+        if( aConversationEntryLists[i]->EntryId() != iTestConversationEntryList[i]->EntryId() )
+            {
+            break;
+            }
+        }
+    if( i == aConversationEntryLists.Count() )
+        {
+        iTestConversationEntryList.ResetAndDestroy();
+        iResultConversationEntryList.ResetAndDestroy();
+        Signal(KErrNone);
+        }
+    else
+        {
+        Signal(KErrNotFound);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::RefreshConversations
+// Notify server to refresh conversations.
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::RefreshConversations()
+    {
+	
+    }