TVerdict CCreateSmsMessageTestStep::doTestStepL() { CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; CActiveScheduler::Install(scheduler); CleanupStack::PushL(scheduler); CSessionObserver* sessionObserver = new (ELeave) CSessionObserver; CleanupStack::PushL(sessionObserver); CMsvSession* session = CMsvSession::OpenSyncL(*sessionObserver); CleanupStack::PushL(session); _LIT(KFileName,"FileName"); TPtrC tag; if ( !GetStringFromConfig(ConfigSection(),KFileName,tag)) { ERR_PRINTF1(_L("No Input for FileName in CreateSmsMessage")); User::Leave(KErrNotReady); } HBufC* fileName = tag.AllocLC(); // 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* bodyRichText = CRichText::NewL(paraFormatLayer, charFormatLayer); CleanupStack::PushL(bodyRichText); // Store the file contents into the CRichText object bodyRichText->ImportTextFileL(0, fileName->Des(), ttOrg); // Create the SMS header object... CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *bodyRichText); CleanupStack::PushL(header); // Set the body text... CSmsSettings* smsSettings = CSmsSettings::NewL(); CleanupStack::PushL(smsSettings); CSmsAccount* account = CSmsAccount::NewLC(); account->LoadSettingsL(*smsSettings); // Copy the message settings... header->SetSmsSettingsL(*smsSettings); // Set the service centre TInt defaultIndex = smsSettings->DefaultServiceCenter(); header->SetServiceCenterAddressL(smsSettings->GetServiceCenter(defaultIndex).Address()); // Set recipient - ask derived class SetRecipientsL(*header); CArrayPtrFlat<CSmsNumber>& recipient = header->Recipients(); INFO_PRINTF1(_L("Creating message...")); TMsvEntry entry; entry.SetVisible(ETrue); entry.SetInPreparation(ETrue); TMsvId srvcId=0; TSmsUtilities::ServiceIdL(*session, srvcId); entry.iServiceId = srvcId; entry.iType = KUidMsvMessageEntry; entry.iMtm = KUidMsgTypeSMS; entry.iDate.UniversalTime(); entry.iSize = 0; entry.iDescription.Set(KNullDesC); entry.iDetails.Set(KNullDesC); entry.SetSendingState(KMsvSendStateWaiting); // Update entry description and details... entry.iDetails.Set(recipient[0]->Address()); entry.iDescription.Set(recipient[0]->Address()); entry.SetInPreparation(EFalse); //TPtrC tag; _LIT(KParent,"Parent"); TPtrC parentTag; if ( !GetStringFromConfig(ConfigSection(),KParent,parentTag)) { ERR_PRINTF1(_L("No Input for Outbox")); User::Leave(KErrNotReady); } // Create the entry - set context to the global outbox. TMsvId paramParentId = MsgingUtils::GetLocalFolderId(parentTag);//KMsvGlobalOutBoxIndexEntryId; CMsvEntry* newEntry = CMsvEntry::NewL(*session,paramParentId,TMsvSelectionOrdering()); CleanupStack::PushL(newEntry); newEntry->SetEntryL(paramParentId); newEntry->CreateL(entry); // Create new store and save header information newEntry->SetEntryL(entry.Id()); CMsvStore* store = newEntry->EditStoreL(); CleanupStack::PushL(store); header->StoreL(*store); store->StoreBodyTextL(*bodyRichText); store->CommitL(); //store,newEntry,account, smsSettings, header, bodyRichText,charFormatLayer, paraFormatLayer,fileName CleanupStack::PopAndDestroy(9,fileName); CleanupStack::PopAndDestroy(3, scheduler); SetTestStepResult(EPass); return TestStepResult(); }
/** ExecuteActionL Obtains the parameters for the test action. Get the Message Id at given index. The Message Id is stored as output parameters of this Test Action @internalTechnology @pre None @post None @leave System wide errors */ void CMtfTestActionSendAsSetBodyText::ExecuteActionL() { if((TestCase().TestStepResult()) == EPass) { TestCase().INFO_PRINTF2(_L("Test Action %S start..."), &KTestActionSendAsSetBodyText); // Get test action input parameters RSendAsMessage sendAsMessage = ObtainValueParameterL<RSendAsMessage>(TestCase(), ActionParameters().Parameter(0)); // Buffer type to be used for adding the body text // 0 => Set body text using Descriptor // 1 => Set body text using CRichText object (Default) TInt bufferType = ObtainValueParameterL<TInt>(TestCase(), ActionParameters().Parameter(1),1); TInt index = ObtainValueParameterL<TInt>(TestCase(), ActionParameters().Parameter(2)); // Get the body text configuration file name TPtrC fileName = TestCase().GetConfigurationFileL(CMtfConfigurationType::EMtfDataFile,index); // Create a Rich text object to store the Body text contents CPlainText::TTextOrganisation ttOrg = {CPlainText::EOrganiseByLine}; CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL(); CleanupStack::PushL(paraFormatLayer); CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL(); CleanupStack::PushL(charFormatLayer); CRichText* bodyCRichText = CRichText::NewL(paraFormatLayer, charFormatLayer); CleanupStack::PushL(bodyCRichText); HBufC* bodyTextFileName = fileName.Alloc(); CleanupStack::PushL(bodyTextFileName); // Read the body text contents into the Rich text object bodyCRichText->ImportTextFileL(0, bodyTextFileName->Des(), ttOrg); TInt err = KErrNone; // Set body text using descriptor if( bufferType == 0 ) { // Create a heap buffer and copy the file contents TInt len1 = bodyCRichText->DocumentLength(); HBufC* buf1 = HBufC::NewL(len1); CleanupStack::PushL(buf1); TPtr fileContents = buf1->Des(); bodyCRichText->Extract(fileContents,0,(len1)); // Set the body text to the message TRAP(err, sendAsMessage.SetBodyTextL(fileContents)); if(err == KErrNone) { TestCase().INFO_PRINTF1(_L("SetBodyTextL using Descriptor was successful")); } else { TestCase().ERR_PRINTF2(_L("SetBodyTextL using Descriptor failed with error: %d"), err); TestCase().SetTestStepResult(EFail); } // destroy the temporary storage of the text CleanupStack::PopAndDestroy(buf1); } else if (bufferType == 1) { // Set body text using CRichText TRAP(err, sendAsMessage.SetBodyTextL(*bodyCRichText)); if(err == KErrNone) { TestCase().INFO_PRINTF1(_L("SetBodyTextL using Rich Text was successful")); } else { TestCase().ERR_PRINTF2(_L("SetBodyTextL using Rich Text failed with error: %d"), err); TestCase().SetTestStepResult(EFail); } } else { err = KErrArgument; TestCase().ERR_PRINTF2(_L("Incorrent input parameter: Buffer type value should be either 0 or 1. The value provided is %d"),bufferType ); TestCase().SetTestStepResult(EFail); } StoreParameterL<TInt>(TestCase(),err,ActionParameters().Parameter(3)); CleanupStack::PopAndDestroy(4); //bodyTextFileName, bodyCRichText, charFormatLayer, paraFormatLayer TestCase().INFO_PRINTF2(_L("Test Action %S completed."), &KTestActionSendAsSetBodyText); } TestCase().ActionCompletedL(*this); }