messagingfw/msgtestfw/Framework/src/CMtfTestActionManager.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtestfw/Framework/src/CMtfTestActionManager.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,180 @@
+// 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 "CMtfTestActionManager.h"
+#include "CMtfTestActionParameters.h"
+#include "CMtfTestServer.h"
+#include "CMtfTestAction.h"
+#include "CMtfTestActionWait.h"
+
+_LIT(KActionParam,"actionParam");
+_LIT(KInvalidActionParameters,"Invalid Action Parameters");
+
+// ISSUE: Add NewLC function.		
+
+CMtfTestActionManager* CMtfTestActionManager::NewL(CMtfTestServer& aTestServer,
+			const TDesC& aActionName)
+{
+	CMtfTestActionManager* self=new(ELeave) CMtfTestActionManager(aTestServer);
+	CleanupStack::PushL(self);
+	self->ConstructL(aActionName);
+	CleanupStack::Pop();
+	return self;
+}
+
+void CMtfTestActionManager::ConstructL(const TDesC& aActionName)
+{
+	iActionName = aActionName.AllocL();
+}
+
+CMtfTestActionManager* CMtfTestActionManager::NewL(CMtfTestServer& aTestServer)
+{
+	CMtfTestActionManager* self=new(ELeave) CMtfTestActionManager(aTestServer);
+	return self;
+}
+ 
+CMtfTestActionManager::CMtfTestActionManager(CMtfTestServer& aTestServer)
+	: iTestServer(aTestServer)
+{
+}
+		
+CMtfTestActionManager::~CMtfTestActionManager() 
+{
+	delete iActionName;
+}
+
+TVerdict CMtfTestActionManager::doTestStepPreambleL()  
+{
+	return TestStepResult();
+}
+	
+/** Reads the .ini file and attempts to obtain parameters for the test action that 
+this instance is managing. This functionality should become superfluous once TestExecute scripts
+are changed to allow parameters directly in the script itself. */ 
+TVerdict CMtfTestActionManager::doTestStepL()
+{
+	if (iActionName == NULL)
+	{
+		// no test action to manage
+		return TestStepResult();
+	}
+	
+	// Obtain parameters for the action and save them.
+
+	TPtrC parameter;
+	HBufC* actionId = NULL;
+	CMtfTestActionParameters* actionParams = CMtfTestActionParameters::NewL();
+	CleanupStack::PushL(actionParams);
+	
+	// if this check is false then we assume no parameters
+	if (GetStringFromConfig(ConfigSection(),KActionParam,parameter))
+	{
+		TLex parser(parameter);
+		
+		parser.SkipSpace();
+		
+		// if this check is false then we assume no parameters
+		if (!parser.Eos())
+		{
+			// there are parameters present
+			// parameters are separated by white space
+			// there is an optional action id parameter, in which case all other parameters
+			// must be enclosed in [], e.g., [ p1 p2 ... pn] action_id
+			
+			TBool actionIdPresent = EFalse; // "first [ encountered" flag
+			TBool paramBlockClosed = EFalse; // "second ] encountered" flag
+					
+			if (parser.Peek() == '[')
+			{
+				parser.Get();
+				actionIdPresent = ETrue;
+				parser.SkipSpace();
+				
+				// if we are at the end of the string then the parameters are just
+				// consisting of a single [
+			
+				if (parser.Eos())
+				{
+					User::Leave(KErrGeneral);
+				}
+			}
+			
+			// the loop will be entered
+			
+			while(!parser.Eos())
+			{
+				if (actionIdPresent && (parser.Peek() == ']'))
+				{
+					parser.Get();
+					paramBlockClosed = ETrue;
+					parser.SkipSpace();
+					
+					if (parser.Eos())
+					{
+						// no action id,  [....] 
+						// this is accepted
+						break;
+					}
+					
+					//actionId exists
+					actionId = parser.NextToken().AllocLC();
+					
+					parser.SkipSpace();
+					
+					// check there is nothing after the action id
+					__ASSERT_ALWAYS(parser.Eos(),User::Panic(KInvalidActionParameters,0));
+					
+					// we are at the end of the parameters, since the previous line 
+					// was passed, the loop will be exited at the next iteration
+				}
+			
+				actionParams->AddParameterL(parser.NextToken());
+				parser.SkipSpace();
+			}		
+			
+			if (actionIdPresent && !paramBlockClosed)
+			{
+				// [....] id was not closed with ]
+				User::Leave(KErrGeneral);
+			}
+		}
+	}
+
+	if (actionId)
+	{
+		// actionId is on the cleanup stack last
+		// CreateTestActionL takes ownership of actionParams at the END of the function
+		iTestServer.CreateTestActionL(*iActionName,actionParams,*actionId);
+		// test server has taken ownership of actionParams, we must not leave before
+		// popping them off, but first we have to pop off actionId
+		CleanupStack::PopAndDestroy(actionId);
+	}		
+	else
+	{
+		iTestServer.CreateTestActionL(*iActionName,actionParams);
+	}
+	
+	CleanupStack::Pop(actionParams);
+	return TestStepResult();
+}
+		
+TVerdict CMtfTestActionManager::doTestStepPostambleL()
+{
+	return TestStepResult();
+}