diff -r 417699dc19c9 -r c7e9f1c97567 xml/legacyminidomparser/xmlparser/test/t_GmxmlParser.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/legacyminidomparser/xmlparser/test/t_GmxmlParser.CPP Mon Sep 13 13:16:40 2010 +0530 @@ -0,0 +1,207 @@ +// Copyright (c) 2004-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 +#include +#include +#include + +#include "GmxmlTestsetup.h" + + +_LIT(KGMXMLParserTest,"T_GMXMLParser"); +class CTestGMXMLParser; + +RTest test(KGMXMLParserTest); +LOCAL_D CTestGMXMLParser* testParser; +LOCAL_D CActiveScheduler* scheduler; + +//------------------------------------------------------------------------------ + +class CStreamErrorDataSupplier : public CBase, public MMDXMLParserDataProvider + { +public: + static CStreamErrorDataSupplier * NewL(); + ~CStreamErrorDataSupplier () {} + + // From MMDXMLParserDataProvided + void GetData(TPtrC8& aPtr, TRequestStatus &aStatus); + void Disconnect() {} + }; + +//------------------------------------------------------------------------------ + +CStreamErrorDataSupplier* CStreamErrorDataSupplier::NewL() + { + CStreamErrorDataSupplier* self = new (ELeave) CStreamErrorDataSupplier(); + return self; + } + +//------------------------------------------------------------------------------ +// From MMDXMLParserDataProvided +void CStreamErrorDataSupplier::GetData(TPtrC8& /*aPtr*/, TRequestStatus &aStatus) + { + TRequestStatus *s = &aStatus; + User::RequestComplete(s, KDataStreamError); + return; + } + +//------------------------------------------------------------------------------ + +class CTestGMXMLParser : public CActive, public MMDXMLParserObserver + { +public: + static CTestGMXMLParser* NewLC(); + ~CTestGMXMLParser(); + void ConstructL(); + void RunTestL(); + +public: // from CActive + void DoCancel(); + void RunL(); + +public: // from MMDXMLParserObserver + void ParseFileCompleteL(); + +private: + CTestGMXMLParser(); + +public: + TBool iParseFileCompleted; // Whether the ParseFileCompleted was called. + TBool iParserCalled; // Whether the GMXMLParser::ParseSource was called + +private: + CMDXMLParser* iParser; + CStreamErrorDataSupplier* iDataSupplier; + CTestTimer* iTimer; + + static const TTimeIntervalMicroSeconds32 TestParserTimeout; + }; + +//------------------------------------------------------------------------------ + +const TTimeIntervalMicroSeconds32 CTestGMXMLParser::TestParserTimeout = 10000000; // 10s + +//------------------------------------------------------------------------------ + +CTestGMXMLParser* CTestGMXMLParser::NewLC() + { + CTestGMXMLParser* self = new (ELeave) CTestGMXMLParser(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +//------------------------------------------------------------------------------ + +CTestGMXMLParser::~CTestGMXMLParser() + { + delete iParser; + delete iDataSupplier; + delete iTimer; + } + +//------------------------------------------------------------------------------ + +CTestGMXMLParser::CTestGMXMLParser() : CActive(EPriorityStandard), iParseFileCompleted(EFalse), iParserCalled(EFalse) + { + } + +//------------------------------------------------------------------------------ + +void CTestGMXMLParser::ConstructL() + { + iParser = CMDXMLParser::NewL(this); + iTimer = CTestTimer::NewL(); + + CActiveScheduler::Add(this); + + TRequestStatus *s = &iStatus; + User::RequestComplete(s, KErrNone); + SetActive(); + } + +//------------------------------------------------------------------------------ + +void CTestGMXMLParser::RunL() + { + RunTestL(); + } + +//------------------------------------------------------------------------------ + +void CTestGMXMLParser::DoCancel() + { + } + +//------------------------------------------------------------------------------ + +void CTestGMXMLParser::RunTestL() + { + if (!iParserCalled) + { + delete iDataSupplier; + iDataSupplier = NULL; + iDataSupplier = CStreamErrorDataSupplier::NewL(); + iParser->ParseSource(iDataSupplier); + + iStatus = KRequestPending; + SetActive(); + iParserCalled = ETrue; + // Create a timer to stop the active scheduler if ParseFileComplete not called. + iTimer->AfterReq(CTestGMXMLParser::TestParserTimeout, iStatus); + } + else + CActiveScheduler::Stop(); + } + +//------------------------------------------------------------------------------ + +void CTestGMXMLParser::ParseFileCompleteL() + { + // Success. + iParseFileCompleted = ETrue; + + TRequestStatus *s = &iStatus; + User::RequestComplete(s, KErrNone); + } + +//------------------------------------------------------------------------------ + +LOCAL_C void doTestsL() + { + scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install( scheduler ); + testParser = CTestGMXMLParser::NewLC(); + + theUtils->WriteComment(_L("\nPerforming Tests\n")); + theUtils->Start(_L("Testing GMXMLParser receiving KDataStreamError from MMDXMLParserDataProvider::GetData()")); + CActiveScheduler::Start(); + theUtils->Complete(); + + // Succeed only if the GMXMLParser::ParserSource was called and it resulted + // in ParseFileCompleted being called. + if (!testParser->iParserCalled || !testParser->iParseFileCompleted) + { + theUtils->WriteComment(_L("\nParseFileCompleted was not called within the timeout (10s)!")); + User::Leave(KErrGeneral); + } + + CleanupStack::PopAndDestroy(2); //testParser, ischeduler + } + +//------------------------------------------------------------------------------ +