2 * Copyright 2001-2005 Internet2
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 #include "XMLObjectBaseTestCase.h"
\r
20 #include <cxxtest/GlobalFixture.h>
\r
21 #include <xmltooling/XMLToolingConfig.h>
\r
22 #include <xmltooling/util/ParserPool.h>
\r
24 //#define XMLTOOLINGTEST_LEAKCHECK
\r
26 ParserPool* validatingPool=NULL;
\r
27 ParserPool* nonvalidatingPool=NULL;
\r
28 std::string data_path = "../xmltoolingtest/data/";
\r
30 class ToolingFixture : public CxxTest::GlobalFixture
\r
34 XMLToolingConfig::getConfig().log_config();
\r
35 if (!XMLToolingConfig::getConfig().init())
\r
37 validatingPool = new ParserPool(true,true);
\r
38 nonvalidatingPool = new ParserPool();
\r
39 if (getenv("XMLTOOLINGTEST_DATA"))
\r
40 data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/";
\r
41 std::string catpath=data_path + "catalog.xml";
\r
42 auto_ptr_XMLCh temp(catpath.c_str());
\r
43 return validatingPool->loadCatalog(temp.get());
\r
45 bool tearDownWorld() {
\r
46 delete validatingPool;
\r
47 delete nonvalidatingPool;
\r
48 XMLToolingConfig::getConfig().term();
\r
49 #if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK)
\r
50 _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
\r
51 _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
\r
52 _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
\r
53 _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
\r
54 _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
\r
55 _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
\r
56 _CrtDumpMemoryLeaks();
\r
60 //bool setUp() { printf( "</test>" ); return true; }
\r
61 //bool tearDown() { printf( "</test>" ); return true; }
\r
64 static ToolingFixture globalFixture;
\r
66 class GlobalTest : public CxxTest::TestSuite
\r
70 XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder());
\r
74 XMLObjectBuilder::deregisterDefaultBuilder();
\r
77 void testUnknown() {
\r
78 ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");
\r
79 DOMDocument* doc=nonvalidatingPool->parse(fs);
\r
80 TS_ASSERT(doc!=NULL);
\r
83 XMLHelper::serialize(doc->getDocumentElement(), buf1);
\r
85 const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());
\r
88 auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document
\r
89 TS_ASSERT(xmlObject.get()!=NULL);
\r
91 auto_ptr<XMLObject> clonedObject(xmlObject->clone());
\r
92 TS_ASSERT(clonedObject.get()!=NULL);
\r
94 DOMElement* rootElement=clonedObject->marshall();
\r
95 TS_ASSERT(rootElement!=NULL);
\r
98 TS_ASSERT(rootElement==clonedObject->marshall());
\r
101 XMLHelper::serialize(rootElement, buf2);
\r
102 TS_ASSERT_EQUALS(buf1,buf2);
\r
105 void testUnknownWithDocChange() {
\r
106 ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");
\r
107 DOMDocument* doc=nonvalidatingPool->parse(fs);
\r
108 TS_ASSERT(doc!=NULL);
\r
111 XMLHelper::serialize(doc->getDocumentElement(), buf1);
\r
113 const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());
\r
114 TS_ASSERT(b!=NULL);
\r
116 auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document
\r
117 TS_ASSERT(xmlObject.get()!=NULL);
\r
119 DOMDocument* newDoc=nonvalidatingPool->newDocument();
\r
120 DOMElement* rootElement=xmlObject->marshall(newDoc);
\r
121 TS_ASSERT(rootElement!=NULL);
\r
124 XMLHelper::serialize(rootElement, buf2);
\r
125 TS_ASSERT_EQUALS(buf1,buf2);
\r