* 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
if (getenv("XMLTOOLINGTEST_DATA"))\r
data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/";\r
- return true;\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
\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
- std::string path=data_path + "catalog.xml";\r
- auto_ptr_XMLCh temp(path.c_str());\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