0b3e056f55590de51053732f44b142c1c33d47a4
[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         TS_TRACE("testMarshallingWithAttributes");\r
39 \r
40         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
41         auto_ptr<SimpleXMLObject> sxObject(SimpleXMLObjectBuilder::newSimpleXMLObject());\r
42         TS_ASSERT(sxObject.get()!=NULL);\r
43         auto_ptr_XMLCh expected("Firefly");\r
44         sxObject->setId(expected.get());\r
45         \r
46         DOMElement* rootElement = sxObject->marshall();\r
47 \r
48         string path=data_path + "SimpleXMLObjectWithAttribute.xml";\r
49         ifstream fs(path.c_str());\r
50         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
51         TS_ASSERT(doc!=NULL);\r
52 \r
53         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
54         doc->release();\r
55     }\r
56 \r
57     void testMarshallingWithElementContent() {\r
58         TS_TRACE("testMarshallingWithElementContent");\r
59 \r
60         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
61         auto_ptr<SimpleXMLObject> sxObject(SimpleXMLObjectBuilder::newSimpleXMLObject());\r
62         TS_ASSERT(sxObject.get()!=NULL);\r
63         auto_ptr_XMLCh expected("Sample Content");\r
64         sxObject->setValue(expected.get());\r
65         \r
66         DOMElement* rootElement = sxObject->marshall();\r
67 \r
68         string path=data_path + "SimpleXMLObjectWithContent.xml";\r
69         ifstream fs(path.c_str());\r
70         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
71         TS_ASSERT(doc!=NULL);\r
72 \r
73         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
74         doc->release();\r
75     }\r
76 \r
77     void testMarshallingWithChildElements() {\r
78         TS_TRACE("testMarshallingWithChildElements");\r
79 \r
80         QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME);\r
81         const SimpleXMLObjectBuilder* b=dynamic_cast<const SimpleXMLObjectBuilder*>(XMLObjectBuilder::getBuilder(qname));\r
82         TS_ASSERT(b!=NULL);\r
83         \r
84         auto_ptr<SimpleXMLObject> sxObject(b->buildObject());\r
85         TS_ASSERT(sxObject.get()!=NULL);\r
86         VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects();\r
87         kids.push_back(b->buildObject());\r
88         kids.push_back(b->buildObject());\r
89         kids.push_back(b->buildObject());\r
90         \r
91         // Test some collection stuff\r
92         auto_ptr_XMLCh foo("Foo");\r
93         auto_ptr_XMLCh bar("Bar");\r
94         auto_ptr_XMLCh baz("Baz");\r
95         kids.begin()->setId(foo.get());\r
96         kids.at(2)->setValue(bar.get());\r
97         kids.erase(kids.begin()+1);\r
98         TS_ASSERT_SAME_DATA(kids.back()->getValue(), bar.get(), XMLString::stringLen(bar.get()));\r
99         \r
100         QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME,SimpleXMLObject::NAMESPACE_PREFIX);\r
101         kids.push_back(\r
102             b->buildObject(SimpleXMLObject::NAMESPACE,SimpleXMLObject::DERIVED_NAME,SimpleXMLObject::NAMESPACE_PREFIX,&qtype)\r
103             );\r
104         kids.back()->setValue(baz.get());\r
105         \r
106         DOMElement* rootElement = sxObject->marshall();\r
107 \r
108         string path=data_path + "SimpleXMLObjectWithChildren.xml";\r
109         ifstream fs(path.c_str());\r
110         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
111         TS_ASSERT(doc!=NULL);\r
112 \r
113         TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
114         doc->release();\r
115     }\r
116 \r
117 };\r