--- /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 );
+ }
+ }