X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2Fxmltoolingtest.h;h=c67423b3f8133ba8415b84ce3a12affaaaeb46f2;hp=20450a460c8457c0b8cf90f97d29bdb35ee1ac46;hb=HEAD;hpb=cc6288fe4f72f8f47680b04348a4de7dee748a61 diff --git a/xmltoolingtest/xmltoolingtest.h b/xmltoolingtest/xmltoolingtest.h index 20450a4..c67423b 100644 --- a/xmltoolingtest/xmltoolingtest.h +++ b/xmltoolingtest/xmltoolingtest.h @@ -1,130 +1,134 @@ -/* - * Copyright 2001-2005 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "XMLObjectBaseTestCase.h" - -#include -#include -#include -#include - -//#define XMLTOOLINGTEST_LEAKCHECK - -ParserPool* validatingPool=NULL; -ParserPool* nonvalidatingPool=NULL; -std::string data_path = "../xmltoolingtest/data/"; - -class ToolingFixture : public CxxTest::GlobalFixture -{ -public: - bool setUpWorld() { - XMLToolingConfig::getConfig().log_config(); - if (!XMLToolingConfig::getConfig().init()) - return false; - validatingPool = new ParserPool(true,true); - nonvalidatingPool = new ParserPool(); - if (getenv("XMLTOOLINGTEST_DATA")) - data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/"; - std::string catpath=data_path + "catalog.xml"; - auto_ptr_XMLCh temp(catpath.c_str()); - return validatingPool->loadCatalog(temp.get()); - } - bool tearDownWorld() { - delete validatingPool; - delete nonvalidatingPool; - XMLToolingConfig::getConfig().term(); -#if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK) - _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT ); - _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT ); - _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT ); - _CrtDumpMemoryLeaks(); -#endif - return true; - } - //bool setUp() { printf( "" ); return true; } - //bool tearDown() { printf( "" ); return true; } -}; - -static ToolingFixture globalFixture; - -class GlobalTest : public CxxTest::TestSuite -{ -public: - void setUp() { - XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder()); - } - - void tearDown() { - XMLObjectBuilder::deregisterDefaultBuilder(); - } - - void testUnknown() { - ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml"); - DOMDocument* doc=nonvalidatingPool->parse(fs); - TS_ASSERT(doc!=NULL); - - string buf1; - XMLHelper::serialize(doc->getDocumentElement(), buf1); - - const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr xmlObject(b->buildFromDocument(doc)); // bind document - TS_ASSERT(xmlObject.get()!=NULL); - - auto_ptr clonedObject(xmlObject->clone()); - TS_ASSERT(clonedObject.get()!=NULL); - - DOMElement* rootElement=clonedObject->marshall(); - TS_ASSERT(rootElement!=NULL); - - // should reuse DOM - TS_ASSERT(rootElement==clonedObject->marshall()); - - string buf2; - XMLHelper::serialize(rootElement, buf2); - TS_ASSERT_EQUALS(buf1,buf2); - } - - void testUnknownWithDocChange() { - ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml"); - DOMDocument* doc=nonvalidatingPool->parse(fs); - TS_ASSERT(doc!=NULL); - - string buf1; - XMLHelper::serialize(doc->getDocumentElement(), buf1); - - const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr xmlObject(b->buildFromDocument(doc)); // bind document - TS_ASSERT(xmlObject.get()!=NULL); - - DOMDocument* newDoc=nonvalidatingPool->newDocument(); - DOMElement* rootElement=xmlObject->marshall(newDoc); - TS_ASSERT(rootElement!=NULL); - - string buf2; - XMLHelper::serialize(rootElement, buf2); - TS_ASSERT_EQUALS(buf1,buf2); - - newDoc->release(); - } -}; - +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + * + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ + +#include "XMLObjectBaseTestCase.h" + +#include +#include +#include +#include + +//#define XMLTOOLINGTEST_LEAKCHECK + +std::string data_path = "../xmltoolingtest/data/"; + +class ToolingFixture : public CxxTest::GlobalFixture +{ +public: + bool setUpWorld() { + XMLToolingConfig::getConfig().log_config(); + + if (getenv("XMLTOOLINGTEST_DATA")) + data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/"; + XMLToolingConfig::getConfig().catalog_path = data_path + "catalog.xml"; + + if (!XMLToolingConfig::getConfig().init()) + return false; + if (!XMLToolingConfig::getConfig().init()) // should be a no-op + return false; + + return true; + } + bool tearDownWorld() { + XMLToolingConfig::getConfig().term(); // should be a no-op + XMLToolingConfig::getConfig().term(); + XMLToolingConfig::getConfig().term(); // shouldn't break anything +#if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK) + _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE ); + _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT ); + _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE ); + _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT ); + _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); + _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT ); + _CrtDumpMemoryLeaks(); +#endif + return true; + } + //bool setUp() { printf( "" ); return true; } + //bool tearDown() { printf( "" ); return true; } +}; + +static ToolingFixture globalFixture; + +class GlobalTest : public CxxTest::TestSuite +{ +public: + void setUp() { + XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder()); + } + + void tearDown() { + XMLObjectBuilder::deregisterDefaultBuilder(); + } + + void testUnknown() { + ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml"); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + string buf1; + XMLHelper::serialize(doc->getDocumentElement(), buf1); + + const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr xmlObject(b->buildFromDocument(doc)); // bind document + TS_ASSERT(xmlObject.get()!=nullptr); + + auto_ptr clonedObject(xmlObject->clone()); + TS_ASSERT(clonedObject.get()!=nullptr); + + DOMElement* rootElement=clonedObject->marshall(); + TS_ASSERT(rootElement!=nullptr); + + // should reuse DOM + TS_ASSERT(rootElement==clonedObject->marshall()); + + string buf2; + XMLHelper::serialize(rootElement, buf2); + TS_ASSERT_EQUALS(buf1,buf2); + } + + void testUnknownWithDocChange() { + ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml"); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + string buf1; + XMLHelper::serialize(doc->getDocumentElement(), buf1); + + const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr xmlObject(b->buildFromDocument(doc)); // bind document + TS_ASSERT(xmlObject.get()!=nullptr); + + DOMDocument* newDoc=XMLToolingConfig::getConfig().getParser().newDocument(); + DOMElement* rootElement=xmlObject->marshall(newDoc); + TS_ASSERT(rootElement!=nullptr); + + string buf2; + XMLHelper::serialize(rootElement, buf2); + TS_ASSERT_EQUALS(buf1,buf2); + + newDoc->release(); + } +}; +