X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2Fxmltoolingtest.h;h=c67423b3f8133ba8415b84ce3a12affaaaeb46f2;hp=543758dce9909fd37a8c1fe10932857514f10568;hb=HEAD;hpb=5e67e91d34412f0f4e48088c8f6ab4e18fe5dff2 diff --git a/xmltoolingtest/xmltoolingtest.h b/xmltoolingtest/xmltoolingtest.h index 543758d..c67423b 100644 --- a/xmltoolingtest/xmltoolingtest.h +++ b/xmltoolingtest/xmltoolingtest.h @@ -1,71 +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 -#include - -#include -#include - -using namespace xmltooling; - -ParserPool* validatingPool=NULL; -ParserPool* nonvalidatingPool=NULL; -std::string data_path = "../xmltoolingtest/data/"; - -class ToolingFixture : public CxxTest::GlobalFixture -{ -public: - bool setUpWorld() { - XMLToolingConfig::getConfig().log_config("DEBUG"); - 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")) + "/"; - return true; - } - 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 CatalogTest : public CxxTest::TestSuite -{ -public: - void testCatalog(void) { - std::string path=data_path + "catalog.xml"; - auto_ptr_XMLCh temp(path.c_str()); - TS_ASSERT(validatingPool->loadCatalog(temp.get())); - } -}; +/** + * 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(); + } +}; +