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 std::string data_path = "../xmltoolingtest/data/";
\r
28 class ToolingFixture : public CxxTest::GlobalFixture
\r
32 XMLToolingConfig::getConfig().log_config();
\r
33 if (!XMLToolingConfig::getConfig().init())
\r
35 if (getenv("XMLTOOLINGTEST_DATA"))
\r
36 data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/";
\r
37 std::string catpath=data_path + "catalog.xml";
\r
38 auto_ptr_XMLCh temp(catpath.c_str());
\r
39 return XMLToolingConfig::getConfig().getValidatingParser().loadCatalog(temp.get());
\r
41 bool tearDownWorld() {
\r
42 XMLToolingConfig::getConfig().term();
\r
43 #if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK)
\r
44 _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
\r
45 _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
\r
46 _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
\r
47 _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
\r
48 _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
\r
49 _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
\r
50 _CrtDumpMemoryLeaks();
\r
54 //bool setUp() { printf( "</test>" ); return true; }
\r
55 //bool tearDown() { printf( "</test>" ); return true; }
\r
58 static ToolingFixture globalFixture;
\r
60 class GlobalTest : public CxxTest::TestSuite
\r
64 XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder());
\r
68 XMLObjectBuilder::deregisterDefaultBuilder();
\r
71 void testUnknown() {
\r
72 ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");
\r
73 DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);
\r
74 TS_ASSERT(doc!=NULL);
\r
77 XMLHelper::serialize(doc->getDocumentElement(), buf1);
\r
79 const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());
\r
82 auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document
\r
83 TS_ASSERT(xmlObject.get()!=NULL);
\r
85 auto_ptr<XMLObject> clonedObject(xmlObject->clone());
\r
86 TS_ASSERT(clonedObject.get()!=NULL);
\r
88 DOMElement* rootElement=clonedObject->marshall();
\r
89 TS_ASSERT(rootElement!=NULL);
\r
92 TS_ASSERT(rootElement==clonedObject->marshall());
\r
95 XMLHelper::serialize(rootElement, buf2);
\r
96 TS_ASSERT_EQUALS(buf1,buf2);
\r
99 void testUnknownWithDocChange() {
\r
100 ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");
\r
101 DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);
\r
102 TS_ASSERT(doc!=NULL);
\r
105 XMLHelper::serialize(doc->getDocumentElement(), buf1);
\r
107 const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());
\r
108 TS_ASSERT(b!=NULL);
\r
110 auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document
\r
111 TS_ASSERT(xmlObject.get()!=NULL);
\r
113 DOMDocument* newDoc=XMLToolingConfig::getConfig().getParser().newDocument();
\r
114 DOMElement* rootElement=xmlObject->marshall(newDoc);
\r
115 TS_ASSERT(rootElement!=NULL);
\r
118 XMLHelper::serialize(rootElement, buf2);
\r
119 TS_ASSERT_EQUALS(buf1,buf2);
\r