messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsMessage.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsMessage.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,366 @@
+// Copyright (c) 2003-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:
+//
+
+/**
+ @file
+*/
+
+#include "MtfTestActionUtilsUser.h"
+#include "CMtfTestActionUtilsMessage.h"
+#include "TestFrameworkActionsUtils.h"
+
+
+#include "txtfmlyr.h"
+#include "txtrich.h"
+#include "smuthdr.h" 
+#include "miuthdr.h"
+#include "miutmsg.h"
+
+#include<btmsgtypeuid.h>
+#include<irmsgtypeuid.h>
+
+#include "obexheader.h"
+
+#include<btheader.h>
+#include<irheader.h>
+
+
+/*
+ Compare the Body text contents of the message with the file contents
+*/
+TInt CMtfTestActionUtilsMessage::VerifyBodyTextContentsL(CMsvEntry& aEntry, HBufC* aFileName )
+	{
+	TInt returnValue = KErrNone;
+	
+	// Create a Rich Text object
+	CPlainText::TTextOrganisation ttOrg = {CPlainText::EOrganiseByLine};
+
+	CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+	CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+	CleanupStack::PushL(charFormatLayer);
+	CRichText* bodyRichText1 = CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyRichText1);
+	
+	// Store the file contents into the CRichText object
+	bodyRichText1->ImportTextFileL(0, aFileName->Des(), ttOrg);
+	
+	TInt len1 = bodyRichText1->DocumentLength();
+	HBufC* buf1 = HBufC::NewL(len1);
+	CleanupStack::PushL(buf1);
+	TPtr fileContents = buf1->Des();
+	bodyRichText1->Extract(fileContents,0,(len1));
+	
+	// Get the type of the message 
+	TUid msgMtmType = aEntry.Entry().iMtm; 
+
+
+	CRichText* bodyRichText = CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyRichText);
+	
+	// Email message
+	if((msgMtmType.operator==(KUidMsgTypeSMTP)) || (msgMtmType.operator==(KUidMsgTypePOP3)) || (msgMtmType.operator==(KUidMsgTypeIMAP4)) )
+		{
+		CImEmailMessage*	emailMsg = CImEmailMessage::NewLC(aEntry);
+		CImEmailMessage::TImEmailEntryType tt = CImEmailMessage::EThisMessageOnly;
+		
+		emailMsg->GetBodyTextL(aEntry.EntryId(),tt,*bodyRichText,*paraFormatLayer,*charFormatLayer);
+			
+		TInt len = bodyRichText->DocumentLength();
+		HBufC* buf = HBufC::NewL(len);
+		CleanupStack::PushL(buf);
+		TPtr bodyContents = buf->Des();
+		bodyRichText->Extract(bodyContents,0,(len));
+
+		returnValue = bodyContents.Compare(fileContents);
+		CleanupStack::PopAndDestroy(2,emailMsg);
+		}
+	else if((msgMtmType.operator==(KUidMsgTypeSMS)))
+		{
+		// SMS message	
+		CMsvStore* store = aEntry.ReadStoreL();
+		CleanupStack::PushL(store);
+		
+		store->RestoreBodyTextL(*bodyRichText);
+		TInt len = bodyRichText->DocumentLength();
+		
+		HBufC* buf = HBufC::NewL(len);
+		CleanupStack::PushL(buf);
+		TPtr bodyContents = buf->Des();
+		bodyRichText->Extract(bodyContents,0,(len));
+
+		returnValue = bodyContents.Compare(fileContents);
+		CleanupStack::PopAndDestroy(2,store);
+		}
+	else if((msgMtmType.operator==(KUidMsgTypeIrUID)) ||(msgMtmType.operator==(KUidMsgTypeBt)))
+		{
+		returnValue = KErrNotSupported;
+		}
+		else
+		{
+		returnValue = KErrUnknown;
+		}
+	CleanupStack::PopAndDestroy(5,paraFormatLayer);
+	return returnValue;
+	}
+
+TInt CMtfTestActionUtilsMessage::VerifySmsRecipientsL(CMsvStore& aMsgStore,CDesC16Array&  aRecipientArray)
+	{
+	CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+	CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+	CleanupStack::PushL(charFormatLayer);
+	CRichText* richText = CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(richText);
+	richText->Reset();
+	
+	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *richText);
+	CleanupStack::PushL(header);
+	
+	header->RestoreL(aMsgStore);
+	
+	TInt returnValue = KErrNone;
+	
+	// Get the recipient addresses set for the SMS message
+	CArrayPtrFlat<CSmsNumber>& recipientList = header->Recipients();
+
+	// Verify the count of the recipient address set
+	if(aRecipientArray.Count() != recipientList.Count())
+		{
+		returnValue = KErrGeneral;
+		}
+	else
+		{
+		TBool foundFlag = EFalse;
+		
+		for(TInt index = 0; index < aRecipientArray.Count(); index++, foundFlag = EFalse)
+			{
+			for(TInt indexRcptArray = 0; indexRcptArray < recipientList.Count(); indexRcptArray++)
+				{
+				TPtrC address = recipientList.At(indexRcptArray)->Address();
+				if(aRecipientArray.MdcaPoint(index).Compare(address) == 0)
+					{
+					foundFlag = ETrue;
+					break;
+					}
+				}//End of inner For Loop
+					
+			if (foundFlag == EFalse)
+				{
+				returnValue = KErrNotFound;
+				break;
+				}
+			}// End If
+		}// End else
+		
+	CleanupStack::PopAndDestroy(4,paraFormatLayer);
+
+	return returnValue;
+	}
+			
+
+TInt CMtfTestActionUtilsMessage::VerifyEmailRecipientsL(CMsvStore& aMsgStore,CDesC16Array& aRecipientArray, TImHeaderEncodingInfo::TFieldList aFieldType)
+	{
+	CImHeader* header = CImHeader::NewLC();
+	header->RestoreL(aMsgStore);
+
+	TInt returnValue = KErrNone;
+	CDesCArray* rcptArray = NULL;
+
+	switch(aFieldType)
+		{
+		case  TImHeaderEncodingInfo::ETo:
+			rcptArray = &(header->ToRecipients());
+		break;
+		case  TImHeaderEncodingInfo::ECc:
+			rcptArray = &(header->CcRecipients());
+		break;
+		case  TImHeaderEncodingInfo::EBcc:
+			rcptArray = &(header->BccRecipients());
+		break;	
+		default:
+			returnValue = KErrNotSupported;
+		}
+	 
+	if( returnValue == KErrNone)
+		{
+		if( aRecipientArray.Count() != rcptArray->Count())
+			{
+			returnValue = KErrGeneral;
+			}
+		else
+			{
+			TInt recipientArrayCount = aRecipientArray.Count();
+			
+			TBool foundFlag = EFalse;
+			for(TInt index = 0; index < recipientArrayCount; index++, foundFlag = EFalse)
+				{
+				for(TInt indexRcptArray = 0; indexRcptArray < recipientArrayCount; indexRcptArray++)
+					{
+					TPtrC ptr = aRecipientArray.MdcaPoint(index);
+					TPtrC ptr1 =rcptArray->MdcaPoint(indexRcptArray);
+					if (ptr.Match(ptr1) == 0)
+						{
+						foundFlag = ETrue;
+						break;
+						}
+					}//End of inner For Loop
+					
+				if (foundFlag == EFalse)
+					{
+					returnValue = KErrNotFound;
+					break;
+					}
+				}//End of FOR loop
+			}//End Else
+		}//End If
+		
+	CleanupStack::PopAndDestroy(header);
+	return returnValue;
+	}		
+
+
+
+/**
+   The function is called if IR or Bluetooth
+   The recipient address set for the message is verified against
+   the expected valuse
+*/ 
+  																			/*TPtrC8*/
+TInt CMtfTestActionUtilsMessage::VerifyObexRecipientL (CMsvEntry& aEntry, CMsvStore& aStore,	CDesC16Array&  aRecipientArray)
+	{
+	TInt returnValue = KErrNone;
+	TUid msgMtmType = aEntry.Entry().iMtm;
+
+	CObexMtmHeader* header;
+	    
+	if(msgMtmType.operator == (KUidMsgTypeBt))
+		{
+		header = CBtHeader::NewL();
+		}
+	else if(msgMtmType.operator == (KUidMsgTypeIrUID))
+		{
+		header = CIrHeader::NewL();
+		}
+	else
+		{
+		return KErrUnknown;
+		}
+	CleanupStack::PushL(header);
+		
+	header->RestoreL(aStore);
+
+	TPtrC8 tmp = header->Addr();
+	HBufC*	itemBuff = HBufC::NewLC(tmp.Length());
+	itemBuff->Des().Copy(tmp);
+	TPtrC16 msgRecipientAddr = itemBuff->Des();
+	
+	if(aRecipientArray.MdcaPoint(0).Compare(msgRecipientAddr) != 0)
+		{
+		returnValue = KErrGeneral;
+		}
+
+	CleanupStack::PopAndDestroy(itemBuff);	
+	CleanupStack::PopAndDestroy(header);
+	return returnValue;
+	}
+	
+	
+
+TInt CMtfTestActionUtilsMessage::VerifyEmailSubjectL (CMsvEntry& aEntry,HBufC*  aSubject)
+	{
+	TInt returnValue = KErrNone;
+	
+	CMsvStore* store = aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+	
+	CImHeader* messageHeader = CImHeader::NewLC();
+	messageHeader->RestoreL(*store);
+
+	TPtrC messageSubject = messageHeader->Subject();
+
+	if(messageSubject.Compare(*aSubject) != 0)
+		{
+		returnValue = KErrGeneral;
+		}
+	
+	CleanupStack::PopAndDestroy(messageHeader);
+	CleanupStack::PopAndDestroy(store);
+	
+	return returnValue;
+	}
+
+
+TInt CMtfTestActionUtilsMessage::VerifyObexSubjectL (CMsvEntry& aEntry, HBufC* aSubject)
+	{
+	TInt returnValue = KErrNone;
+	TUid msgMtmType = aEntry.Entry().iMtm;
+
+	CObexMtmHeader* header;
+    
+	if(msgMtmType.operator==(KUidMsgTypeBt))
+		{
+		header = CBtHeader::NewL();
+		}
+	else if(msgMtmType.operator==(KUidMsgTypeIrUID))
+		{
+		header = CIrHeader::NewL();
+		}
+	else
+		{
+		return KErrUnknown;
+		}
+	CleanupStack::PushL(header);
+	
+	CMsvStore* msgStore = aEntry.ReadStoreL();
+	
+	CleanupStack::PushL(msgStore);
+	
+	header->RestoreL(*msgStore);
+
+	TPtrC messageSubject = header->Subject();
+
+	if( messageSubject.Compare(*aSubject) != 0 )
+		{
+		returnValue = KErrGeneral;
+		}
+		
+	CleanupStack::PopAndDestroy(msgStore);
+	CleanupStack::PopAndDestroy(header);
+		
+	return returnValue;
+	}
+
+void CMtfTestActionUtilsMessage::FormatBtRecipientAddress(TDesC& aRecipient, TDes& formattedAddr)
+	{
+	TPtrC16 ptr16 = aRecipient;
+	
+	for(int index = 0; index < 12; index+=4)
+		{
+		// do 4 characters to get one out. We're going to force the compiler to do the character endianness.
+		TUint8 byte1 = TestFrameworkActionsUtils::GetByteFromUnicodeHexTextChar(&ptr16[index]);
+		TUint8 byte2 = TestFrameworkActionsUtils::GetByteFromUnicodeHexTextChar(&ptr16[index+1]);
+		TUint8 byte3 = TestFrameworkActionsUtils::GetByteFromUnicodeHexTextChar(&ptr16[index+2]);
+		TUint8 byte4 = TestFrameworkActionsUtils::GetByteFromUnicodeHexTextChar(&ptr16[index+3]);
+
+		byte1 = (TUint8) ( ((byte1 & 0x0F) << 4) | (byte2 & 0x0f) );
+		byte3 = (TUint8) ( ((byte3 & 0x0F) << 4) | (byte4 & 0x0f) );
+
+		// make sure this is put together in network endianness
+		TUint16 result = (TUint16)( (TUint16)(byte3 << 8) | byte1 );
+
+		formattedAddr.Append( result );
+		}
+	}