Misc fixes from addtl KeyInfo tests.
[shibboleth/cpp-xmltooling.git] / xmltoolingtest / xmltoolingtest.h
1 /*\r
2  *  Copyright 2001-2005 Internet2\r
3  * \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
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\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
15  */\r
16 \r
17 #include "XMLObjectBaseTestCase.h"\r
18 \r
19 #include <fstream>\r
20 #include <cxxtest/GlobalFixture.h>\r
21 #include <xmltooling/XMLToolingConfig.h>\r
22 #include <xmltooling/util/ParserPool.h>\r
23 \r
24 //#define XMLTOOLINGTEST_LEAKCHECK\r
25 \r
26 ParserPool* validatingPool=NULL;\r
27 ParserPool* nonvalidatingPool=NULL;\r
28 std::string data_path = "../xmltoolingtest/data/";\r
29 \r
30 class ToolingFixture : public CxxTest::GlobalFixture\r
31 {\r
32 public:\r
33     bool setUpWorld() {\r
34         XMLToolingConfig::getConfig().log_config();\r
35         if (!XMLToolingConfig::getConfig().init())\r
36             return false;\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
44     }\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
57 #endif\r
58         return true;\r
59     }\r
60     //bool setUp() { printf( "</test>" ); return true; }\r
61     //bool tearDown() { printf( "</test>" ); return true; }\r
62 };\r
63 \r
64 static ToolingFixture globalFixture;\r
65 \r
66 class GlobalTest : public CxxTest::TestSuite\r
67 {\r
68 public:\r
69     void setUp() {\r
70         XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder());\r
71     }\r
72 \r
73     void tearDown() {\r
74         XMLObjectBuilder::deregisterDefaultBuilder();\r
75     }\r
76 \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
81 \r
82         string buf1;\r
83         XMLHelper::serialize(doc->getDocumentElement(), buf1);\r
84 \r
85         const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
86         TS_ASSERT(b!=NULL);\r
87 \r
88         auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document\r
89         TS_ASSERT(xmlObject.get()!=NULL);\r
90 \r
91         auto_ptr<XMLObject> clonedObject(xmlObject->clone());\r
92         TS_ASSERT(clonedObject.get()!=NULL);\r
93 \r
94         DOMElement* rootElement=clonedObject->marshall();\r
95         TS_ASSERT(rootElement!=NULL);\r
96 \r
97         // should reuse DOM\r
98         TS_ASSERT(rootElement==clonedObject->marshall());\r
99 \r
100         string buf2;\r
101         XMLHelper::serialize(rootElement, buf2);\r
102         TS_ASSERT_EQUALS(buf1,buf2);\r
103     }\r
104 \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
109 \r
110         string buf1;\r
111         XMLHelper::serialize(doc->getDocumentElement(), buf1);\r
112 \r
113         const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
114         TS_ASSERT(b!=NULL);\r
115 \r
116         auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document\r
117         TS_ASSERT(xmlObject.get()!=NULL);\r
118 \r
119         DOMDocument* newDoc=nonvalidatingPool->newDocument();\r
120         DOMElement* rootElement=xmlObject->marshall(newDoc);\r
121         TS_ASSERT(rootElement!=NULL);\r
122 \r
123         string buf2;\r
124         XMLHelper::serialize(rootElement, buf2);\r
125         TS_ASSERT_EQUALS(buf1,buf2);\r
126 \r
127         newDoc->release();\r
128     }\r
129 };\r
130 \r