X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2FUnmarshallingTest.h;h=a7c68163b118e6b5727ac00cc533f0ff681de9da;hp=3687ea3edd5c664aeb6f4f8afbf644140f7762c9;hb=HEAD;hpb=5abd16757f109ccf2b6a7c3b40b98ae858bddae8 diff --git a/xmltoolingtest/UnmarshallingTest.h b/xmltoolingtest/UnmarshallingTest.h index 3687ea3..a7c6816 100644 --- a/xmltoolingtest/UnmarshallingTest.h +++ b/xmltoolingtest/UnmarshallingTest.h @@ -1,172 +1,166 @@ -/* - * Copyright 2001-2005 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "XMLObjectBaseTestCase.h" - -#include -#include - -const XMLCh SimpleXMLObject::NAMESPACE[] = { - chLatin_h, chLatin_t, chLatin_t, chLatin_p, chColon, chForwardSlash, chForwardSlash, - chLatin_w, chLatin_w, chLatin_w, chPeriod, - chLatin_e, chLatin_x, chLatin_a, chLatin_m, chLatin_p, chLatin_l, chLatin_e, chPeriod, - chLatin_o, chLatin_r, chLatin_g, chForwardSlash, - chLatin_t, chLatin_e, chLatin_s, chLatin_t, - chLatin_O, chLatin_b, chLatin_j, chLatin_e, chLatin_c, chLatin_t, chLatin_s, chNull -}; - -const XMLCh SimpleXMLObject::NAMESPACE_PREFIX[] = { - chLatin_t, chLatin_e, chLatin_s, chLatin_t, chNull -}; - -const XMLCh SimpleXMLObject::LOCAL_NAME[] = { - chLatin_S, chLatin_i, chLatin_m, chLatin_p, chLatin_l, chLatin_e, - chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chNull -}; - -const XMLCh SimpleXMLObject::DERIVED_NAME[] = { - chLatin_D, chLatin_e, chLatin_r, chLatin_i, chLatin_v, chLatin_e, chLatin_d, - chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chNull -}; - -const XMLCh SimpleXMLObject::TYPE_NAME[] = { - chLatin_S, chLatin_i, chLatin_m, chLatin_p, chLatin_l, chLatin_e, - chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, - chLatin_T, chLatin_y, chLatin_p, chLatin_e, chNull -}; - -const XMLCh SimpleXMLObject::ID_ATTRIB_NAME[] = { - chLatin_I, chLatin_d, chNull -}; - -class UnmarshallingTest : public CxxTest::TestSuite { -public: - void setUp() { - QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); - XMLObjectBuilder::registerBuilder(qname, new SimpleXMLObjectBuilder()); - XMLObjectBuilder::registerBuilder(qtype, new SimpleXMLObjectBuilder()); - } - - void tearDown() { - QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); - XMLObjectBuilder::deregisterBuilder(qname); - XMLObjectBuilder::deregisterBuilder(qtype); - } - - void testUnmarshallingWithAttributes() { - TS_TRACE("testUnmarshallingWithAttributes"); - - string path=data_path + "SimpleXMLObjectWithAttribute.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr sxObject( - dynamic_cast(b->buildFromDocument(doc)) - ); - TS_ASSERT(sxObject.get()!=NULL); - - auto_ptr_XMLCh expected("Firefly"); - TSM_ASSERT_SAME_DATA("ID was not expected value", expected.get(), sxObject->getId(), XMLString::stringLen(expected.get())); - } - - void testUnmarshallingWithElementContent() { - TS_TRACE("testUnmarshallingWithElementContent"); - - string path=data_path + "SimpleXMLObjectWithContent.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr sxObject( - dynamic_cast(b->buildFromDocument(doc)) - ); - TS_ASSERT(sxObject.get()!=NULL); - - auto_ptr_XMLCh expected("Sample Content"); - TSM_ASSERT_SAME_DATA("Element content was not expected value", expected.get(), sxObject->getValue(), XMLString::stringLen(expected.get())); - } - - void testUnmarshallingWithChildElements() { - TS_TRACE("testUnmarshallingWithChildElements"); - - string path=data_path + "SimpleXMLObjectWithChildren.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr sxObject( - dynamic_cast(b->buildFromDocument(doc)) - ); - TS_ASSERT(sxObject.get()!=NULL); - - VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects(); - TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, kids.size()); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); - TSM_ASSERT_EQUALS("Child's schema type was not expected value", qtype, *(kids.back()->getSchemaType())); - } - - void testUnmarshallingWithClone() { - TS_TRACE("testUnmarshallingWithClone"); - - string path=data_path + "SimpleXMLObjectWithChildren.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - auto_ptr sxObject( - dynamic_cast(b->buildFromDocument(doc)) - ); - TS_ASSERT(sxObject.get()!=NULL); - - sxObject->releaseThisAndChildrenDOM(); - auto_ptr clonedObject(sxObject->clone()); - - VectorOf(SimpleXMLObject) kids=clonedObject->getSimpleXMLObjects(); - TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, kids.size()); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); - TSM_ASSERT_EQUALS("Child's schema type was not expected value", qtype, *(kids.back()->getSchemaType())); - } - - void testUnmarshallingWithUnknownChild() { - TS_TRACE("testUnmarshallingWithUnknownChild"); - - string path=data_path + "SimpleXMLObjectWithUnknownChild.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); - TS_ASSERT(b!=NULL); - - TS_ASSERT_THROWS(b->buildFromDocument(doc),UnmarshallingException); - doc->release(); - } -}; +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + * + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ + +#include "XMLObjectBaseTestCase.h" + +#include +#include + +const XMLCh SimpleXMLObject::NAMESPACE[] = { + chLatin_h, chLatin_t, chLatin_t, chLatin_p, chColon, chForwardSlash, chForwardSlash, + chLatin_w, chLatin_w, chLatin_w, chPeriod, + chLatin_e, chLatin_x, chLatin_a, chLatin_m, chLatin_p, chLatin_l, chLatin_e, chPeriod, + chLatin_o, chLatin_r, chLatin_g, chForwardSlash, + chLatin_t, chLatin_e, chLatin_s, chLatin_t, + chLatin_O, chLatin_b, chLatin_j, chLatin_e, chLatin_c, chLatin_t, chLatin_s, chNull +}; + +const XMLCh SimpleXMLObject::NAMESPACE_PREFIX[] = { + chLatin_t, chLatin_e, chLatin_s, chLatin_t, chNull +}; + +const XMLCh SimpleXMLObject::LOCAL_NAME[] = { + chLatin_S, chLatin_i, chLatin_m, chLatin_p, chLatin_l, chLatin_e, + chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chNull +}; + +const XMLCh SimpleXMLObject::DERIVED_NAME[] = { + chLatin_D, chLatin_e, chLatin_r, chLatin_i, chLatin_v, chLatin_e, chLatin_d, + chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chNull +}; + +const XMLCh SimpleXMLObject::TYPE_NAME[] = { + chLatin_S, chLatin_i, chLatin_m, chLatin_p, chLatin_l, chLatin_e, + chLatin_E, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, + chLatin_T, chLatin_y, chLatin_p, chLatin_e, chNull +}; + +const XMLCh SimpleXMLObject::ID_ATTRIB_NAME[] = { + chLatin_I, chLatin_d, chNull +}; + +class UnmarshallingTest : public CxxTest::TestSuite { +public: + void setUp() { + xmltooling::QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + XMLObjectBuilder::registerBuilder(qname, new SimpleXMLObjectBuilder()); + XMLObjectBuilder::registerBuilder(qtype, new SimpleXMLObjectBuilder()); + } + + void tearDown() { + xmltooling::QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + XMLObjectBuilder::deregisterBuilder(qname); + XMLObjectBuilder::deregisterBuilder(qtype); + } + + void testUnmarshallingWithAttributes() { + string path=data_path + "SimpleXMLObjectWithAttribute.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr sxObject( + dynamic_cast(b->buildFromDocument(doc)) + ); + TS_ASSERT(sxObject.get()!=nullptr); + + auto_ptr_XMLCh expected("Firefly"); + TSM_ASSERT("ID was not expected value", XMLString::equals(expected.get(), sxObject->getId())); + } + + void testUnmarshallingWithElementContent() { + string path=data_path + "SimpleXMLObjectWithContent.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr sxObject( + dynamic_cast(b->buildFromDocument(doc)) + ); + TS_ASSERT(sxObject.get()!=nullptr); + + auto_ptr_XMLCh expected("Sample Content"); + TSM_ASSERT("Element content was not expected value", XMLString::equals(expected.get(), sxObject->getValue())); + } + + void testUnmarshallingWithChildElements() { + string path=data_path + "SimpleXMLObjectWithChildren.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr sxObject( + dynamic_cast(b->buildFromDocument(doc)) + ); + TS_ASSERT(sxObject.get()!=nullptr); + + VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects(); + TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, kids.size()); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + TSM_ASSERT_EQUALS("Child's schema type was not expected value", qtype, *(kids.back()->getSchemaType())); + } + + void testUnmarshallingWithClone() { + string path=data_path + "SimpleXMLObjectWithChildren.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr sxObject( + dynamic_cast(b->buildFromDocument(doc)) + ); + TS_ASSERT(sxObject.get()!=nullptr); + + sxObject->releaseThisAndChildrenDOM(); + auto_ptr clonedObject(dynamic_cast(sxObject->clone())); + + VectorOf(SimpleXMLObject) kids=clonedObject->getSimpleXMLObjects(); + TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, kids.size()); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + TSM_ASSERT_EQUALS("Child's schema type was not expected value", qtype, *(kids.back()->getSchemaType())); + } + + void testUnmarshallingWithUnknownChild() { + string path=data_path + "SimpleXMLObjectWithUnknownChild.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + TS_ASSERT_THROWS(b->buildFromDocument(doc),UnmarshallingException); + doc->release(); + } +};