X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2FComplexXMLObjectTest.h;h=351289da65e32a04a707f544276e8570de3eae93;hp=da0ecfbdd469e91317ccf9619e5ac058cd0f651d;hb=HEAD;hpb=676c0279ec7584dbb046c84ed9768c726afc009d diff --git a/xmltoolingtest/ComplexXMLObjectTest.h b/xmltoolingtest/ComplexXMLObjectTest.h index da0ecfb..351289d 100644 --- a/xmltoolingtest/ComplexXMLObjectTest.h +++ b/xmltoolingtest/ComplexXMLObjectTest.h @@ -1,69 +1,71 @@ -/* - * 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 - -class ComplexXMLObjectTest : public CxxTest::TestSuite { -public: - ComplexXMLObjectTest() {} - - void setUp() { - XMLObjectBuilder::registerDefaultBuilder(new WildcardXMLObjectBuilder()); - Marshaller::registerDefaultMarshaller(new WildcardXMLObjectMarshaller()); - Unmarshaller::registerDefaultUnmarshaller(new WildcardXMLObjectUnmarshaller()); - } - - void tearDown() { - XMLObjectBuilder::deregisterDefaultBuilder(); - Marshaller::deregisterDefaultMarshaller(); - Unmarshaller::deregisterDefaultUnmarshaller(); - } - - void testComplexUnmarshalling() { - TS_TRACE("testComplexUnmarshalling"); - - string path=data_path + "ComplexXMLObject.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=nonvalidatingPool->parse(fs); - TS_ASSERT(doc!=NULL); - - const Unmarshaller* u = Unmarshaller::getUnmarshaller(doc->getDocumentElement()); - TS_ASSERT(u!=NULL); - - auto_ptr wcObject(dynamic_cast(u->unmarshall(doc->getDocumentElement(),true))); - TS_ASSERT(wcObject.get()!=NULL); - - ListOf(XMLObject) kids=wcObject->getXMLObjects(); - TSM_ASSERT_EQUALS("Number of child elements was not expected value", 2, kids.size()); - - - WildcardXMLObject* wc1=dynamic_cast(*(++kids.begin())); - WildcardXMLObject* wc2=dynamic_cast(*(++(wc1->getXMLObjects().begin()))); - TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, wc2->getXMLObjects().size()); - - static const XMLCh html[] = {chLatin_h, chLatin_t, chLatin_m, chLatin_l, chNull}; - static const XMLCh div[] = {chLatin_d, chLatin_i, chLatin_v, chNull}; - auto_ptr_XMLCh htmlns("http://www.w3.org/1999/xhtml"); - QName q(htmlns.get(),div,html); - ListOf(XMLObject)::const_iterator it=wc2->getXMLObjects().begin(); - ++it; ++it; - TSM_ASSERT_EQUALS("Element QName unexpected", it->getElementQName(),q); - } - -}; +/** + * 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 + +class ComplexXMLObjectTest : public CxxTest::TestSuite { +public: + ComplexXMLObjectTest() {} + + void setUp() { + XMLObjectBuilder::registerDefaultBuilder(new AnyElementBuilder()); + } + + void tearDown() { + XMLObjectBuilder::deregisterDefaultBuilder(); + } + + void testComplexUnmarshalling() { + string path=data_path + "ComplexXMLObject.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + XercesJanitor janitor(doc); + + const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement()); + TS_ASSERT(b!=nullptr); + + auto_ptr wcObject( + dynamic_cast(b->buildFromDocument(doc, false)) + ); + TS_ASSERT(wcObject.get()!=nullptr); + + VectorOf(XMLObject) kids=wcObject->getUnknownXMLObjects(); + TSM_ASSERT_EQUALS("Number of child elements was not expected value", 2, kids.size()); + + ElementProxy* wc1=dynamic_cast(*(++kids.begin())); + ElementProxy* wc2=dynamic_cast(*(++(wc1->getUnknownXMLObjects().begin()))); + TSM_ASSERT_EQUALS("Number of child elements was not expected value", 3, wc2->getUnknownXMLObjects().size()); + + static const XMLCh html[] = {chLatin_h, chLatin_t, chLatin_m, chLatin_l, chNull}; + static const XMLCh div[] = {chLatin_d, chLatin_i, chLatin_v, chNull}; + auto_ptr_XMLCh htmlns("http://www.w3.org/1999/xhtml"); + xmltooling::QName q(htmlns.get(),div,html); + TSM_ASSERT_EQUALS("Element QName unexpected", wc2->getUnknownXMLObjects()[2]->getElementQName(),q); + + DOMElement* rebuilt = wcObject->marshall(XMLToolingConfig::getConfig().getParser().newDocument()); + wcObject->setDocument(rebuilt->getOwnerDocument()); + TS_ASSERT(rebuilt->isEqualNode(doc->getDocumentElement())); + } + +};