xml/xmlfw/test/rtest/tsrc/t_parser.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmlfw/test/rtest/tsrc/t_parser.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,298 @@
+// 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 <e32std.h>
+#include <ecom/implementationproxy.h>
+
+#include <xml/xmlframeworkerrors.h>
+#include <xml/wbxmlextensionhandler.h>
+#include <xml/stringdictionarycollection.h>
+#include <xml/taginfo.h>
+#include <xml/attribute.h>
+#include <xml/documentparameters.h>
+#include <xml/contenthandler.h>
+#include <xml/plugins/parserinterface.h>
+#include <xml/plugins/parserinitparams.h>
+
+#include "t_testconstants.h"
+
+using namespace Xml;
+
+class CDummyParser : public CBase, public MParser
+	{
+public:
+
+	static MParser* NewL(TAny* aInitParams);
+	virtual ~CDummyParser();
+
+	// From MParser
+
+	TInt EnableFeature(TInt /*aParserFeature*/)
+		{
+		return KErrNotSupported;
+		}
+	TInt DisableFeature(TInt /*aParserFeature*/)
+		{
+		return KErrNone;
+		}
+	TBool IsFeatureEnabled(TInt /*aParserFeature*/) const
+		{
+		return EFalse;
+		}
+	void Release();
+	void ParseChunkL (const TDesC8& aDescriptor);
+	void ParseLastChunkL(const TDesC8& aDescriptor);
+
+	// From MContentSouce
+	
+	void SetContentSink (MContentHandler& aContentHandler);
+
+	RStringPool& StringPool();
+
+private:
+
+	CDummyParser(TParserInitParams* aInitParams);
+	void DoParseL();
+
+	inline void OnStartDocumentL();
+	inline void OnEndDocumentL();
+	inline void OnStartElementL();
+	inline void OnEndElementL();
+	inline void OnContentL();
+	inline void OnStartPrefixMappingL();
+	inline void OnEndPrefixMappingL();
+	inline void OnIgnorableWhiteSpaceL();
+	inline void OnSkippedEntityL();
+	inline void OnProcessingInstructionL();
+	inline void OnExtensionL();
+	inline void OnError(TInt aError);
+
+private:
+	MContentHandler*	iContentHandler;
+	RStringDictionaryCollection*		iStringDictionaryCollection;
+	CCharSetConverter* iCharSetConverter;
+	RElementStack* iElementStack;
+	};
+
+MParser* CDummyParser::NewL(TAny* aInitParams)
+	{
+
+	CDummyParser* self = new(ELeave) CDummyParser(reinterpret_cast<TParserInitParams*>(aInitParams));
+	return (static_cast<MParser*>(self));
+	}
+
+
+
+CDummyParser::CDummyParser(TParserInitParams* aInitParams)
+:	iContentHandler (reinterpret_cast<MContentHandler*>(aInitParams->iContentHandler)),
+	iStringDictionaryCollection (reinterpret_cast<RStringDictionaryCollection*>(aInitParams->iStringDictionaryCollection)),
+	iCharSetConverter (reinterpret_cast<CCharSetConverter*>(aInitParams->iCharSetConverter)),
+	iElementStack (reinterpret_cast<RElementStack*>(aInitParams->iElementStack))
+	{
+	}
+
+
+void CDummyParser::Release()
+	{
+	delete (this);
+	}
+
+
+
+CDummyParser::~CDummyParser()
+	{
+	// We don't own this
+	iContentHandler = NULL;
+	iStringDictionaryCollection = NULL;
+	iCharSetConverter = NULL;
+	iElementStack = NULL;
+	}
+
+
+void CDummyParser::ParseChunkL (const TDesC8& /*aDescriptor*/)
+	{
+	DoParseL();
+	}
+	
+	
+void CDummyParser::ParseLastChunkL(const TDesC8& /*aDescriptor*/)
+	{
+	DoParseL();
+	}
+
+
+RStringPool& CDummyParser::StringPool()
+	{
+	return iStringDictionaryCollection->StringPool();
+	}
+	
+
+
+void CDummyParser::SetContentSink (MContentHandler& aContentHandler)
+/**
+This method allows for the correct streaming of data to another plugin in the chain.
+
+@post				the next plugin in the chain is set to receive our callbacks.
+
+*/
+	{
+	iContentHandler = &aContentHandler;
+	}
+
+
+
+void CDummyParser::DoParseL()
+	{
+	OnStartDocumentL();
+	OnEndDocumentL();
+	OnStartElementL();
+	OnEndElementL();
+	OnContentL();
+	OnStartPrefixMappingL();
+	OnEndPrefixMappingL();
+	OnIgnorableWhiteSpaceL();
+	OnSkippedEntityL();
+	OnProcessingInstructionL();
+	OnExtensionL();
+	//OnError(KErrEof);
+	}
+
+
+
+void CDummyParser::OnStartDocumentL()
+	{
+	RDocumentParameters documentParameters;
+
+	iContentHandler->OnStartDocumentL(documentParameters, KErrorCodeOnStartDocument);
+	}
+
+
+void CDummyParser::OnEndDocumentL()
+	{
+	iContentHandler->OnEndDocumentL(KErrorCodeOnEndDocument);
+	}
+
+
+
+void CDummyParser::OnStartElementL()
+	{
+	RTagInfo element;
+	RAttributeArray attributes;
+
+	iContentHandler->OnStartElementL(element, attributes, KErrorCodeOnStartElement);
+	}
+	
+
+void CDummyParser::OnEndElementL()
+	{
+	RTagInfo element;
+
+	iContentHandler->OnEndElementL(element, KErrorCodeOnEndElement);
+	}
+
+
+
+void CDummyParser::OnContentL()
+	{
+	const TBuf8<2> bytes;
+
+	iContentHandler->OnContentL(bytes, KErrorCodeOnContent);
+	}
+
+
+
+void CDummyParser::OnStartPrefixMappingL()
+	{
+	RString prefix;
+	RString uri;
+
+	iContentHandler->OnStartPrefixMappingL(prefix, uri, KErrorCodeOnStartPrefixMapping);
+	}
+
+
+void CDummyParser::OnEndPrefixMappingL()
+	{
+	RString prefix;
+
+	iContentHandler->OnEndPrefixMappingL(prefix, KErrorCodeOnEndPrefixMapping);
+	}
+
+
+
+void CDummyParser::OnIgnorableWhiteSpaceL()
+	{
+	const TBuf8<2> bytes;
+
+	iContentHandler->OnIgnorableWhiteSpaceL(bytes, KErrorCodeOnIgnorableWhiteSpace);
+	}
+
+
+
+void CDummyParser::OnSkippedEntityL()
+	{
+	RString name;
+
+	iContentHandler->OnSkippedEntityL(name, KErrorCodeOnSkippedEntity);
+	}
+
+
+
+void CDummyParser::OnProcessingInstructionL()
+	{
+	TBuf8<2> target;
+	TBuf8<2> data;
+
+	iContentHandler->OnProcessingInstructionL(target, data, KErrorCodeOnProcessingInstruction);
+	}
+
+
+void CDummyParser::OnExtensionL()
+	{
+	RString data;
+	TInt token = 0;
+
+	MWbxmlExtensionHandler* ptr = 
+		static_cast<MWbxmlExtensionHandler*>
+			(iContentHandler->GetExtendedInterface(MWbxmlExtensionHandler::EExtInterfaceUid));
+
+	if (!ptr)
+		{
+		User::Leave(KErrXmlUnsupportedExtInterface);
+		}
+		
+	ptr->OnExtensionL(data, token, KErrorCodeOnExtension);	
+	}
+
+
+void CDummyParser::OnError(TInt aError)
+	{
+	iContentHandler->OnError(aError);
+	}
+
+
+// __________________________________________________________________________
+// Exported proxy for instantiation method resolution
+// Define the interface UIDs
+const TImplementationProxy ImplementationTable[] = {
+	IMPLEMENTATION_PROXY_ENTRY(0x101FBE53,CDummyParser::NewL)
+};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+	return ImplementationTable;
+	}
+