1 #include <cppunit/config/SourcePrefix.h>
2 #include <cppunit/tools/XmlElement.h>
3 #include "ToolsSuite.h"
4 #include "XmlElementTest.h"
5 #include "XmlUniformiser.h"
6 
7 
8 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( XmlElementTest,
9                                        toolsSuiteName() );
10 
11 
XmlElementTest()12 XmlElementTest::XmlElementTest()
13 {
14 }
15 
16 
~XmlElementTest()17 XmlElementTest::~XmlElementTest()
18 {
19 }
20 
21 
22 void
setUp()23 XmlElementTest::setUp()
24 {
25 }
26 
27 
28 void
tearDown()29 XmlElementTest::tearDown()
30 {
31 }
32 
33 
34 void
testStringContentConstructor()35 XmlElementTest::testStringContentConstructor()
36 {
37   CPPUNIT_NS::XmlElement element( "aName", "someContent" );
38   CPPUNIT_ASSERT_EQUAL( std::string("aName"), element.name() );
39   CPPUNIT_ASSERT_EQUAL( std::string("someContent"), element.content() );
40 }
41 
42 
43 void
testNumericContentConstructor()44 XmlElementTest::testNumericContentConstructor()
45 {
46   CPPUNIT_NS::XmlElement element( "numericName", 123456789 );
47   CPPUNIT_ASSERT_EQUAL( std::string("numericName"), element.name() );
48   CPPUNIT_ASSERT_EQUAL( std::string("123456789"), element.content() );
49 }
50 
51 
52 void
testSetName()53 XmlElementTest::testSetName()
54 {
55   CPPUNIT_NS::XmlElement element( "aName" );
56   element.setName( "anotherName" );
57   CPPUNIT_ASSERT_EQUAL( std::string("anotherName"), element.name() );
58 }
59 
60 
61 void
testSetStringContent()62 XmlElementTest::testSetStringContent()
63 {
64   CPPUNIT_NS::XmlElement element( "aName", "someContent" );
65   element.setContent( "other" );
66   CPPUNIT_ASSERT_EQUAL( std::string("other"), element.content() );
67 }
68 
69 
70 void
testSetNumericContent()71 XmlElementTest::testSetNumericContent()
72 {
73   CPPUNIT_NS::XmlElement element( "aName", "someContent" );
74   element.setContent( 87654321 );
75   CPPUNIT_ASSERT_EQUAL( std::string("87654321"), element.content() );
76 }
77 
78 
79 void
testElementCount()80 XmlElementTest::testElementCount()
81 {
82   CPPUNIT_NS::XmlElement node( "element", "content" );
83   CPPUNIT_ASSERT_EQUAL( 0, node.elementCount() );
84 
85   node.addElement( new CPPUNIT_NS::XmlElement( "child1" ) );
86   node.addElement( new CPPUNIT_NS::XmlElement( "child2" ) );
87   CPPUNIT_ASSERT_EQUAL( 2, node.elementCount() );
88 }
89 
90 
91 void
testElementAtNegativeIndexThrow()92 XmlElementTest::testElementAtNegativeIndexThrow()
93 {
94   CPPUNIT_NS::XmlElement node( "element" );
95   node.elementAt( -1 );
96 }
97 
98 
99 void
testElementAtTooLargeIndexThrow()100 XmlElementTest::testElementAtTooLargeIndexThrow()
101 {
102   CPPUNIT_NS::XmlElement node( "element" );
103   node.elementAt( 0 );
104 }
105 
106 
107 void
testElementAt()108 XmlElementTest::testElementAt()
109 {
110   CPPUNIT_NS::XmlElement node( "element" );
111   CPPUNIT_NS::XmlElement *element1 = new CPPUNIT_NS::XmlElement( "element1" );
112   CPPUNIT_NS::XmlElement *element2 = new CPPUNIT_NS::XmlElement( "element2" );
113   node.addElement( element1 );
114   node.addElement( element2 );
115 
116   CPPUNIT_ASSERT( element1 == node.elementAt(0) );
117   CPPUNIT_ASSERT( element2 == node.elementAt(1) );
118 }
119 
120 
121 void
testElementForThrow()122 XmlElementTest::testElementForThrow()
123 {
124   CPPUNIT_NS::XmlElement node( "element" );
125   node.addElement( new CPPUNIT_NS::XmlElement( "element1" ) );
126   node.elementFor( "name2" );
127 }
128 
129 
130 void
testElementFor()131 XmlElementTest::testElementFor()
132 {
133   CPPUNIT_NS::XmlElement node( "element" );
134   CPPUNIT_NS::XmlElement *element1 = new CPPUNIT_NS::XmlElement( "element1" );
135   CPPUNIT_NS::XmlElement *element2 = new CPPUNIT_NS::XmlElement( "element2" );
136   node.addElement( element1 );
137   node.addElement( element2 );
138 
139   CPPUNIT_ASSERT( element2 == node.elementFor( "element2" ) );
140   CPPUNIT_ASSERT( element1 == node.elementFor( "element1" ) );
141 }
142 
143 
144 void
testEmptyNodeToString()145 XmlElementTest::testEmptyNodeToString()
146 {
147   CPPUNIT_NS::XmlElement node( "element" );
148   std::string expectedXml = "<element></element>";
149   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
150 }
151 
152 
153 void
testElementWithAttributesToString()154 XmlElementTest::testElementWithAttributesToString()
155 {
156   CPPUNIT_NS::XmlElement node( "element" );
157   node.addAttribute( "id", 17 );
158   node.addAttribute( "date-format", "iso-8901" );
159   std::string expectedXml = "<element id=\"17\" "
160                             "date-format=\"iso-8901\">"
161                             "</element>";
162   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
163 }
164 
165 
166 void
testEscapedAttributeValueToString()167 XmlElementTest::testEscapedAttributeValueToString()
168 {
169   CPPUNIT_NS::XmlElement node( "element" );
170   node.addAttribute( "escaped", "&<>\"'" );
171   std::string expectedXml = "<element escaped=\""
172                             "&amp;&lt;&gt;&quot;&apos;"
173                             "\"></element>";
174   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
175 }
176 
177 
178 void
testElementToStringEscapeContent()179 XmlElementTest::testElementToStringEscapeContent()
180 {
181   CPPUNIT_NS::XmlElement node( "element", "ChessTest<class Chess>" );
182   std::string expectedXml = "<element>"
183                             "ChessTest&lt;class Chess&gt;"
184                             "</element>";
185   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
186 }
187 
188 
189 void
testElementWithChildrenToString()190 XmlElementTest::testElementWithChildrenToString()
191 {
192   CPPUNIT_NS::XmlElement node( "element" );
193   node.addElement( new CPPUNIT_NS::XmlElement( "child1" ) );
194   node.addElement( new CPPUNIT_NS::XmlElement( "child2" ) );
195   std::string expectedXml = "<element><child1></child1>"
196                             "<child2></child2></element>";
197   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
198 }
199 
200 
201 void
testElementWithContentToString()202 XmlElementTest::testElementWithContentToString()
203 {
204   CPPUNIT_NS::XmlElement node( "element", "content\nline2" );
205   std::string expectedXml = "<element>content\nline2</element>";
206   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
207 }
208 
209 
210 void
testElementWithNumericContentToString()211 XmlElementTest::testElementWithNumericContentToString()
212 {
213   CPPUNIT_NS::XmlElement node( "element", 123456789 );
214   std::string expectedXml = "<element>123456789</element>";
215   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
216 }
217 
218 
219 void
testElementWithContentAndChildToString()220 XmlElementTest::testElementWithContentAndChildToString()
221 {
222   CPPUNIT_NS::XmlElement node( "element", "content" );
223   node.addElement( new CPPUNIT_NS::XmlElement( "child1" ) );
224   std::string expectedXml = "<element><child1></child1>content</element>";
225   CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, node.toString() );
226 }
227