Removed ValidatingXMLObject interface and implementations.
[shibboleth/cpp-xmltooling.git] / xmltoolingtest / xmltoolingtest.h
index f3fb5af..fe1e867 100644 (file)
  * limitations under the License.\r
  */\r
 \r
-#include <cxxtest/TestSuite.h>\r
-#include <cxxtest/GlobalFixture.h>\r
+#include "XMLObjectBaseTestCase.h"\r
 \r
+#include <fstream>\r
+#include <cxxtest/GlobalFixture.h>\r
 #include <xmltooling/XMLToolingConfig.h>\r
 #include <xmltooling/util/ParserPool.h>\r
 \r
-using namespace xmltooling;\r
+//#define XMLTOOLINGTEST_LEAKCHECK\r
 \r
-ParserPool* validatingPool=NULL;\r
-ParserPool* nonvalidatingPool=NULL;\r
+std::string data_path = "../xmltoolingtest/data/";\r
 \r
 class ToolingFixture : public CxxTest::GlobalFixture\r
 {\r
 public:\r
     bool setUpWorld() {\r
-        XMLToolingConfig::getConfig().log_config("DEBUG");\r
+        XMLToolingConfig::getConfig().log_config();\r
         if (!XMLToolingConfig::getConfig().init())\r
             return false;\r
-        validatingPool = new ParserPool(true,true);\r
-        nonvalidatingPool = new ParserPool();\r
-        return true;\r
+        if (getenv("XMLTOOLINGTEST_DATA"))\r
+            data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/";\r
+        std::string catpath=data_path + "catalog.xml";\r
+        auto_ptr_XMLCh temp(catpath.c_str());\r
+        return XMLToolingConfig::getConfig().getValidatingParser().loadCatalog(temp.get());\r
     }\r
     bool tearDownWorld() {\r
-        delete validatingPool;\r
-        delete nonvalidatingPool;\r
         XMLToolingConfig::getConfig().term();\r
 #if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK)\r
        _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );\r
@@ -57,11 +57,68 @@ public:
 \r
 static ToolingFixture globalFixture;\r
 \r
-class CatalogTest : public CxxTest::TestSuite\r
+class GlobalTest : public CxxTest::TestSuite\r
 {\r
 public:\r
-    void testCatalog(void) {\r
-        auto_ptr_XMLCh temp("../xmltoolingtest/data/catalog.xml");\r
-        TS_ASSERT(validatingPool->loadCatalog(temp.get()));\r
+    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
     }\r
 };\r
+\r