diff -r 000000000000 -r e35f40988205 xml/xmllibxml2parser/test/tef/xmlparser2/src/texmlparser2step.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/xmllibxml2parser/test/tef/xmlparser2/src/texmlparser2step.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,353 @@ +// Copyright (c) 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: +// + +/** + @file texmlparser2step.cpp + @internalTechnology +*/ + +#include "texmlparser2step.h" +#include "tetestcontenthandler.h" +#include "libxml2_globals_private.h" +#include +#include +#include + +using namespace Xml; +/** + * Class CXmlParser2Step implementation + */ +_LIT(KSimpleXmlFile, "z:\\testdata\\xmlexample.xml"); +#ifdef _DEBUG +_LIT(KCorruptXm1File, "z:\\testdata\\corruptxml1.xml"); +#endif + +/** + * Constructor. Sets the test step name so that it can be + * differentiated from within doTestStepL() + */ +CXmlParser2Step::CXmlParser2Step(const TDesC& aStepName) + { + SetTestStepName(aStepName); + } + +/** + * TEF invokes doTestStepL interface along with the step name + * to let appropriate action to be taken for the test step. + */ +TVerdict CXmlParser2Step::doTestStepL(void) + { + if (TestStepName() == KXmlParser2SetContentSink) + { + INFO_PRINTF1(KXmlParser2SetContentSink); + SetTestStepResult(TestKXmlParser2SetContentSink()); + } + else if (TestStepName() == KXmlParser2OOMTests) + { + INFO_PRINTF1(KXmlParser2OOMTests); + SetTestStepResult(TestKXmlParser2OOMTests()); + } + else if (TestStepName() == KXmlParser2OOMTests2) + { + INFO_PRINTF1(KXmlParser2OOMTests2); + SetTestStepResult(TestKXmlParser2OOMTests2()); + } + else if (TestStepName() == KXmlParser2OOMTests3) + { + INFO_PRINTF1(KXmlParser2OOMTests3); + SetTestStepResult(TestKXmlParser2OOMTests3()); + } + else if (TestStepName() == KXmlParser2OOMTests4) + { + INFO_PRINTF1(KXmlParser2OOMTests4); + SetTestStepResult(TestKXmlParser2OOMTests4()); + } + return TestStepResult(); + } + +TVerdict CXmlParser2Step::TestKXmlParser2SetContentSink() + { + RFs fs; + User::LeaveIfError(fs.Connect()); + + CTestContentHandler *sax = CTestContentHandler::NewL(); + RFile handle; + TInt err; + TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error opening test XML file")); + User::Leave(err); + } + CleanupClosePushL(handle); + CMatchData *matchData = CMatchData::NewL(); + matchData->SetMimeTypeL(_L8("text/xml")); + matchData->SetVariantL(_L8("libxml2")); + CParser *parser = CParser::NewL(*matchData, *sax); + TInt retVal = KErrNone; + //Valid feature + retVal = parser->EnableFeature(EReportNamespaceMapping); + if (retVal != KErrNone) + { + INFO_PRINTF1(_L("Error Enabling valid feature")); + return EFail; + } + //Invalid feature + TInt EInvalidFeatureId = 0x1111; + retVal = parser->EnableFeature(EInvalidFeatureId); + if (retVal != KErrNotSupported) + { + INFO_PRINTF1(_L("Unexpected error while enabling invalid feature")); + return EFail; + } + //Valid feature + retVal = parser->DisableFeature(EReportNamespaces); + if (retVal != KErrNone) + { + INFO_PRINTF1(_L("Error Disabling valid feature")); + return EFail; + } + + //Invalid feature + retVal = parser->DisableFeature(EInvalidFeatureId); + if (retVal != KErrNotSupported) + { + INFO_PRINTF1(_L("Unexpected error while disabling invalid feature")); + return EFail; + } + RContentProcessorUids *uid = new (ELeave)RContentProcessorUids; + const TUid KXmlContProcUid = + { + 0x20021CE5 //UID3 + }; + uid->Append(KXmlContProcUid); + TRAP(err, parser->SetProcessorChainL(*uid)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error Setting up processor chain")); + return EFail; + } + TRAP(err,ParseL(*parser, handle)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error Parsing")); + return EFail; + } + delete parser; + fs.Close(); + CleanupStack::Pop(&handle); + return EPass; + } +/** + * This test step should be run only on debug builds owing to the + * __UHEAP macros that are defined only in debug builds. + */ +TVerdict CXmlParser2Step::TestKXmlParser2OOMTests() + { +#ifdef _DEBUG + RFs fs; + User::LeaveIfError(fs.Connect()); + CTestContentHandler *sax = CTestContentHandler::NewL(); + RFile handle; + TInt err; + CleanupClosePushL(handle); + TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error opening test XML file")); + User::Leave(err); + } + + CMatchData *matchData = CMatchData::NewL(); + matchData->SetMimeTypeL(_L8("text/xml")); + matchData->SetVariantL(_L8("libxml2")); + CParser *parser = CParser::NewL(*matchData, *sax); + CleanupStack::PushL(parser); + + __UHEAP_SETFAIL(RHeap::EDeterministic, 40); + TRAP(err,ParseL(*parser, handle)); + //it could be a random error + if (err == KErrNone) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :40")); + parser->ParseBeginL(); + __UHEAP_SETFAIL(RHeap::EDeterministic, 50); + TRAP(err,ParseL(*parser, handle)); + //it could be a random error + if (err == KErrNone) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :50")); + parser->ParseBeginL(); + __UHEAP_SETFAIL(RHeap::EDeterministic, 100); + TRAP(err,ParseL(*parser, handle)); + //it could be a random error + if (err == KErrNone) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :100")); + parser->ParseBeginL(); + __UHEAP_SETFAIL(RHeap::ENone, 0); + fs.Close(); + CleanupStack::Pop(parser); + CleanupStack::Pop(&handle); +#else + INFO_PRINTF1(_L("This test is meant to be run only in DEBUG builds. Returning EPASS")); +#endif + return EPass; + } + +/** + * This test step should be run only on debug builds owing to the + * __UHEAP macros that are defined only in debug builds. + */ +TVerdict CXmlParser2Step::TestKXmlParser2OOMTests2() + { +#ifdef _DEBUG + RFs fs; + User::LeaveIfError(fs.Connect()); + CTestContentHandler *sax = CTestContentHandler::NewL(); + RFile handle; + TInt err; + CleanupClosePushL(handle); + TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error opening test XML file")); + User::Leave(err); + } + + CMatchData *matchData = CMatchData::NewL(); + matchData->SetMimeTypeL(_L8("text/xml")); + matchData->SetVariantL(_L8("libxml2")); + CParser *parser = CParser::NewL(*matchData, *sax); + CleanupStack::PushL(parser); + + __UHEAP_SETFAIL(RHeap::EDeterministic, 1); + TRAP(err,ParseL(*parser, handle)); + if (err != KErrNoMemory) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :1")); + __UHEAP_SETFAIL(RHeap::EDeterministic, 33); + TRAP(err,ParseL(*parser, handle)); + //it could be a random error + if (err == KErrNone) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :33")); + __UHEAP_SETFAIL(RHeap::ENone, 0); + + fs.Close(); + CleanupStack::Pop(parser); + CleanupStack::Pop(&handle); +#else + INFO_PRINTF1(_L("This test is meant to be run only in DEBUG builds. Returning EPASS")); +#endif + return EPass; + } +/** + * This test step should be run only on debug builds owing to the + * __UHEAP macros that are defined only in debug builds. + */ +TVerdict CXmlParser2Step::TestKXmlParser2OOMTests3() + { +#ifdef _DEBUG + RFs fs; + User::LeaveIfError(fs.Connect()); + CTestContentHandler *sax = CTestContentHandler::NewL(); + RFile handle; + TInt err; + CleanupClosePushL(handle); + TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error opening test XML file")); + User::Leave(err); + } + + CMatchData *matchData = CMatchData::NewL(); + matchData->SetMimeTypeL(_L8("text/xml")); + matchData->SetVariantL(_L8("libxml2")); + CParser *parser = CParser::NewL(*matchData, *sax); + CleanupStack::PushL(parser); + + __UHEAP_SETFAIL(RHeap::EDeterministic, 32); + TRAP(err,ParseL(*parser, handle)); + //it could be a random error + if (err == KErrNone) + { + return EFail; + } + INFO_PRINTF1(_L("Tests passed at Heap failure rate :32")); + __UHEAP_SETFAIL(RHeap::ENone, 0); + + fs.Close(); + CleanupStack::Pop(parser); + CleanupStack::Pop(&handle); +#else + INFO_PRINTF1(_L("This test is meant to be run only in DEBUG builds. Returning EPASS")); +#endif + return EPass; + } + +TVerdict CXmlParser2Step::TestKXmlParser2OOMTests4() + { +#ifdef _DEBUG + RFs fs; + User::LeaveIfError(fs.Connect()); + CTestContentHandler *sax = CTestContentHandler::NewL(); + RFile handle; + TInt err; + CleanupClosePushL(handle); + TRAP(err,handle.Open(fs, KCorruptXm1File, EFileShareReadersOnly)); + if (err != KErrNone) + { + INFO_PRINTF1(_L("Error opening test XML file")); + User::Leave(err); + } + + CMatchData *matchData = CMatchData::NewL(); + CleanupStack::PushL(matchData); + matchData->SetMimeTypeL(_L8("text/xml")); + matchData->SetVariantL(_L8("libxml2")); + CParser *parser = CParser::NewL(*matchData, *sax); + CleanupStack::PushL(parser); + + __UHEAP_SETFAIL(RHeap::EDeterministic, 72); + + TRAP(err,ParseL(*parser, handle);); + TInt EXmlTagMismatch = -993; //copied from xmlparseerrors.h + if (err != EXmlTagMismatch) + { + return EFail; + } + __UHEAP_SETFAIL(RHeap::ENone, 0); + + fs.Close(); + CleanupStack::Pop(parser); + CleanupStack::Pop(matchData); + CleanupStack::Pop(&handle); +#else + INFO_PRINTF1(_L("This test is meant to be run only in DEBUG builds. Returning EPASS")); +#endif + return EPass; + }