+ void setUp() {\r
+ XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder());\r
+ }\r
+\r
+ void tearDown() {\r
+ XMLObjectBuilder::deregisterDefaultBuilder();\r
+ }\r
+\r
+ void testUnknown() {\r
+ ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
+ TS_ASSERT(doc!=NULL);\r
+\r
+ string buf1;\r
+ XMLHelper::serialize(doc->getDocumentElement(), buf1);\r
+\r
+ const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
+ TS_ASSERT(b!=NULL);\r
+\r
+ auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document\r
+ TS_ASSERT(xmlObject.get()!=NULL);\r
+\r
+ auto_ptr<XMLObject> clonedObject(xmlObject->clone());\r
+ TS_ASSERT(clonedObject.get()!=NULL);\r
+\r
+ DOMElement* rootElement=clonedObject->marshall();\r
+ TS_ASSERT(rootElement!=NULL);\r
+\r
+ // should reuse DOM\r
+ TS_ASSERT(rootElement==clonedObject->marshall());\r
+\r
+ string buf2;\r
+ XMLHelper::serialize(rootElement, buf2);\r
+ TS_ASSERT_EQUALS(buf1,buf2);\r
+ }\r
+\r
+ void testUnknownWithDocChange() {\r
+ ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
+ TS_ASSERT(doc!=NULL);\r
+\r
+ string buf1;\r
+ XMLHelper::serialize(doc->getDocumentElement(), buf1);\r
+\r
+ const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
+ TS_ASSERT(b!=NULL);\r
+\r
+ auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document\r
+ TS_ASSERT(xmlObject.get()!=NULL);\r
+\r
+ DOMDocument* newDoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
+ DOMElement* rootElement=xmlObject->marshall(newDoc);\r
+ TS_ASSERT(rootElement!=NULL);\r
+\r
+ string buf2;\r
+ XMLHelper::serialize(rootElement, buf2);\r
+ TS_ASSERT_EQUALS(buf1,buf2);\r
+\r
+ newDoc->release();\r