xml/legacyminidomparser/xmlparser/test/t_GmxmlParser.CPP
changeset 34 c7e9f1c97567
parent 0 e35f40988205
--- /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 <e32test.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <gmxmlparser.h>
+
+#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
+	}
+
+//------------------------------------------------------------------------------
+