Tidied iocli exports, build macro tweaks.
Removed 4 overloads of CCommandBase::RunCommand[L] that are no longer used at all, and changed one more to not be exported as it's only used internally to iocli.dll.
fixed builds on platforms that don't support btrace or any form of tracing.
// testexecute.cpp
//
// Copyright (c) 2010 Accenture. All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the "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:
// Accenture - Initial contribution
//
#include <fshell/memoryaccesscmd.h>
#include <fshell/descriptorutils.h>
#include "proxyserver.h"
#include <test/testexecutelogger.h>
using namespace IoUtils;
class CCmdTestExecute : public CMemoryAccessCommandBase, public MMessageHandler
{
public:
static CCommandBase* NewLC();
~CCmdTestExecute();
private:
CCmdTestExecute();
private: // From MMessageHandler
virtual TBool HandleMessageL(CProxySession* aSession, const RMessage2& aMessage);
private: // From CCommandBase.
virtual const TDesC& Name() const;
virtual void DoRunL();
virtual void ArgumentsL(RCommandArgumentList& aArguments);
virtual void OptionsL(RCommandOptionList& aOptions);
private: // From CActive
void RunL();
void DoCancel();
class CLogonCompleter : public CActive
{
public:
CLogonCompleter(CCmdTestExecute* aCommand) : CActive(CActive::EPriorityStandard), iCommand(aCommand)
{
CActiveScheduler::Add(this);
iCommand->iTefProc.Logon(iStatus);
SetActive();
}
void RunL() { iCommand->Complete(iStatus.Int()); }
void DoCancel() { iCommand->iTefProc.LogonCancel(iStatus); }
~CLogonCompleter() { Cancel(); }
private:
CCmdTestExecute* iCommand;
};
private:
CProxyServer* iProxy;
RTestExecuteLogServ iLogger;
RBuf8 iTempBuf;
TFileName2 iScriptFile;
TBool iIgnoredT, iIgnoredC;
HBufC* iIncludes;
HBufC* iExcludes;
TBool iDebug;
CLogonCompleter* iLogonCompleter;
RProcess iTefProc;
};
EXE_BOILER_PLATE(CCmdTestExecute)
CCommandBase* CCmdTestExecute::NewLC()
{
CCmdTestExecute* self = new(ELeave) CCmdTestExecute();
CleanupStack::PushL(self);
self->BaseConstructL();
return self;
}
CCmdTestExecute::~CCmdTestExecute()
{
Cancel();
if (iProxy)
{
iProxy->Destroy();
}
iLogger.Close();
iTempBuf.Close();
delete iIncludes;
delete iExcludes;
delete iLogonCompleter;
iTefProc.Close();
}
CCmdTestExecute::CCmdTestExecute()
: CMemoryAccessCommandBase(EManualComplete | ESharableIoSession)
{
iTefProc.SetHandle(0); // Don't default to the current process
}
const TDesC& CCmdTestExecute::Name() const
{
_LIT(KName, "testexecute");
return KName;
}
void CCmdTestExecute::ArgumentsL(RCommandArgumentList& aArguments)
{
aArguments.AppendFileNameL(iScriptFile, _L("script-file"));
}
void CCmdTestExecute::OptionsL(RCommandOptionList& aOptions)
{
aOptions.AppendBoolL(iDebug, _L("debug"));
aOptions.AppendBoolL(iIgnoredT, _L("ignore"));
aOptions.AppendBoolL(iIgnoredC, _L("ignore2"));
aOptions.AppendStringL(iIncludes, _L("include"));
aOptions.AppendStringL(iExcludes, _L("exclude"));
}
#define CTRL(x) ((x)-'a'+1)
void CCmdTestExecute::DoRunL()
{
LoadMemoryAccessL();
iTempBuf.CreateL(1024);
User::LeaveIfError(Stdin().CaptureKey(CTRL('c'), 0, 0)); // So we can do cleanup
Stdin().WaitForKey(iStatus);
SetActive();
User::LeaveIfError(iLogger.Connect()); // Keep it open
iLogger.CreateLog(_L("\\logs\\testexecute\\fshelllovesyou"), RTestExecuteLogServ::ELogModeOverWrite); // The server won't actually stay open unless you call CreateLog!
// Set up our proxy
iProxy = CProxyServer::NewInSeparateThreadL(_L("TestExecuteLogEngine"), this);
if (iScriptFile.Length())
{
LtkUtils::RLtkBuf cmdLine;
CleanupClosePushL(cmdLine);
cmdLine.AppendL(iScriptFile);
if (iDebug) cmdLine.AppendL(_L(" -d"));
if (iIncludes) cmdLine.AppendFormatL(_L(" -tci %S"), iIncludes);
if (iExcludes) cmdLine.AppendFormatL(_L(" -tcx %S"), iExcludes);
LeaveIfErr(iTefProc.Create(_L("testexecute.exe"), cmdLine), _L("Couldn't create testexecute.exe %S"), &cmdLine);
iLogonCompleter = new(ELeave) CLogonCompleter(this);
iTefProc.Resume();
CleanupStack::PopAndDestroy(&cmdLine);
}
else
{
// Just do some tests
RTestExecuteLogServ newlogger;
LeaveIfErr(newlogger.Connect(), _L("Couldn't connect to proxied RTestExecuteLogServ"));
newlogger.CreateLog(_L("\\logs\\testexecute\\scriptyscripty"), RTestExecuteLogServ::ELogModeOverWrite);
newlogger.Write(_L("I AM A LOG"));
newlogger.Close();
}
}
TBool CCmdTestExecute::HandleMessageL(CProxySession* /*aSession*/, const RMessage2& aMessage)
{
switch (aMessage.Function())
{
case RTestExecuteLogServ::EWriteLog:
{
aMessage.ReadL(0, iTempBuf);
Write(iTempBuf.Expand());
break;
}
default:
break;
}
return EFalse; // We allow everything to go through to the real TEF as well
}
void CCmdTestExecute::RunL()
{
if (Stdin().KeyCode() == CTRL('c'))
{
Printf(_L("CTRL-C detected, cleaning up proxy server...\r\n"));
iProxy->Destroy();
iProxy = NULL;
Printf(_L("Exiting...\r\n"));
SetErrorReported(ETrue); // Supress complaints about the cancel
Complete(KErrCancel);
}
else
{
Stdin().WaitForKey(iStatus);
SetActive();
}
}
void CCmdTestExecute::DoCancel()
{
Stdin().WaitForKeyCancel();
}