xml/xmlfw/test/rtest/tsrc/tu_cmatchdataunittests.cpp
changeset 0 e35f40988205
child 20 889504eac4fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmlfw/test/rtest/tsrc/tu_cmatchdataunittests.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,882 @@
+// Copyright (c) 2005-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:
+// Unit test implementation for CMatchData class
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <e32test.h>
+#include <f32file.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationinformation.h>
+
+#include <xml/matchdata.h>
+#include <xml/xmlframeworkerrors.h>
+
+/*
+Those tests will make use of a fake array of parsers built for the purpuse of unit test only.
+Here is a detailed list of parser used:
+*/
+
+const TUid KXmlUtP1Uid = {0x10273870};
+const TUid KXmlUtP2Uid = {0x10273871};
+const TUid KXmlUtP4Uid = {0x10273873};
+const TUid KXmlUtP6Uid = {0x10273875};
+const TUid KXmlUtP7Uid = {0x10273876};
+const TUid KXmlUtP9Uid = {0x10273878};
+
+//These 2 Uids are added to test the fix of DEF116214.
+//const TUid KXmlUtP10Uid = {0x60000000}; //0b01100000000000000000000000000000 Large positive number
+const TUid KXmlUtP11Uid = {0x8FFFFFFF}; //0b10001111111111111111111111111111 Very Large negative number
+
+
+//
+
+_LIT(KTestName,	"CMatchData Unit Tests");
+RTest	Test(KTestName);
+
+//
+//Global variable systemStatus indicating the plugin system status
+RImplInfoArray systemPlugins;
+RImplInfoArray systemPluginsBase;
+
+
+//Test Data
+_LIT8(KXmlUtParserXmlMimeType, "text/xml");
+_LIT8(KXmlUtParserWbXmlMimeType, "text/wbxml");
+_LIT8(KXmlUtSymbianString, "Symbian");
+_LIT8(KXmlUtNullString, "");
+_LIT8(KXmlUtNonExistantString,"NonExistant");
+_LIT8(KXmlUtParserXmlMimeTypeCS, "Text/Xml");
+_LIT8(KXmlUtParserWbXmlMimeTypeCS, "Text/WbXml");
+_LIT8(KXmlUtSymbianStringCS, "symbian");
+_LIT8(KXmlUtExternalString, "External");
+_LIT8(KXmlUtSymbianAdvancedString, "Symbian Advanced");
+_LIT8(KXmlUtExternalV1String, "External V1");
+_LIT8(KXmlUtParserMyXmlMimeTypeCS, "MyText/MyXml");
+
+
+// 256 character string
+TBuf8<256> KXmlUtLongString256;
+//255 character string
+TBuf8<255> KXmlUtLongString255;
+
+// 33 character string
+TBuf8<33> KXmlUtLongString33;
+// 32 character string
+TBuf8<32> KXmlUtLongString32;
+
+// Interface UID for unit test parsers
+TUid KXmlUtParsers = {0x10273867};
+
+// Separator for comand line to run the file copy process
+_LIT(KSeparator, "|");
+
+// Name of the file copy process
+_LIT(KProcessFileManCopyFile, "t_XMLprocessfilemancopyfile.exe");
+
+// Const value for 1 second in miliseconds
+const TInt KOneSecond = 1000000;
+
+static void FileCopyL(const TDesC& anOld,const TDesC& aNew)
+	{
+	TBuf<120> fileNames(anOld);
+	fileNames.Append(KSeparator);
+	fileNames.Append(aNew);
+
+	// Launch process with highier capabilities (to copy into c:\sys\bin directory)
+	TRequestStatus stat;
+	RProcess p;
+		User::LeaveIfError(p.Create(KProcessFileManCopyFile(), fileNames));
+	// Asynchronous logon: completes when process terminates with process
+	// exit code
+	p.Logon(stat);
+	p.Resume();
+
+	User::WaitForRequest(stat);
+	TInt exitReason = p.ExitReason();
+	p.Close();
+	User::LeaveIfError(exitReason);
+
+	}
+
+static void TestPrepareL()
+	{
+	FileCopyL(_L("z:\\XMLRAMONLY\\tu_XmlRamParserPlugins.dll"), _L("C:\\sys\\bin\\tu_XmlRamParserPlugins.dll"));
+	FileCopyL(_L("z:\\XMLRAMONLY\\tu_XmlRamParserPlugins.RSC"), _L("C:\\resource\\plugins\\tu_XmlRamParserPlugins.RSC"));
+
+	//The reason for the folowing delay is:
+	//ECOM server could be already started. It means that when we copy some
+	//ECOM plugins from Z: to C: drive - ECOM server should look for and
+	//find the new ECOM plugins. The ECOM server uses for that CDiscoverer::CIdleScanningTimer
+	//which is an active object. So the discovering service is asynchronous. We have to
+	//wait some time until it finishes. Otherwise ListImplementationsL could fail to find
+	//requested implementations.
+	User::After(KOneSecond * 3);
+	}
+
+
+static void SetUpSystemStatusL()
+	{
+	REComSession& session = REComSession::OpenL();
+	RImplInfoPtrArray array;
+	session.ListImplementationsL(KXmlUtParsers, array);
+	session.Close();
+	for (TInt i = 0; i < array.Count(); i++)
+		{
+		systemPluginsBase.Append(array[i]);
+		}
+	}
+
+static void RefreshPluginsStatus()
+	{
+	systemPlugins.Reset();
+
+	for (TInt i = 0; i < systemPluginsBase.Count(); i++)
+		{
+		systemPlugins.Append(systemPluginsBase[i]);
+		}
+	}
+static void CleanSystem()
+	{
+	for (TInt i = 0; i < systemPluginsBase.Count(); i++)
+		{
+		delete systemPluginsBase[i];
+		}
+	systemPlugins.Close();
+	systemPluginsBase.Close();
+	}
+
+
+/**
+@SYMTestCaseID 		 		SYSLIB-XML-UT-3719
+@SYMTestCaseDesc		    Checking CMatchData functions
+@SYMTestPriority 		    Medium
+@SYMTestActions  		    Testing various functions of the CMatchData class
+@SYMTestExpectedResults 	The functions should perform as expected.
+@SYMREQ 		 		 	REQ0000
+*/
+static void RunTestsL()
+	{
+	Xml::CMatchData *mData = Xml::CMatchData::NewL();
+	TInt result;
+	TUid resultUid;
+
+	//set up systemStatus
+	TestPrepareL();
+	SetUpSystemStatusL();
+	RefreshPluginsStatus();
+
+	//*************************************************
+	//Test - Basic API
+	Test.Next(_L("Basic Api 1"));
+	TRAP(result,mData->SetMimeTypeL(KXmlUtParserXmlMimeType));
+
+	Test(result == KErrNone);
+	Test(mData->MimeType().Compare(KXmlUtParserXmlMimeType)==0);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 2"));
+	KXmlUtLongString256.SetLength(256);
+	TRAP(result,mData->SetMimeTypeL(KXmlUtLongString256));
+
+	Test(result == KErrArgument);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 3"));
+	KXmlUtLongString255.SetLength(255);
+	TRAP(result,mData->SetMimeTypeL(KXmlUtLongString255));
+
+	Test(result == KErrNone);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 4"));
+	TRAP(result,mData->SetMimeTypeL(KXmlUtNullString));
+
+	Test(result == KErrArgument);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 5"));
+	TRAP(result,mData->SetVariantL(KXmlUtSymbianString));
+
+	Test(result == KErrNone);
+	Test(mData->Variant().Compare(KXmlUtSymbianString)==0);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 6"));
+	KXmlUtLongString33.SetLength(33);
+	TRAP(result,mData->SetVariantL(KXmlUtLongString33));
+
+	Test(result == KErrArgument);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 7"));
+	KXmlUtLongString32.SetLength(32);
+	TRAP(result,mData->SetVariantL(KXmlUtLongString32));
+
+	Test(result == KErrNone);
+
+	//*************************************************
+	//Test  - Basic API
+	Test.Next(_L("Basic Api 8"));
+	TRAP(result,mData->SetVariantL(KXmlUtNullString));
+
+	Test(result == KErrNone);
+	Test(mData->Variant().Compare(KXmlUtNullString)==0);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 1"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	// Now returns lowest uid Symbian parser
+	Test(mData->ResolveL(systemPlugins) == KXmlUtP1Uid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 2"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	// Now returns lowest uid Symbian parser
+	Test(KXmlUtP1Uid == mData->ResolveL(systemPlugins));
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 3"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	Test(KXmlUtP6Uid == mData->ResolveL(systemPlugins));
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 4"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	Test(KXmlUtP6Uid == mData->ResolveL(systemPlugins));
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 5"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 6"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue)	;
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeTypeCS);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 7"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeTypeCS);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 8"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtNonExistantString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 9"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid Symbian parser
+	Test(resultUid == KXmlUtP4Uid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 10"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid parser
+	Test(resultUid == KXmlUtP7Uid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 11"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 12"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid parser
+	Test(resultUid == KXmlUtP7Uid);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 13"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+
+	//*************************************************
+	//Test - Mime type tests
+	Test.Next(_L("Mime type test 14"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtNonExistantString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 1"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KXmlUtP6Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 2"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KXmlUtP6Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 3"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(resultUid == KXmlUtP6Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 4"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KXmlUtP7Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 5"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KXmlUtP7Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 6"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 7"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	mData->SetVariantL(KXmlUtExternalString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid parser
+	Test(resultUid == KXmlUtP9Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests.
+	Test.Next(_L("Mime type and variant test 8"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid parser
+	Test(resultUid == KXmlUtP2Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 9"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	mData->SetVariantL(KXmlUtExternalString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 10"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtExternalV1String);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 11"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(ETrue);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KXmlUtP7Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 12"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 13"));
+	mData->SetCaseSensitivity(EFalse);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid parser
+	Test(resultUid == KXmlUtP2Uid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 14"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(EFalse);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtSymbianAdvancedString);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+	//*************************************************
+	//Test - Mime type and variant tests
+	Test.Next(_L("Mime type and variant test 15"));
+	mData->SetCaseSensitivity(ETrue);
+	mData->SetRomOnly(EFalse);
+	mData->SetLeaveOnMany(ETrue);
+	mData->SetMimeTypeL(KXmlUtParserWbXmlMimeTypeCS);
+	mData->SetVariantL(KXmlUtExternalV1String);
+	TRAP(result, resultUid = mData->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+
+
+	//*************************************************
+	//Test - DEF116214 - CMatchData::SortOrder() function behaviour test.
+	Test.Next(_L("CMatchData DEF116214 fix test"));
+	Xml::CMatchData *mData_2 = Xml::CMatchData::NewL();
+	mData_2->SetCaseSensitivity(ETrue);
+	mData_2->SetRomOnly(EFalse);
+	mData_2->SetLeaveOnMany(EFalse);
+	mData_2->SetMimeTypeL(KXmlUtParserMyXmlMimeTypeCS);
+	mData_2->SetVariantL(KXmlUtSymbianStringCS);
+
+	//There are 2 elements which could match this mData_2 criteria,
+	//ResolveL should return the first one (the smallest one). In the old
+	//implementation of CMatchData::SortOrder(), ResolveL() return KXmlUtP10Uid
+	//but after the applied fix ResolveL() returns KXmlUtP11Uid.
+	//The following test should pass.
+	Test(mData_2->ResolveL(systemPlugins) == KXmlUtP11Uid);
+
+	delete mData_2;
+
+	//*************************************************
+	//Test - CMatchData default values
+	Test.Next(_L("CMatchData default test 1"));
+	Xml::CMatchData *newData1 = Xml::CMatchData::NewL();
+	newData1->SetMimeTypeL(KXmlUtParserWbXmlMimeType);
+
+	TRAP(result, resultUid = newData1->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Default behaviour became backwards compatible, so Test plugin 4
+	// is returned instead of 2 here because Test Plugin 2's variant is
+	// not an exact match of "Symbian", but 4's is.
+	Test(resultUid == KXmlUtP4Uid);
+	delete newData1;
+
+	//*************************************************
+	//Test - CMatchData default values
+	Test.Next(_L("CMatchData default test 2"));
+	Xml::CMatchData *newData2 = Xml::CMatchData::NewL();
+	newData2->SetMimeTypeL(KXmlUtParserXmlMimeType);
+
+	TRAP(result, resultUid = newData2->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	// Now returns lowest uid Symbian parser
+	Test(resultUid == KXmlUtP1Uid);
+	delete newData2;
+
+	//*************************************************
+	//Test - CMatchData default values
+	Test.Next(_L("CMatchData default test 3"));
+	Xml::CMatchData *newData3 = Xml::CMatchData::NewL();
+	newData3->SetMimeTypeL(KXmlUtParserXmlMimeTypeCS);
+
+	TRAP(result, resultUid = newData3->ResolveL(systemPlugins));
+
+	Test(result == KErrNone);
+	Test(resultUid == KNullUid);
+	delete newData3;
+
+	//*************************************************
+	//Test - CMatchData default values
+	Test.Next(_L("CMatchData default test 4"));
+	Xml::CMatchData *newData4 = Xml::CMatchData::NewL();
+	newData4->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	newData4->SetLeaveOnMany(ETrue);
+
+	TRAP(result, resultUid = newData4->ResolveL(systemPlugins));
+
+	Test(result == Xml::KErrXmlMoreThanOneParserMatched);
+	delete newData4;
+
+	//*************************************************
+	//Test - comparison operator tests
+	Test.Next(_L("Comparison operator tests"));
+	Xml::CMatchData *newData5 = Xml::CMatchData::NewL();
+	Xml::CMatchData *newData6 = Xml::CMatchData::NewL();
+	Test(*newData5 == *newData6);
+
+	newData5->SetCaseSensitivity(EFalse);
+	newData6->SetCaseSensitivity(EFalse);
+	Test(*newData5 == *newData6);
+
+	newData5->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetMimeTypeL(KXmlUtParserXmlMimeTypeCS);
+	Test(*newData5 == *newData6);
+
+	newData5->SetCaseSensitivity(ETrue);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetCaseSensitivity(ETrue);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	Test(*newData5 == *newData6);
+
+	newData6->SetLeaveOnMany(ETrue);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetLeaveOnMany(EFalse);
+	newData6->SetRomOnly(ETrue);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetRomOnly(EFalse);
+	Test(*newData5 == *newData6);
+
+	newData5->SetVariantL(KXmlUtSymbianString);
+	Test(!(*newData5 == *newData6));
+
+	newData6->SetVariantL(KXmlUtSymbianString);
+	Test(*newData5 == *newData6);
+
+	newData5->SetCaseSensitivity(ETrue);
+	newData6->SetCaseSensitivity(ETrue);
+	Test(*newData5 == *newData6);
+
+	newData6->SetVariantL(KXmlUtSymbianStringCS);
+	Test(!(*newData5 == *newData6));
+
+	newData5->SetCaseSensitivity(EFalse);
+	newData6->SetCaseSensitivity(EFalse);
+	Test(*newData5 == *newData6);
+
+	newData6->SetVariantL(_L8(""));
+	Test(!(*newData5 == *newData6));
+
+	delete newData5;
+	delete newData6;
+
+	//*************************************************
+	//Test - Assignement tests
+	Test.Next(_L("Comparison operator tests"));
+	Xml::CMatchData *newData7 = Xml::CMatchData::NewL();
+	Xml::CMatchData *newData8 = Xml::CMatchData::NewL();
+	Test(*newData7 == *newData8);
+
+	newData8->SetMimeTypeL(KXmlUtParserXmlMimeType);
+	Test(!(*newData7 == *newData8));
+
+	*newData7 = *newData8;
+	Test(*newData7 == *newData8);
+	Test(newData7->MimeType().Compare(KXmlUtParserXmlMimeType()) == 0);
+
+	newData7->SetVariantL(KXmlUtSymbianString);
+	*newData7 = *newData8;
+	Test(*newData7 == *newData8);
+	Test(newData7->Variant() == KNullDesC8);
+
+	delete newData7;
+	delete newData8;
+
+	//*************************************************
+	// Out of memory tests
+	Test.Next(_L("Out of memory tests"));
+	TInt err;
+	Xml::CMatchData* parser9 = NULL;
+
+	// Test NewL
+	for(TInt count=1;;++count)
+		{
+		// Setting Heap failure for OOM test
+		__UHEAP_SETFAIL(RHeap::EDeterministic, count);
+		__UHEAP_MARK;
+
+		TRAP(err, parser9 = Xml::CMatchData::NewL());
+		if(err == KErrNoMemory)
+			{
+			__UHEAP_MARKEND;
+			}
+		else if(err == KErrNone)
+			{
+			delete parser9;
+			__UHEAP_MARKEND;
+			RDebug::Print(_L("The OOM test 1 succeeded at heap failure rate=%d.\n"), count);
+			__UHEAP_RESET;
+			break;
+			}
+		else
+			{
+			__UHEAP_MARKEND;
+			Test(err, KErrNone);
+			}
+		__UHEAP_RESET;
+		}
+
+	TRAP(err, parser9 = Xml::CMatchData::NewL());
+	Test(err == KErrNone);
+
+	//Test SetMimeTypeL
+	for(TInt count=1;;++count)
+		{
+		// Setting Heap failure for OOM test
+		__UHEAP_SETFAIL(RHeap::EDeterministic, count);
+		__UHEAP_MARK;
+
+		TRAP(err, parser9->SetMimeTypeL(KXmlUtParserXmlMimeType()));
+		if(err == KErrNoMemory)
+			{
+			__UHEAP_MARKEND;
+			}
+		else if(err == KErrNone)
+			{
+			RDebug::Print(_L("The OOM test 1 succeeded at heap failure rate=%d.\n"), count);
+			__UHEAP_RESET;
+			break;
+			}
+		else
+			{
+			__UHEAP_MARKEND;
+			Test(err, KErrNone);
+			}
+		__UHEAP_RESET;
+		}
+
+	//Test SetVariantL
+	for(TInt count=1;;++count)
+		{
+		// Setting Heap failure for OOM test
+		__UHEAP_SETFAIL(RHeap::EDeterministic, count);
+		__UHEAP_MARK;
+
+		TRAP(err, parser9->SetVariantL(KXmlUtSymbianString()));
+		if(err == KErrNoMemory)
+			{
+			__UHEAP_MARKEND;
+			}
+		else if(err == KErrNone)
+			{
+			RDebug::Print(_L("The OOM test 1 succeeded at heap failure rate=%d.\n"), count);
+			__UHEAP_RESET;
+			break;
+			}
+		else
+			{
+			__UHEAP_MARKEND;
+			Test(err, KErrNone);
+			}
+		__UHEAP_RESET;
+		}
+	delete parser9;
+
+	//*************************************************
+	//Test cleanup
+	delete mData;
+	CleanSystem();
+	systemPlugins.Close();
+	}
+
+
+
+//***********************************************************************************
+GLDEF_C TInt E32Main()
+ {
+	CTrapCleanup* tc = CTrapCleanup::New();
+	Test(tc != NULL);
+
+
+	TInt err;
+	Test.Start(_L(" @SYMTestCaseID:SYSLIB-XML-UT-3719 CMatchData Tests "));
+	Test.Title();
+
+	__UHEAP_MARK;
+	TRAP(err, ::RunTestsL())
+	Test(err== KErrNone);
+	__UHEAP_MARKEND;
+
+	Test.End();
+	Test.Close();
+
+
+
+	delete tc;
+
+	return(KErrNone);
+
+	}
+
+
+