diff -r 000000000000 -r 8e480a14352b messagingfw/msgtest/integration/email/src/smtptestparsers.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/integration/email/src/smtptestparsers.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,370 @@ +// Copyright (c) 1999-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 "smtptestparsers.h" +#include "smtptests.h" + +_LIT(KCommandSmtpClientTest, "smtp_client_test"); + + +// SMTP commands +_LIT(KCommandSmtpService, "smtp_service"); + +// SMTP settings strings +_LIT(KCommandEmailSetServer, "set_server"); +_LIT(KCommandEmailSetAlias, "set_alias"); +_LIT(KCommandEmailSetAddress, "set_email_address"); +_LIT(KCommandEmailSetReplyAddress, "set_reply_address"); +_LIT(KCommandEmailSetReceiptAddress, "set_receipt_address"); +_LIT(KCommandSmtpSetTLS, "set_tls"); // 1 parameter, sets the secure connection for SMTP service + +_LIT(KCommandSmtp3SetWrappedTLS, "set_wrapped_tls"); // 1 parameter, sets the secure connection for SMTP service. value should be 1 or 0 +_LIT(KCommandSmtpSetPort, "set_port"); // 1 parameter, sets the port no for SMTP service. + + +_LIT(KCommandSmtpCheckStatus, "check_smtp_error"); + + +_LIT(KCommandSmtpCopyAndMonitor, "copy_and_monitor"); // 0 parameters, copies and monitors SMTP service + +// Smtp Operations +_LIT(KCommandSmtpUseService, "use_service"); // 0 parameters, uses the currently selected service + + +// +// +// CNewSmtpTestCommandParser +// + +// A command parser +// Parses the command which generates a new SMTP test harness +// This command would usually be found in an email test section + +CNewSmtpTestCommandParser* CNewSmtpTestCommandParser::NewL(CTestScript& aScript, CEmailClientTest& aEmailClientTest) + { + CNewSmtpTestCommandParser* self = new (ELeave) CNewSmtpTestCommandParser(aScript, aEmailClientTest); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + }; + +void CNewSmtpTestCommandParser::ProcessL() + { + // Create an smtp test, give it the test utilities + CSmtpClientTest* smtpTest = CSmtpClientTest::NewL(iEmailClientTest.EmailTestUtils(), iEmailClientTest.TestConsole()); + CleanupStack::PushL(smtpTest); + + // Attach the email test to the main test + iEmailClientTest.AddStateL(smtpTest, iDebugInfo); + CleanupStack::Pop(smtpTest); // emailTest is now owned by the iMainTest + + // Check that there is one argument, the email test section name + CheckNumberOfArgumentsL(1); + // Create an email section parser + CSmtpClientSectionParser* sectionParser = CSmtpClientSectionParser::NewL(*smtpTest, iScript, (*iArgumentList)[0]); + CleanupStack::PushL(sectionParser); + sectionParser->ParseL(); + CleanupStack::PopAndDestroy(sectionParser); + } + +void CNewSmtpTestCommandParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandSmtpClientTest); + } + +CNewSmtpTestCommandParser::CNewSmtpTestCommandParser(CTestScript& aScript, CEmailClientTest& aEmailClientTest) : iEmailClientTest(aEmailClientTest), iScript(aScript) + { + } + + + + +// +// +// CSmtpClientSectionParser +// + +// A section parser +// Parses an SMTP test section + +CSmtpClientSectionParser* CSmtpClientSectionParser::NewL(CSmtpClientTest& aSmtpClientTest, CTestScript& aScript, const TDesC& aNewSectionName) + { + CSmtpClientSectionParser* self = new (ELeave) CSmtpClientSectionParser(aSmtpClientTest, aScript); + CleanupStack::PushL(self); + self->ConstructL(aNewSectionName); + CleanupStack::Pop(self); + return self; + } + +void CSmtpClientSectionParser::ConstructL(const TDesC& aNewSectionName) + { + CEmailClientSectionParser::ConstructL(aNewSectionName); + AddCommandParserL(CSmtpServiceCommandParser::NewL(iScript, iSmtpTest)); + AddCommandParserL(CSmtpCheckStatusParser::NewL(iSmtpTest)); + AddCommandParserL(CSmtpOperationParser::NewL(iSmtpTest)); + } + +CSmtpClientSectionParser::CSmtpClientSectionParser(CSmtpClientTest& aSmtpTest, CTestScript& aScript) : CEmailClientSectionParser(aSmtpTest, aScript), iSmtpTest(aSmtpTest) + { + } + + + +// +// +// CSmtpServiceCommandParser +// + +void CSmtpServiceCommandParser::ProcessL() + { + CheckNumberOfArgumentsL(1); + // Create the settings object which we will give to the settings section parser + CSmtpServiceSectionParser* serviceParser = CSmtpServiceSectionParser::NewL(iScript, iSmtpClientTest, (*iArgumentList)[0]); + CleanupStack::PushL(serviceParser); + serviceParser->ParseL(); + CleanupStack::PopAndDestroy(serviceParser); + } + +CSmtpServiceCommandParser* CSmtpServiceCommandParser::NewL(CTestScript& aScript, CSmtpClientTest& aSmtpClientTest) + { + CSmtpServiceCommandParser* self = new (ELeave) CSmtpServiceCommandParser(aScript, aSmtpClientTest); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CSmtpServiceCommandParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandSmtpService); + } + +CSmtpServiceCommandParser::CSmtpServiceCommandParser(CTestScript& aScript, CSmtpClientTest& aSmtpClientTest) : iSmtpClientTest(aSmtpClientTest), iScript(aScript) + { + } + + +// +// +// CSmtpServiceSectionParser +// + +// A section parser +// Parses a SMTP section to create a SMTP service + +CSmtpServiceSectionParser* CSmtpServiceSectionParser::NewL(CTestScript& aScript, CEmailClientTest& aTestHarness, const TDesC& aSectionName) + { + CSmtpServiceSectionParser* self = new (ELeave) CSmtpServiceSectionParser(aScript, aTestHarness); + CleanupStack::PushL(self); + self->ConstructL(aSectionName); + CleanupStack::Pop(self); + return self; + } + +void CSmtpServiceSectionParser::ConstructL(const TDesC& aSectionName) + { + CBaseSectionParser::ConstructL(aSectionName); + + // Add the state to generate the smtp service + CCreateSmtpService* testState = CCreateSmtpService::NewL(iTestHarness); + TTestDebugInfo debugInfo(iScript, iSection->SectionPosition(), 0); + iTestHarness.AddStateL(testState, debugInfo); + + // The parsers will fill in the entry and service details before the state that creates the entry is run. + AddCommandParserL(CSmtpServiceCommands::NewL(*testState)); + + CEmailServiceSectionParser::ConstructL(aSectionName, *testState); + } + +CSmtpServiceSectionParser::CSmtpServiceSectionParser(CTestScript& aScript, CEmailClientTest& aTestHarness) : CEmailServiceSectionParser(aScript, aTestHarness) + { + } + +CSmtpServiceSectionParser::~CSmtpServiceSectionParser() + { + } + + + +// +// +// CSmtpServiceCommands +// + +// A command parser +// Parses the commands that generate the SMTP service + +CSmtpServiceCommands* CSmtpServiceCommands::NewL(CCreateSmtpService& aTestState) + { + CSmtpServiceCommands* self = new (ELeave) CSmtpServiceCommands(aTestState); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CSmtpServiceCommands::ProcessL() + { + // eh xxxx, check args + if ((*iCurrentCommand) == KCommandEmailSetServer) + { + iTestState.Settings().SetServerAddressL((*iArgumentList)[0]); + } + else if ((*iCurrentCommand) == KCommandEmailSetAlias) + { + iTestState.Settings().SetEmailAliasL((*iArgumentList)[0]); + iTestState.SetDetailsStringL((*iArgumentList)[0]); + } + else if ((*iCurrentCommand) == KCommandEmailSetAddress) + { + iTestState.Settings().SetEmailAddressL((*iArgumentList)[0]); + } + else if ((*iCurrentCommand) == KCommandEmailSetReplyAddress) + { + iTestState.Settings().SetReplyToAddressL((*iArgumentList)[0]); + } + else if ((*iCurrentCommand) == KCommandEmailSetReceiptAddress) + { + iTestState.Settings().SetReceiptAddressL((*iArgumentList)[0]); + } + else if ((*iCurrentCommand) == KCommandSmtpSetTLS) + { + CheckNumberOfArgumentsL(1); + TLex lex((*iArgumentList)[0]); + TInt setTls=0; + User::LeaveIfError(lex.Val(setTls)); + iTestState.Settings().SetSecureSockets(setTls); + } + else if ((*iCurrentCommand) == KCommandSmtp3SetWrappedTLS) + { + CheckNumberOfArgumentsL(1); + TLex lex((*iArgumentList)[0]); + TInt setWrappedTls=0; + User::LeaveIfError(lex.Val(setWrappedTls)); + iTestState.Settings().SetSSLWrapper(setWrappedTls); + } + else if ((*iCurrentCommand) == KCommandSmtpSetPort) + { + + CheckNumberOfArgumentsL(1); + TLex lex((*iArgumentList)[0]); + TInt setPort=0; + User::LeaveIfError(lex.Val(setPort)); + iTestState.Settings().SetPort(setPort); + + } + } + +CSmtpServiceCommands::CSmtpServiceCommands(CCreateSmtpService& aTestState) : iTestState(aTestState) + { + } + +void CSmtpServiceCommands::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandEmailSetServer); + AddCommandL(KCommandEmailSetAlias); + AddCommandL(KCommandEmailSetAddress); + AddCommandL(KCommandEmailSetReplyAddress); + AddCommandL(KCommandEmailSetReceiptAddress); + AddCommandL(KCommandSmtpSetTLS); + AddCommandL(KCommandSmtp3SetWrappedTLS); + AddCommandL(KCommandSmtpSetPort); + } + + + + + +// +// +// CSmtpCheckStatusParser +// + + +CSmtpCheckStatusParser* CSmtpCheckStatusParser::NewL(CSmtpClientTest& aSmtpTestHarness) + { + CSmtpCheckStatusParser* self = new (ELeave) CSmtpCheckStatusParser(aSmtpTestHarness); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CSmtpCheckStatusParser::ProcessL() + { + TLex lex((*iArgumentList)[0]); + TInt expectedStatus; + User::LeaveIfError(lex.Val(expectedStatus)); + iTestHarness.AddStateL(new (ELeave) CCheckSmtpOperation(expectedStatus, iTestHarness), iDebugInfo); + } + +CSmtpCheckStatusParser::CSmtpCheckStatusParser(CSmtpClientTest& aSmtpTestHarness) : iTestHarness(aSmtpTestHarness) + { + } + +void CSmtpCheckStatusParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandSmtpCheckStatus); + } + + +// +// +// CSmtpOperationParser +// + +CSmtpOperationParser* CSmtpOperationParser::NewL(CSmtpClientTest& aSmtpClientTest) + { + CSmtpOperationParser* self = new (ELeave) CSmtpOperationParser(aSmtpClientTest); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CSmtpOperationParser::ProcessL() + { + if ((*iCurrentCommand) == KCommandSmtpUseService) + { + CheckNumberOfArgumentsL(0); + iSmtpClientTest.AddStateL(new (ELeave) CSmtpUseService(iSmtpClientTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandSmtpCopyAndMonitor) + { + CheckNumberOfArgumentsL(0); + iSmtpClientTest.AddStateL(new (ELeave) CCopySelectionAndMonitor(iSmtpClientTest, EFalse), iDebugInfo); + } + else + { + User::Leave(KErrNotFound); + } + } + +void CSmtpOperationParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandSmtpUseService); + AddCommandL(KCommandSmtpCopyAndMonitor); + } + +CSmtpOperationParser::CSmtpOperationParser(CSmtpClientTest& aSmtpClientTest) : iSmtpClientTest(aSmtpClientTest) + { + } +