// Copyright (c) 2007-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 "pushtests.h"
#include "dummywapstack.h"
#include <push/cwappushmsgutils.h>
_LIT(KTextFinished,"All finished");
/** all derived classes use this RunL to move between the states listed.
starts up setting up required test enbvironment, then creates a test
message which is simualted as a push. This 'push' stage can be repeated
for multiple messages and once all messages passed finishes up. */
void CWapPushBaseMessageTest::RunL()
{
switch (iState)
{
case EInitialisation:
{
// Create WAP Stack passing MDummyWapStackObserver derived instance
// Create Connection Manager, once WAP stack setup
iWapStack = CDummyWapStack::NewL(*this);
iConnMan = CConnectionManager::NewL(*this);
NumberTestCasesToRun();
iHasMsgBeenCompleted=EFalse;
iHasTestBeenCompleted=EFalse;
MoveToNextState();
return;
}
case EWaitForPush:
{
// wait for callback to move to the next state
if (iHasTestBeenCompleted)
MoveToNextState();
return;
}
case EFinished:
{
Printf(KTextFinished);
SetPriority(EPriorityIdle);
MoveToNextState();
return;
}
default:
// Finished
User::LeaveIfError(ConfirmMessagesSavedL());
iEngine->TestCompleted(iStatus.Int());
return;
}
};
TInt CWapPushBaseMessageTest::RunError(TInt aError)
{
TBuf<80> buf;
_LIT(KComment, "!! Error - %d in RunError()");
buf.Format(KComment, aError);
iEngine->Printf(buf, TestName());
iState = EFinished;
iEngine->TestCompleted(aError);
return KErrNone;
}
/** destructor */
CWapPushBaseMessageTest::~CWapPushBaseMessageTest()
{
delete iConnMan;
delete iWapStack;
}
/** cancel any active request and clean up before returning to main test
harness
*/
void CWapPushBaseMessageTest::DoCancel()
{
delete iConnMan;
delete iWapStack;
iEngine->TestCompleted(KErrCancel);
}
/** increment the value of iState and set active to create call to RunL
with new state value
*/
void CWapPushBaseMessageTest::MoveToNextState()
{
iState = (TState)(iState+1);
CompleteOwnRequest();
}
/** set this object active */
void CWapPushBaseMessageTest::CompleteOwnRequest()
{
TRequestStatus* stat = &iStatus;
User::RequestComplete(stat,KErrNone);
if (!IsActive())
SetActive();
}
/** sets base test name.
@param void
@return string - the test name
*/
const TDesC& CWapPushBaseMessageTest::TestName()
{
_LIT(KTextBaseMessageTest,"Base Message Test");
return KTextBaseMessageTest;
}
/**
called by DummyWapStack and returns the push message which is
created by the call to PrepareTestMessageL. The message is
then passed through to aDummyCLConn which accepts as much of
the message as possible and if this is not equal to the whole
message then issues a rerquest for the rest of the message which
retruns here.
@param CDummyWSPCLConn
@return void
if all tests have completed - move to the next test state and complete own req
if all of msg received - move to next message
Each derived class should have its own implementation of PrepareTestMessage
which will be called from this method. This will allow a variable number of
test cases to be used to test the push aspect of the dummy wap stack.
*/
void CWapPushBaseMessageTest::DWSOUnitWaitPushL(CDummyWSPCLConn& aDummyCLConn)
{
if (iHasTestBeenCompleted)
{
CompleteOwnRequest();
return;
}
PrepareTestMessageL(iCurrentTestCase);
aDummyCLConn.CompleteUnitWaitPushL(iBodyBuf, iHeadersBuf); // asynch
aDummyCLConn.SetServerAddressL(Uri());
iHasMsgBeenCompleted=aDummyCLConn.HasMsgBeenCompleted();
if (iHasMsgBeenCompleted)
{
iHasMsgBeenCompleted=EFalse;
iCurrentTestCase++;
}
iHasTestBeenCompleted = (iCurrentTestCase >= iNumberOfTestCases);
}
/**
display error message
@param string
@param line number
*/
void CWapPushBaseMessageTest::DWSOError(const TDesC& aDes, TInt /*aLineNum*/)
{
// TO DO: format message + ?
// simply display error message for now
iEngine->Printf(TestName(),aDes);
}
/**
Wap Stack Server closing...
*/
void CWapPushBaseMessageTest::DWSOServerShutDown()
{
_LIT(KWPSLServerShutdown,"Wap stack server closing down");
iEngine->Printf(TestName(), KWPSLServerShutdown);
}
/**
* Cancel pushwait operation
*/
void CWapPushBaseMessageTest::DWSOCancelUnitWaitPush(CDummyWSPCLConn& /*aDummyCLConn*/)
{
Cancel(); // CActive closes open requests
// ignore aDummyCLConn (not sure why being passed in)
}
/** placeholder method - does nothing */
void CWapPushBaseMessageTest::DWSOConnect(CDummyWSPCOConn&)
{
}
/** placeholder method - does nothing */
void CWapPushBaseMessageTest::DWSOGetEventL(CDummyWSPCOConn&)
{
}
/** placeholder method - does nothing */
void CWapPushBaseMessageTest::DWSOCancelGetEvent(CDummyWSPCOConn&)
{
}
/** placeholder method - does nothing */
void CWapPushBaseMessageTest::DWSOAckTransaction(CDummyWSPCOTrans&)
{
}
/** indicates number of test cases to run which should be implimented
in a suitable switch statement in derieved class method:
PrepareTestMessages()
*/
void CWapPushBaseMessageTest::NumberTestCasesToRun()
{
// default - override for derived classes
iNumberOfTestCases = 1;
}