messagingfw/biomsgfw/T_BIOMSG/SRC/parsers.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/T_BIOMSG/SRC/parsers.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,1381 @@
+// 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:
+//
+
+#include "parsers.h"
+#include "commands.h"
+#include "biotestutils.h"
+
+//
+// The [main] section
+_LIT(KMainSectionName, "main");
+
+//
+// The bio_client_test command in the [main] section
+_LIT(KBioClientCmd,						"bio_test");
+
+//
+// The commands in the [client] section (general)
+_LIT(KCommandCleanMessageFolder,		"clean_message_folder");        // 0 parameters, deletes message store
+_LIT(KCommandPrettifyLog,				"prettify_log");				// 0 parameters, deletes message store
+_LIT(KCommandDumpParsedMsg,				"dump_parsed_message");         // 0 parameters, deletes message store
+_LIT(KCommandAddComment,				"add_comment");					// n parameters, adds a comment to the log, concatenates parameters
+_LIT(KCommandGenerateMsgFromFile,		"gen_msg_from_file");			// 1 parameter - FileName, create a BIO msg from a file, 
+_LIT(KCommandGenerateMsgFromSection,	"gen_msg_from_section");		// 1 parameter - FileName, create a BIO msg from a file, 
+_LIT(KCommandCheckUsedBif,				"check_used_bif");				// 1 parameter - the expected bif name, 
+_LIT(KCommandChkFileInMsgDirWithExt,    "chk_file_in_msg_dir_with_ext");// 0 parameters
+_LIT(KCommandCleanAllBioMsgs,			"clean_all_bio_msgs");			// 0 parameters, deletes all the BIO msgs in the message store
+
+//
+// The commands in the [client] section (TestBIODB)
+_LIT(KCommandDumpBif,					"bio_db_dump");					// 0 parameters, dumps biffs
+_LIT(KCommandBifAPITest,				"bio_db_api_test");				// 0 parameters, tests bif API
+_LIT(KCommandDumpWapBif,				"bio_db_dump_wap");
+//_LIT(KCommandCheckBioNess,				"bio_db_check_bioness");
+_LIT(KCommandDefaultSendBearer,			"bio_db_default_send_bearer");
+
+
+//
+// The commands in the [client] section (COMMDB)
+_LIT(KCommandClientCommDB,				"bio_commdb");					// 2 parameters, table name and section name
+//
+// The commands in the [client] section (MSV)
+_LIT(KCommandPop3SettingsCheck,						"check_pop3_defs");			//1 parameter - a section name.
+_LIT(KCommandPop3NamedSettingsCheck,				"check_pop3_named");	    //2 parameters - a section name and a SettingsName
+_LIT(KCommandSmtpSettingsCheck,						"check_smtp_defs");			//1 parameter - a section name.
+_LIT(KCommandSmtpNamedSettingsCheck,				"check_smtp_named");	    //2 parameters - a section name and a SettingsName
+_LIT(KCommandImapSettingsCheck,						"check_imap_defs");			//1 parameter - a section name.
+_LIT(KCommandImapNamedSettingsCheck,				"check_imap_named");	    //2 parameters - a section name and a SettingsName
+_LIT(KCommandSmsSettingsCheck,						"check_sms");				//1 parameter - a section name.
+
+//
+// The commands in the [client] section (TestClientSide)
+_LIT(KCommandClientParse,							"bio_client_parse");			// 1 optional parameter.
+_LIT(KCommandClientProcess,							"bio_client_process");
+_LIT(KCommandClientFindBody,						"bio_client_find_in_body");		// 1 parameter, finds text in message body
+_LIT(KCommandClientFindSubject,						"bio_client_find_in_subject");	// 1 parameter, finds text in message subject
+
+//
+// The commands in the [client] section (TestServerSide)
+_LIT(KCommandServerParse,							"bio_server_parse");
+_LIT(KCommandServerProcess,							"bio_server_process");
+
+
+//
+// The commands in the [check_sms_defs] section 
+
+_LIT(KCommandSmsChkMessageCentreNumber,				"chk_messagecentrenumber");		//2 parameters - the message centre name and expectred number
+_LIT(KCommandSmsChkDefaultMessageCentreNumber,		"chk_defaultmsgcentrenumber");  //1 parameters - the message centre name and expectred number
+_LIT(KCommandSmsDumpMessageCentres,					"dump_messagecentres");			//0 parameters
+
+
+//
+// The commands in the [check_pop3_defs] section 
+// NB: Those commented out are not in _current_ BIO spec.
+_LIT(KCommandPop3ChkLoginName,						"chk_pop3_loginname");				//1 parameter - the expected LogonName
+_LIT(KCommandPop3ChkPassword,						"chk_pop3_password");				//1 parameter - the expected Password
+_LIT(KCommandPop3ChkServerAddress,					"chk_pop3_serveraddress");			//1 parameter - the expected server address
+//_LIT(KCommandPop3ChkAPop,							"chk_pop3_apop");					//1 parameter - true or false
+//_LIT(KCommandPop3ChkAutoSendOnConnect,			"chk_pop3_autosendonconnect");		//1 parameter - true or false
+//_LIT(KCommandPop3ChkPort,							"chk_pop3_port");					//1 parameter - a number
+_LIT(KCommandPop3ChkUserAddress,					"chk_pop3_useraddress");				//1 parameter - the expected user@address
+//_LIT(KCommandPop3ChkVersion,						"chk_pop3_version");					//1 parameter - a number
+
+//
+// The commands in the [check_smtp_defs] section 
+// NB: Those commented out are not in _current_ BIO spec.
+//_LIT(KCommandSmtpEmailAlias,						"chk_smtp_emailalias");			//1 parameter - the expected value
+_LIT(KCommandSmtpEmailAddress,						"chk_smtp_emailaddress");		//1 parameter - the expected value
+//_LIT(KCommandSmtpReplyToAddress,					"chk_smtp_replytoaddress");		//1 parameter - the expected value
+//_LIT(KCommandSmtpReceiptAddress,					"chk_smtp_receiptaddress");		//1 parameter - the expected value
+//_LIT(KCommandSmtpBodyEncoding,					"chk_smtp_bodyencoding");		//1 parameter - the expected value
+//_LIT(KCommandSmtpDefaultMsgCharSet,				"chk_smtp_defaultmsgcharset");	//1 parameter - the expected value
+//_LIT(KCommandSmtpAddVCardToEmail,					"chk_smtp_addvcardtoemail");	//1 parameter - the expected value
+//_LIT(KCommandSmtpAddSignatureToEmail,				"chk_smtp_addsignaturetoemail");//1 parameter - the expected value
+//_LIT(KCommandSmtpRequestReceipts,					"chk_smtp_requestreceipts");	//1 parameter - the expected value
+//_LIT(KCommandSmtpSendCopyToSelf,					"chk_smtp_sendcopytoself");		//1 parameter - the expected value
+//_LIT(KCommandSmtpSendMessageOption,				"chk_smtp_sendmessageoption");	//1 parameter - the expected value
+_LIT(KCommandSmtpServerAddress,						"chk_smtp_serveraddress");		//1 parameter - the expected value
+//_LIT(KCommandSmtpUserAddress,						"chk_smtp_useraddress");		//1 parameter - the expected value
+
+
+//
+// The commands in the [check_imap_defs] section 
+// NB: Those commented out are not in _current_ BIO spec.
+_LIT(KCommandImapServerAddress,						"chk_imap_serveraddress");		//1 parameter - the expected value
+//_LIT(KCommandImapPort,							"chk_imap_port");				//1 parameter - the expected value
+_LIT(KCommandImapLoginName,							"chk_imap_loginname");			//1 parameter - the expected value
+_LIT(KCommandImapPassword,							"chk_imap_password");			//1 parameter - the expected value
+_LIT(KCommandImapFolderPath,						"chk_imap_folderpath");			//1 parameter - the expected value
+//_LIT(KCommandImapPathSeparator,					"chk_imap_pathseparator");		//1 parameter - the expected value
+//_LIT(KCommandImapDisconnectedUserMode,			"chk_imap_disconnectedusermode");//1 parameter - the expected value
+//_LIT(KCommandImapSynchronise,						"chk_imap_synchronise");		//1 parameter - the expected value
+//_LIT(KCommandImapSubscribe,						"chk_imap_subscribe");			//1 parameter - the expected value
+//_LIT(KCommandImapAutoSendOnConnect,				"chk_imap_autosendonconnect");	//1 parameter - the expected value
+//_LIT(KCommandImapMaxEmailSize,					"chk_imap_maxemailsize");		//1 parameter - the expected value
+//_LIT(KCommandImapDeleteEmailsWhenDisconnecting,	"chk_imap_deleteemailswhendisconnecting");	//1 parameter - the expected value
+//_LIT(KCommandImapAcknowledgeReceipts,				"chk_imap_acknowledgereceipts");//1 parameter - the expected value
+//_LIT(KCommandImapGetMailOptions,					"chk_imap_getmailoptions");		//1 parameter - the expected value
+//_LIT(KCommandImapInboxSynchronisationLimit,		"chk_imap_inboxsynchronisationlimit");//1 parameter - the expected value
+
+//
+// The commands in the [bio_commdb] section 
+_LIT(KCommandCommDbReadText,			"commdb_read_text");		// 2 parameters, reads a setting from CommDB
+_LIT(KCommandCommDbReadLongText,		"commdb_read_longtext");	// 2 parameters, reads a setting from CommDB
+_LIT(KCommandCommDbReadUint,			"commdb_read_uint");		// 2 parameters, reads a setting from CommDB
+_LIT(KCommandCommDbReadBool,			"commdb_read_bool");		// 2 parameters, reads a setting from CommDB
+_LIT(KCommandCommDbCheck,				"commdb_check");		    // 3 parameters, checks that a setting in CommDB has the specified value
+
+//
+// The commands in the [gen_msg_from_section] section 
+_LIT(KCommandGenMsgAddLine,				"msg_add_line");					// 1 parameters, the text line to add - MUST BE "'ed!
+_LIT(KCommandGenMsgType,				"msg_set_type");					// 1 parameters, the message type - MUST BE "'ed!
+
+
+//
+// CBioMainSectionParser
+// Parses the [main] section of the script
+CBioMainSectionParser* CBioMainSectionParser::NewL(CMainTestHarness& aMainTest, CTestScript& aScript)
+{
+	CBioMainSectionParser* self = new (ELeave) CBioMainSectionParser(aMainTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioMainSectionParser::LogComment(const TDesC& aComment)
+{
+	iMainTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioMainSectionParser::ConstructL()
+{
+	CBaseSectionParser::ConstructL(KMainSectionName);
+
+	//
+	// Add the command parser to parse the bio_client_test command
+	iCommandParsers->AppendL(CBioMainCommandsParser::NewL(iScript, iMainTest));
+}
+
+//
+// CBioMainCommandsParser
+// Handles the commands that appear in the [main] section
+CBioMainCommandsParser* CBioMainCommandsParser::NewL(CTestScript& aScript, CMainTestHarness& aMainTest)
+{
+	CBioMainCommandsParser* self = new (ELeave) CBioMainCommandsParser(aScript, aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioMainCommandsParser::ProcessL()
+{
+	//
+	// Check there are 1 argument
+	CheckNumberOfArgumentsL(1);
+
+	//
+	// Create the client test harness that will actually do the work
+	// It shares the same TestUtils instance to update the same log file
+	CClientTestHarness* clientTestH = CClientTestHarness::NewL(iMainTest.TestUtils(), iMainTest.TestConsole());
+	CleanupStack::PushL(clientTestH);
+
+	//
+	// Attach it to the main state machine, this transfers ownership!
+	iMainTest.AddStateL(clientTestH, iDebugInfo);
+	CleanupStack::Pop(clientTestH);
+
+	//
+	// Create the client secion parser
+	// Note we pass in the client test harness not the main one!
+	CBioClientSectionParser* sectionP = CBioClientSectionParser::NewL(*clientTestH, iScript, (*iArgumentList)[0]);
+	CleanupStack::PushL(sectionP);
+	sectionP->ParseL();
+	CleanupStack::PopAndDestroy(sectionP);
+	
+}
+
+void CBioMainCommandsParser::ConstructL()
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands we can handle (bio_client_test)
+	AddCommandL(KBioClientCmd);
+}
+
+//
+// CBioClientSectionParser
+// Handles the [client] section of the script
+CBioClientSectionParser* CBioClientSectionParser::NewL(CClientTestHarness& aTestH, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioClientSectionParser* self = new (ELeave) CBioClientSectionParser(aTestH, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioClientSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioClientSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iCommandParsers->AppendL(CBioClientCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioClientCommandsParser
+// Handles the bio specific commands in the
+// [client] section of the script
+CBioClientCommandsParser* CBioClientCommandsParser::NewL(CClientTestHarness& aClientTest)
+{
+	CBioClientCommandsParser* self = new (ELeave) CBioClientCommandsParser(aClientTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioClientCommandsParser::ProcessL()
+{
+	//
+	// General
+	if((*iCurrentCommand) == KCommandCleanMessageFolder)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, CDoCmdGeneral::ECmdGeneralClean), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandPrettifyLog)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, CDoCmdGeneral::ECmdGeneralPrettifyLog), iDebugInfo);
+	}
+	else  
+	if((*iCurrentCommand) == KCommandDumpParsedMsg)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, CDoCmdGeneral::ECmdGeneralDumpMsg), iDebugInfo);
+	}
+	else 
+	if((*iCurrentCommand) == KCommandAddComment)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, *iArgumentList, CDoCmdGeneral::ECmdGeneralComment) ,iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandGenerateMsgFromFile)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, *iArgumentList, CDoCmdGeneral::ECmdGeneralGenerateFromFile) ,iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandGenerateMsgFromSection)
+	{
+		//
+		// Create a new section parser for the msg
+		CheckNumberOfArgumentsL(1);
+		CBioGenMsgSectionParser* section = CBioGenMsgSectionParser::NewL(iClientTest, *(iDebugInfo.ScriptFile()), (*iArgumentList)[0]);
+		CleanupStack::PushL(section);
+		section->ParseL();
+		section->SectionFinishedL();
+		CleanupStack::PopAndDestroy(section);
+	}
+	else
+	if((*iCurrentCommand) == KCommandCheckUsedBif)
+	{
+		CheckNumberOfArgumentsL(1);
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, *iArgumentList, CDoCmdGeneral::ECmdGeneralCheckUsedBif) ,iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandChkFileInMsgDirWithExt)
+	{
+		//CheckNumberOfArgumentsL(1);
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, CDoCmdGeneral::ECmdGeneralCheckFileWithExtExists) ,iDebugInfo);
+	}
+	else
+	if ((*iCurrentCommand) == KCommandCleanAllBioMsgs)
+	{
+		iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, CDoCmdGeneral::ECmdGeneralCleanAllBioMsgs) ,iDebugInfo);
+	}
+	else
+
+	//
+	// BIO DB 
+	if((*iCurrentCommand) == KCommandDumpBif)
+	{
+		iClientTest.AddStateL(CDoCmdBioDB::NewL(iClientTest, CDoCmdBioDB::ECmdBioDBDump), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandBifAPITest)
+	{
+		iClientTest.AddStateL(CDoCmdBioDB::NewL(iClientTest, CDoCmdBioDB::ECmdBioDBTestAPI), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandDumpWapBif)
+	{
+		iClientTest.AddStateL(CDoCmdBioDB::NewL(iClientTest, CDoCmdBioDB::ECmdBioDBDumpWapBif), iDebugInfo);
+	}
+	else
+	/*if((*iCurrentCommand) == KCommandCheckBioNess)
+	{
+		iClientTest.AddStateL(CDoCmdBioDB::NewL(iClientTest, CDoCmdBioDB::ECmdBioDBCheckBioness), iDebugInfo);
+	}
+	else*/
+	if((*iCurrentCommand) == KCommandDefaultSendBearer)
+	{
+		iClientTest.AddStateL(CDoCmdBioDB::NewL(iClientTest, CDoCmdBioDB::ECmdBioDBDefaultSendBearer), iDebugInfo);
+	}
+	else
+
+	//
+	// CommDB
+	if((*iCurrentCommand) == KCommandClientCommDB)
+	{
+		//
+		// Check there are 2 arguments (TableName, SectionName)
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Create the COMMDB section parser
+		// Note we pass in the client test harness not the main one!
+		CBioCommDBSectionParser* sectionP = CBioCommDBSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0], (*iArgumentList)[1]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+
+		//
+		// Note how we pass our own debug info to the section.  This insures if this
+		// test fails, the line we are on now is said to have failed - rather than
+		// one of the lines in the section.  This is because the operations in a COMMDB
+		// section are not individual commands - they simply build up an SQL statement
+		// I.E they cant individually fail - the whole section failes instead
+		sectionP->SectionFinishedL(iDebugInfo);
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	
+	//
+	// Msv
+	if((*iCurrentCommand) == KCommandSmsSettingsCheck)
+	{
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(1);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioSmsSettingsSectionParser* sectionP = CBioSmsSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandPop3SettingsCheck)
+	{
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(1);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioPop3SettingsSectionParser* sectionP = CBioPop3SettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandPop3NamedSettingsCheck)
+	{
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioPop3NamedSettingsSectionParser* sectionP = CBioPop3NamedSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0],(*iArgumentList)[1]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandSmtpNamedSettingsCheck)
+	{
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioSmtpNamedSettingsSectionParser* sectionP = CBioSmtpNamedSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0],(*iArgumentList)[1]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandImapNamedSettingsCheck)
+	{
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioImapNamedSettingsSectionParser* sectionP = CBioImapNamedSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0],(*iArgumentList)[1]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandSmtpSettingsCheck)
+	{
+		//This creates a new section parser
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(1);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioSmtpSettingsSectionParser* sectionP = CBioSmtpSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	if((*iCurrentCommand) == KCommandImapSettingsCheck)
+	{
+		//This creates a new section parser
+		//
+		// Check there are 1 argument
+		CheckNumberOfArgumentsL(1);
+
+		//
+		// Create the client secion parser
+		// Note we pass in the client test harness not the main one!
+		CBioImapSettingsSectionParser* sectionP = CBioImapSettingsSectionParser::NewL(iClientTest, (*iDebugInfo.ScriptFile()), (*iArgumentList)[0]);
+		CleanupStack::PushL(sectionP);
+		sectionP->ParseL();
+		CleanupStack::PopAndDestroy(sectionP);
+	}
+	else
+	//
+	// Client
+	if((*iCurrentCommand) == KCommandClientParse)
+	{
+		iClientTest.AddStateL(CDoCmdClient::NewL(*iArgumentList, iClientTest, CDoCmdClient::ECmdClientParse), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandClientProcess)
+	{
+		iClientTest.AddStateL(CDoCmdClient::NewL(*iArgumentList, iClientTest, CDoCmdClient::ECmdClientProcess), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandClientFindBody)
+	{
+		CheckNumberOfArgumentsL(1);
+		iClientTest.AddStateL(CDoCmdClient::NewL(*iArgumentList, iClientTest, CDoCmdClient::ECmdClientFindBody), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandClientFindSubject)
+	{
+		CheckNumberOfArgumentsL(1);
+		iClientTest.AddStateL(CDoCmdClient::NewL(*iArgumentList, iClientTest, CDoCmdClient::ECmdClientFindSubject), iDebugInfo);
+	}
+	else
+
+	//
+	// Server
+	if((*iCurrentCommand) == KCommandServerProcess)
+	{
+		iClientTest.AddStateL(CDoCmdServer::NewL(*iArgumentList, iClientTest, CDoCmdServer::ECmdServerProcess), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandServerParse)
+	{
+		iClientTest.AddStateL(CDoCmdServer::NewL(*iArgumentList, iClientTest, CDoCmdServer::ECmdServerParse), iDebugInfo);
+	}
+	
+	else
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+void CBioClientCommandsParser::ConstructL()
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the general commands
+	AddCommandL(KCommandCleanMessageFolder);
+	AddCommandL(KCommandPrettifyLog);
+	AddCommandL(KCommandDumpParsedMsg);
+	AddCommandL(KCommandAddComment);
+	AddCommandL(KCommandGenerateMsgFromFile);
+	AddCommandL(KCommandGenerateMsgFromSection);
+	AddCommandL(KCommandCheckUsedBif);
+	AddCommandL(KCommandChkFileInMsgDirWithExt);
+	AddCommandL(KCommandCleanAllBioMsgs);
+
+	//
+	// Add the BioDB Commands
+	AddCommandL(KCommandDumpBif);
+	AddCommandL(KCommandBifAPITest);
+	AddCommandL(KCommandDumpWapBif);
+	//AddCommandL(KCommandCheckBioNess);
+	AddCommandL(KCommandDefaultSendBearer);
+
+	//
+	// Add the CommDB related Commands
+	AddCommandL(KCommandClientCommDB);
+
+	//
+	// Add the client side commands
+	AddCommandL(KCommandClientParse);
+	AddCommandL(KCommandClientProcess);
+	AddCommandL(KCommandClientFindBody);
+	AddCommandL(KCommandClientFindSubject);
+
+	//
+	// Add the server side commands
+	AddCommandL(KCommandServerParse);
+	AddCommandL(KCommandServerProcess);
+
+	//Msv
+	//AddCommandL(KCommandReadDefaultPOP3LoginName);
+	AddCommandL(KCommandPop3NamedSettingsCheck);
+	AddCommandL(KCommandSmtpNamedSettingsCheck);
+	AddCommandL(KCommandImapNamedSettingsCheck);
+	AddCommandL(KCommandPop3SettingsCheck);
+	AddCommandL(KCommandSmtpSettingsCheck);
+	AddCommandL(KCommandImapSettingsCheck);
+	AddCommandL(KCommandSmsSettingsCheck);
+
+}
+
+//
+// CBioSmsSettingsSectionParser
+// Handles the [check_Sms_defs] section of the script
+CBioSmsSettingsSectionParser* CBioSmsSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioSmsSettingsSectionParser* self = new (ELeave) CBioSmsSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioSmsSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioSmsSettingsSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iCommandParsers->AppendL(CBioSmsSettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioSmsSettingsCommandsParser
+// Handles the commands in the
+// [check_Sms_defs] section of the script
+void CBioSmsSettingsCommandsParser::ProcessL() 
+{
+	if((*iCurrentCommand) == KCommandSmsChkMessageCentreNumber)
+	{
+		CheckNumberOfArgumentsL(2);
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkSmsMsgCentreNumber), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandSmsDumpMessageCentres)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdDumpSmsMsgCentres), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandSmsChkDefaultMessageCentreNumber)
+	{
+		CheckNumberOfArgumentsL(1);
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkDefaultSmsMsgCentre), iDebugInfo);
+	}
+	else
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioSmsSettingsCommandsParser* CBioSmsSettingsCommandsParser::NewL(CClientTestHarness& aMainTest)
+{
+	CBioSmsSettingsCommandsParser* self = new (ELeave) CBioSmsSettingsCommandsParser(aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioSmsSettingsCommandsParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	AddCommandL(KCommandSmsChkMessageCentreNumber);
+	AddCommandL(KCommandSmsChkDefaultMessageCentreNumber);
+	AddCommandL(KCommandSmsDumpMessageCentres);
+	
+}
+
+//
+// CBioPop3NamedSettingsSectionParser
+// Handles the [check_pop3_defs] section of the script
+CBioPop3NamedSettingsSectionParser* CBioPop3NamedSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBioPop3NamedSettingsSectionParser* self = new (ELeave) CBioPop3NamedSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName,aSettingsName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioPop3NamedSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioPop3NamedSettingsSectionParser::ConstructL(const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+
+	iClientTest.AddStateL(CDoCmdMsv::NewL(aSettingsName,iClientTest, CDoCmdMsv::ECmdInstantNamedPop3), debugInfo);
+
+	iCommandParsers->AppendL(CBioPop3SettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioSmtpNamedSettingsSectionParser
+// Handles the [check_Smtp_defs] section of the script
+CBioSmtpNamedSettingsSectionParser* CBioSmtpNamedSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBioSmtpNamedSettingsSectionParser* self = new (ELeave) CBioSmtpNamedSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName,aSettingsName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioSmtpNamedSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioSmtpNamedSettingsSectionParser::ConstructL(const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+
+	iClientTest.AddStateL(CDoCmdMsv::NewL(aSettingsName,iClientTest, CDoCmdMsv::ECmdInstantNamedSmtp), debugInfo);
+
+	iCommandParsers->AppendL(CBioSmtpSettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioImapNamedSettingsSectionParser
+// Handles the [check_Imap_defs] section of the script
+CBioImapNamedSettingsSectionParser* CBioImapNamedSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBioImapNamedSettingsSectionParser* self = new (ELeave) CBioImapNamedSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName,aSettingsName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioImapNamedSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioImapNamedSettingsSectionParser::ConstructL(const TDesC& aNewSectionName,const TDesC& aSettingsName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+
+	iClientTest.AddStateL(CDoCmdMsv::NewL(aSettingsName,iClientTest, CDoCmdMsv::ECmdInstantNamedImap), debugInfo);
+
+	iCommandParsers->AppendL(CBioImapSettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioPop3SettingsSectionParser
+// Handles the [check_pop3_defs] section of the script
+CBioPop3SettingsSectionParser* CBioPop3SettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioPop3SettingsSectionParser* self = new (ELeave) CBioPop3SettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioPop3SettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioPop3SettingsSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+
+	iClientTest.AddStateL(CDoCmdMsv::NewL(_L("Null"),iClientTest, CDoCmdMsv::ECmdInstantDefaultPop3), debugInfo);
+
+	iCommandParsers->AppendL(CBioPop3SettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioPop3SettingsCommandsParser
+// Handles the commands in the
+// [check_pop3_defs] section of the script
+void CBioPop3SettingsCommandsParser::ProcessL() 
+{
+
+	if((*iCurrentCommand) == KCommandPop3ChkLoginName)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3LoginName), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandPop3ChkPassword)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3Password), iDebugInfo);
+	}
+	else
+	if((*iCurrentCommand) == KCommandPop3ChkServerAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3ServerAddress), iDebugInfo);
+	}
+	else
+	/*if((*iCurrentCommand) == KCommandPop3ChkAPop)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3Apop), iDebugInfo);
+	}
+	else*/
+	/*if((*iCurrentCommand) == KCommandPop3ChkAutoSendOnConnect)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3AutoSendOnConnect), iDebugInfo);
+	}
+	else*/
+	/*if((*iCurrentCommand) == KCommandPop3ChkPort)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3Port), iDebugInfo);
+	}
+	else*/
+	if((*iCurrentCommand) == KCommandPop3ChkUserAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3UserAddress), iDebugInfo);
+	}
+	else
+	/*if((*iCurrentCommand) == KCommandPop3ChkVersion)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest, CDoCmdMsv::ECmdChkPop3Version), iDebugInfo);
+	}
+	else*/
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioPop3SettingsCommandsParser* CBioPop3SettingsCommandsParser::NewL(CClientTestHarness& aMainTest)
+{
+	CBioPop3SettingsCommandsParser* self = new (ELeave) CBioPop3SettingsCommandsParser(aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioPop3SettingsCommandsParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	AddCommandL(KCommandPop3ChkLoginName);
+	AddCommandL(KCommandPop3ChkPassword);
+	AddCommandL(KCommandPop3ChkServerAddress);
+	//AddCommandL(KCommandPop3ChkAPop);
+	//AddCommandL(KCommandPop3ChkAutoSendOnConnect);
+	//AddCommandL(KCommandPop3ChkPort);
+	AddCommandL(KCommandPop3ChkUserAddress);
+	//AddCommandL(KCommandPop3ChkVersion);
+}
+
+//
+// CBioSmtpSettingsSectionParser
+// Handles the [check_smtp_defs] section of the script
+CBioSmtpSettingsSectionParser* CBioSmtpSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioSmtpSettingsSectionParser* self = new (ELeave) CBioSmtpSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioSmtpSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioSmtpSettingsSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iClientTest.AddStateL(CDoCmdMsv::NewL(_L("Null"),iClientTest, CDoCmdMsv::ECmdInstantDefaultSmtp), debugInfo);
+	iCommandParsers->AppendL(CBioSmtpSettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioSmtpSettingsCommandsParser
+// Handles the commands in the
+// [check_Smtp_defs] section of the script
+void CBioSmtpSettingsCommandsParser::ProcessL() 
+{
+	/*if((*iCurrentCommand) == KCommandSmtpEmailAlias)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpEmailAlias), iDebugInfo);
+	}
+	else */
+	if((*iCurrentCommand) == KCommandSmtpEmailAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpEmailAddress), iDebugInfo);
+	}
+	else
+	/*if((*iCurrentCommand) == KCommandSmtpReplyToAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpReplyToAddress), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpReceiptAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpReceiptAddress), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpBodyEncoding)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpBodyEncoding), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpDefaultMsgCharSet)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpDefaultMsgCharSet), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpAddVCardToEmail)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpAddVCardToEmail), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpAddSignatureToEmail)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpAddSignatureToEmail), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpRequestReceipts)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpRequestReceipts), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpSendCopyToSelf)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpSendCopyToSelf), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandSmtpSendMessageOption)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpSendMessageOption), iDebugInfo);
+	}
+	else */
+	if((*iCurrentCommand) == KCommandSmtpServerAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpServerAddress), iDebugInfo);
+	}
+	else 
+	/*if((*iCurrentCommand) == KCommandSmtpUserAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkSmtpUserAddress), iDebugInfo);
+	}
+	else*/
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioSmtpSettingsCommandsParser* CBioSmtpSettingsCommandsParser::NewL(CClientTestHarness& aMainTest)
+{
+	CBioSmtpSettingsCommandsParser* self = new (ELeave) CBioSmtpSettingsCommandsParser(aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioSmtpSettingsCommandsParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	//AddCommandL(KCommandSmtpEmailAlias);
+	AddCommandL(KCommandSmtpEmailAddress);
+	//AddCommandL(KCommandSmtpReplyToAddress);
+	//AddCommandL(KCommandSmtpReceiptAddress);
+	//AddCommandL(KCommandSmtpBodyEncoding);
+	//AddCommandL(KCommandSmtpDefaultMsgCharSet);
+	//AddCommandL(KCommandSmtpAddVCardToEmail);
+	//AddCommandL(KCommandSmtpAddSignatureToEmail);
+	//AddCommandL(KCommandSmtpRequestReceipts);
+	//AddCommandL(KCommandSmtpSendCopyToSelf);
+	//AddCommandL(KCommandSmtpSendMessageOption);
+	AddCommandL(KCommandSmtpServerAddress);
+	//AddCommandL(KCommandSmtpUserAddress);
+
+}
+
+//
+// CBioImapSettingsSectionParser
+// Handles the [check_Imap_defs] section of the script
+CBioImapSettingsSectionParser* CBioImapSettingsSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioImapSettingsSectionParser* self = new (ELeave) CBioImapSettingsSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioImapSettingsSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioImapSettingsSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iClientTest.AddStateL(CDoCmdMsv::NewL(_L("Null"),iClientTest, CDoCmdMsv::ECmdInstantDefaultImap), debugInfo);
+	iCommandParsers->AppendL(CBioImapSettingsCommandsParser::NewL(iClientTest));
+}
+
+//
+// CBioImapSettingsCommandsParser
+// Handles the commands in the
+// [check_Imap_defs] section of the script
+void CBioImapSettingsCommandsParser::ProcessL() 
+{
+	if((*iCurrentCommand) == KCommandImapServerAddress)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapServerAddress), iDebugInfo);
+	}
+	else
+	/*if((*iCurrentCommand) == KCommandImapPort)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapPort), iDebugInfo);
+	} else */
+	if((*iCurrentCommand) == KCommandImapLoginName)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapLoginName), iDebugInfo);
+	}
+	else 
+	if((*iCurrentCommand) == KCommandImapPassword)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapPassword), iDebugInfo);
+	}
+	else 
+	if((*iCurrentCommand) == KCommandImapFolderPath)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapFolderPath), iDebugInfo);
+	}
+	else 
+	/*if((*iCurrentCommand) == KCommandImapPathSeparator)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapPathSeparator), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapDisconnectedUserMode)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapDisconnectedUserMode), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapSynchronise)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapSynchronise), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapSubscribe)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapSubscribe), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapAutoSendOnConnect)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapAutoSendOnConnect), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapMaxEmailSize)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapMaxEmailSize), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapDeleteEmailsWhenDisconnecting)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapDeleteEmailsWhenDisconnecting), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapAcknowledgeReceipts)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapAcknowledgeReceipts), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapGetMailOptions)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapGetMailOptions), iDebugInfo);
+	}
+	else */
+	/*if((*iCurrentCommand) == KCommandImapInboxSynchronisationLimit)
+	{
+		iClientTest.AddStateL(CDoCmdMsv::NewL(*iArgumentList,iClientTest,CDoCmdMsv::ECmdChkImapInboxSynchronisationLimit), iDebugInfo);
+	}	
+	else*/
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioImapSettingsCommandsParser* CBioImapSettingsCommandsParser::NewL(CClientTestHarness& aMainTest)
+{
+	CBioImapSettingsCommandsParser* self = new (ELeave) CBioImapSettingsCommandsParser(aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioImapSettingsCommandsParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	//AddCommandL(KCommandImapChkLoginName);
+	AddCommandL(KCommandImapServerAddress);
+	//AddCommandL(KCommandImapPort);
+	AddCommandL(KCommandImapLoginName);
+	AddCommandL(KCommandImapPassword);
+	AddCommandL(KCommandImapFolderPath);
+	//AddCommandL(KCommandImapPathSeparator);
+	//AddCommandL(KCommandImapDisconnectedUserMode);
+	//AddCommandL(KCommandImapSynchronise);
+	//AddCommandL(KCommandImapSubscribe);
+	//AddCommandL(KCommandImapAutoSendOnConnect);
+	//AddCommandL(KCommandImapMaxEmailSize);
+	//AddCommandL(KCommandImapDeleteEmailsWhenDisconnecting);
+	//AddCommandL(KCommandImapAcknowledgeReceipts);
+	//AddCommandL(KCommandImapGetMailOptions);
+	//AddCommandL(KCommandImapInboxSynchronisationLimit);
+
+}
+
+//
+// CBioCommDBSectionParser
+// Handles the [bio_commdb] section of the script
+CBioCommDBSectionParser* CBioCommDBSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aTableName, const TDesC& aNewSectionName)
+{
+	CBioCommDBSectionParser* self = new (ELeave) CBioCommDBSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aTableName, aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioCommDBSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioCommDBSectionParser::ConstructL(const TDesC& aTableName, const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iCommandParsers->AppendL(CBioCommDBCommandParser::NewL(iClientTest, aTableName));
+}
+
+void CBioCommDBSectionParser::SectionFinishedL(TTestDebugInfo& aDebugInfo)
+{
+	((CBioCommDBCommandParser*)iCommandParsers->At(0))->SectionFinishedL(aDebugInfo);
+}
+
+//
+// CBioCommDBCommandParser
+// Handles the commands in the
+// [check_pop3_defs] section of the script
+void CBioCommDBCommandParser::ProcessL() 
+{
+	if((*iCurrentCommand) == KCommandCommDbReadText)
+	{
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Add the stored table name
+		iArgumentList->AppendL(iTableName);
+		iClientTest.AddStateL(CDoCmdCommDB::NewL(*iArgumentList,iClientTest, CDoCmdCommDB::ECmdCommDBReadText), iDebugInfo);
+	}
+
+	else
+	if((*iCurrentCommand) == KCommandCommDbReadLongText)
+	{
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Add the stored table name
+		iArgumentList->AppendL(iTableName);
+		iClientTest.AddStateL(CDoCmdCommDB::NewL(*iArgumentList,iClientTest, CDoCmdCommDB::ECmdCommDBReadLongText), iDebugInfo);
+	}
+
+	else
+	if((*iCurrentCommand) == KCommandCommDbReadUint)
+	{
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Add the stored table name
+		iArgumentList->AppendL(iTableName);
+		iClientTest.AddStateL(CDoCmdCommDB::NewL(*iArgumentList, iClientTest, CDoCmdCommDB::ECmdCommDBReadUint), iDebugInfo);
+	}
+
+	else
+	if((*iCurrentCommand) == KCommandCommDbReadBool)
+	{
+		CheckNumberOfArgumentsL(2);
+
+		//
+		// Add the stored table name
+		iArgumentList->AppendL(iTableName);
+		iClientTest.AddStateL(CDoCmdCommDB::NewL(*iArgumentList, iClientTest, CDoCmdCommDB::ECmdCommDBReadBool), iDebugInfo);
+	}
+
+	else
+	if((*iCurrentCommand) == KCommandCommDbCheck)
+	{
+		CheckNumberOfArgumentsL(3);
+
+		//
+		// Build up the SQL
+		const TPtrC& ptrFieldName = (*iArgumentList)[1];
+		const TPtrC& ptrExpected = (*iArgumentList)[2];
+		_LIT(KEquals, "=");
+		const TInt conditionPacking = 2+4; // 2x comma separators + 4 max length of type field (ie, bool, text or uint)
+		TInt conditionLength = 0;
+		if(iClientTest.iSQL == NULL)
+			{			
+			conditionLength = ptrFieldName.Length() + ptrExpected.Length() + conditionPacking;
+			iClientTest.iSQL = HBufC::NewL(conditionLength);
+			
+			TPtr conditionDes = iClientTest.iSQL->Des();
+			
+			// append field name
+			conditionDes.Append(ptrFieldName);
+			conditionDes.Append(KEquals);
+			
+			iClientTest.iSQL->Des().Append(ptrExpected);
+			}
+			else
+			{
+			conditionLength = iClientTest.iSQL->Length() + ptrFieldName.Length() + ptrExpected.Length() + conditionPacking + 3;
+			
+			iClientTest.iSQL = iClientTest.iSQL->ReAllocL(conditionLength);
+			
+			iClientTest.iSQL->Des().Append(KCommaSeparator);
+			TPtr conditionDes = iClientTest.iSQL->Des();
+			
+			// append field name
+			conditionDes.Append(ptrFieldName);
+			conditionDes.Append(KEquals);
+			
+			iClientTest.iSQL->Des().Append(ptrExpected);
+			
+			conditionDes = iClientTest.iSQL->Des();
+			}		
+
+	}
+	else
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioCommDBCommandParser* CBioCommDBCommandParser::NewL(CClientTestHarness& aMainTest, const TDesC& aTableName)
+{
+	CBioCommDBCommandParser* self = new (ELeave) CBioCommDBCommandParser(aMainTest, aTableName);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioCommDBCommandParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	AddCommandL(KCommandCommDbReadText);
+	AddCommandL(KCommandCommDbReadLongText);
+	AddCommandL(KCommandCommDbReadUint);
+	AddCommandL(KCommandCommDbReadBool);
+	AddCommandL(KCommandCommDbCheck);
+}
+
+void CBioCommDBCommandParser::SectionFinishedL(TTestDebugInfo& aDebugInfo)
+{
+	iArgumentList->Reset();
+	iArgumentList->AppendL(*iClientTest.iSQL);
+	iArgumentList->AppendL(iTableName);
+	iClientTest.AddStateL(CDoCmdCommDB::NewL(*iArgumentList,iClientTest, CDoCmdCommDB::ECmdCommDBCheck), aDebugInfo);
+	delete iClientTest.iSQL;
+	iClientTest.iSQL = NULL;
+}
+
+
+//
+// CBioGenMsgSectionParser
+// Handles the [gen_msg_from_section] section of the script
+CBioGenMsgSectionParser* CBioGenMsgSectionParser::NewL(CClientTestHarness& aTest, CTestScript& aScript, const TDesC& aNewSectionName)
+{
+	CBioGenMsgSectionParser* self = new (ELeave) CBioGenMsgSectionParser(aTest, aScript);
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewSectionName);
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioGenMsgSectionParser::LogComment(const TDesC& aComment)
+{
+	iClientTest.TestUtils().WriteComment(aComment);
+}
+
+void CBioGenMsgSectionParser::ConstructL(const TDesC& aNewSectionName)
+{
+	CBaseSectionParser::ConstructL(aNewSectionName);
+	TTestDebugInfo debugInfo = iClientTest.GetDebugInfo();
+	debugInfo.SetTestHarnessName(iSection->SectionPosition());
+	iClientTest.SetDebugInfo(debugInfo);
+	iCmdParser = CBioGenMsgCommandParser::NewL(iClientTest);
+	iCommandParsers->AppendL(iCmdParser);		// Transfer ownership
+}
+
+void CBioGenMsgSectionParser::SectionFinishedL() 
+{ 
+	iCmdParser->SectionFinishedL(); 
+}
+
+//
+// CBioGenMsgCommandParser
+// Handles the commands in the
+// [gen_msg_from_section] section of the script
+void CBioGenMsgCommandParser::ProcessL() 
+{
+	if((*iCurrentCommand) == KCommandGenMsgAddLine)
+	{
+		//
+		// Append to buffer
+		TPtrC aString((*iArgumentList)[0]);
+		_LIT(KCrLf, "\r\n");
+
+		if(iBuffer == NULL)
+		{
+			iBuffer = HBufC::NewL(aString.Length() + KCrLf().Length());
+			iBuffer->Des().Copy(aString);
+			iBuffer->Des().Append(KCrLf);
+		}
+		else
+		{
+			iBuffer = iBuffer->ReAllocL(iBuffer->Length() + aString.Length() + KCrLf().Length());
+			iBuffer->Des().Append(aString);
+			iBuffer->Des().Append(KCrLf);
+		}
+
+	}
+	else
+	if((*iCurrentCommand) == KCommandGenMsgType)
+	{
+		iMsgType = EBioIapSettingsMessage;
+	}
+	else
+	{
+		User::Leave(KErrNotFound);
+	}
+}
+
+CBioGenMsgCommandParser* CBioGenMsgCommandParser::NewL(CClientTestHarness& aMainTest)
+{
+	CBioGenMsgCommandParser* self = new (ELeave) CBioGenMsgCommandParser(aMainTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+void CBioGenMsgCommandParser::ConstructL() 
+{
+	CBaseCommandParser::ConstructL();
+
+	//
+	// Add the commands
+	AddCommandL(KCommandGenMsgAddLine);
+	AddCommandL(KCommandGenMsgType);
+}
+
+void CBioGenMsgCommandParser::SectionFinishedL()
+{
+	const HBufC* buf = iBuffer;
+
+	iClientTest.AddStateL(CDoCmdGeneral::NewL(iClientTest, buf, iMsgType, CDoCmdGeneral::ECmdGeneralGenerateFromSection), iDebugInfo);
+}