Remove some tracing, fix string compares.
[shibboleth/cpp-xmltooling.git] / xmltoolingtest / MarshallingTest.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 \r
21 class MarshallingTest : public CxxTest::TestSuite {\r
22 public:\r
23     void setUp() {\r
24         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
25         QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME);\r
26         XMLObjectBuilder::registerBuilder(qname, new SimpleXMLObjectBuilder());\r
27         XMLObjectBuilder::registerBuilder(qtype, new SimpleXMLObjectBuilder());\r
28     }\r
29 \r
30     void tearDown() {\r
31         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
32         QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME);\r
33         XMLObjectBuilder::deregisterBuilder(qname);\r
34         XMLObjectBuilder::deregisterBuilder(qtype);\r
35     }\r
36 \r
37     void testMarshallingWithAttributes() {\r
38         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
39         auto_ptr<SimpleXMLObject> sxObject(SimpleXMLObjectBuilder::newSimpleXMLObject());\r
40         TS_ASSERT(sxObject.get()!=NULL);\r
41         auto_ptr_XMLCh expected("Firefly");\r
42         sxObject->setId(expected.get());\r
43         \r
44         DOMElement* rootElement = sxObject->marshall();\r
45 \r
46         string path=data_path + "SimpleXMLObjectWithAttribute.xml";\r
47         ifstream fs(path.c_str());\r
48         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
49         TS_ASSERT(doc!=NULL);\r
50 \r
51         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
52         doc->release();\r
53     }\r
54 \r
55     void testMarshallingWithElementContent() {\r
56         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
57         auto_ptr<SimpleXMLObject> sxObject(SimpleXMLObjectBuilder::newSimpleXMLObject());\r
58         TS_ASSERT(sxObject.get()!=NULL);\r
59         auto_ptr_XMLCh expected("Sample Content");\r
60         sxObject->setValue(expected.get());\r
61         \r
62         DOMElement* rootElement = sxObject->marshall();\r
63 \r
64         string path=data_path + "SimpleXMLObjectWithContent.xml";\r
65         ifstream fs(path.c_str());\r
66         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
67         TS_ASSERT(doc!=NULL);\r
68 \r
69         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
70         doc->release();\r
71     }\r
72 \r
73     void testMarshallingWithChildElements() {\r
74         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
75         const SimpleXMLObjectBuilder* b=dynamic_cast<const SimpleXMLObjectBuilder*>(XMLObjectBuilder::getBuilder(qname));\r
76         TS_ASSERT(b!=NULL);\r
77         \r
78         auto_ptr<SimpleXMLObject> sxObject(b->buildObject());\r
79         TS_ASSERT(sxObject.get()!=NULL);\r
80         VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects();\r
81         kids.push_back(b->buildObject());\r
82         kids.push_back(b->buildObject());\r
83         kids.push_back(b->buildObject());\r
84         \r
85         // Test some collection stuff\r
86         auto_ptr_XMLCh foo("Foo");\r
87         auto_ptr_XMLCh bar("Bar");\r
88         auto_ptr_XMLCh baz("Baz");\r
89         kids.begin()->setId(foo.get());\r
90         kids.at(2)->setValue(bar.get());\r
91         kids.erase(kids.begin()+1);\r
92         TS_ASSERT(XMLString::equals(kids.back()->getValue(), bar.get()));\r
93         \r
94         QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME,SimpleXMLObject::NAMESPACE_PREFIX);\r
95         kids.push_back(\r
96             b->buildObject(SimpleXMLObject::NAMESPACE,SimpleXMLObject::DERIVED_NAME,SimpleXMLObject::NAMESPACE_PREFIX,&qtype)\r
97             );\r
98         kids.back()->setValue(baz.get());\r
99         \r
100         DOMElement* rootElement = sxObject->marshall();\r
101 \r
102         string path=data_path + "SimpleXMLObjectWithChildren.xml";\r
103         ifstream fs(path.c_str());\r
104         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
105         TS_ASSERT(doc!=NULL);\r
106 \r
107         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
108         doc->release();\r
109     }\r
110 \r
111 };\r