X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-util%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Futil%2Fxml%2FXmlElementTest.java;fp=opendaylight%2Fnetconf%2Fnetconf-util%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Futil%2Fxml%2FXmlElementTest.java;h=a88de956e2f336704ce9af6895b9cf7285ce7f2b;hp=0000000000000000000000000000000000000000;hb=09e43fe487f7cee40caa96ba554ac8b026ba5d64;hpb=ce9ca282f8e0eb5a0cd1b97cab882f9f80fa598a diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java new file mode 100644 index 0000000000..a88de956e2 --- /dev/null +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.netconf.util.xml; + +import static org.hamcrest.CoreMatchers.both; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.google.common.base.Optional; + +public class XmlElementTest { + + private final String elementAsString = "" + + "" + + "deepValue" + + "" + + "innerNamespaceValue" + + "b:valueWithPrefix" + + ""; + private Document document; + private Element element; + private XmlElement xmlElement; + + @Before + public void setUp() throws Exception { + document = XmlUtil.readXmlToDocument(elementAsString); + element = document.getDocumentElement(); + xmlElement = XmlElement.fromDomElement(element); + } + + @Test + public void testConstruct() throws Exception { + final XmlElement fromString = XmlElement.fromString(elementAsString); + assertEquals(fromString, xmlElement); + XmlElement.fromDomDocument(document); + XmlElement.fromDomElement(element); + XmlElement.fromDomElementWithExpected(element, "top"); + XmlElement.fromDomElementWithExpected(element, "top", "namespace"); + + try { + XmlElement.fromString("notXml"); + fail(); + } catch (final NetconfDocumentedException e) {} + + try { + XmlElement.fromDomElementWithExpected(element, "notTop"); + fail(); + } catch (final NetconfDocumentedException e) {} + + try { + XmlElement.fromDomElementWithExpected(element, "top", "notNamespace"); + fail(); + } catch (final NetconfDocumentedException e) {} + } + + @Test + public void testGetters() throws Exception { + assertEquals(element, xmlElement.getDomElement()); + assertEquals(element.getElementsByTagName("inner").getLength(), xmlElement.getElementsByTagName("inner").getLength()); + + assertEquals("top", xmlElement.getName()); + assertTrue(xmlElement.hasNamespace()); + assertEquals("namespace", xmlElement.getNamespace()); + assertEquals("namespace", xmlElement.getNamespaceAttribute()); + assertEquals(Optional.of("namespace"), xmlElement.getNamespaceOptionally()); + + assertEquals("value1", xmlElement.getAttribute("attr1", "attrNamespace")); + assertEquals("value2", xmlElement.getAttribute("attr2")); + assertEquals(2 + 2/*Namespace definition*/, xmlElement.getAttributes().size()); + + assertEquals(3, xmlElement.getChildElements().size()); + assertEquals(1, xmlElement.getChildElements("inner").size()); + assertTrue(xmlElement.getOnlyChildElementOptionally("inner").isPresent()); + assertTrue(xmlElement.getOnlyChildElementWithSameNamespaceOptionally("inner").isPresent()); + assertEquals(0, xmlElement.getChildElements("unknown").size()); + assertFalse(xmlElement.getOnlyChildElementOptionally("unknown").isPresent()); + assertEquals(1, xmlElement.getChildElementsWithSameNamespace("inner").size()); + assertEquals(0, xmlElement.getChildElementsWithSameNamespace("innerNamespace").size()); + assertEquals(1, xmlElement.getChildElementsWithinNamespace("innerNamespace", "innerNamespace").size()); + assertTrue(xmlElement.getOnlyChildElementOptionally("innerNamespace", "innerNamespace").isPresent()); + assertFalse(xmlElement.getOnlyChildElementOptionally("innerNamespace", "unknownNamespace").isPresent()); + + final XmlElement noNamespaceElement = XmlElement.fromString(""); + assertFalse(noNamespaceElement.hasNamespace()); + try { + noNamespaceElement.getNamespace(); + fail(); + } catch (final MissingNameSpaceException e) {} + + final XmlElement inner = xmlElement.getOnlyChildElement("inner"); + final XmlElement deepInner = inner.getOnlyChildElementWithSameNamespaceOptionally().get(); + assertEquals(deepInner, inner.getOnlyChildElementWithSameNamespace()); + assertEquals(Optional.absent(), xmlElement.getOnlyChildElementOptionally("unknown")); + assertEquals("deepValue", deepInner.getTextContent()); + assertEquals("deepValue", deepInner.getOnlyTextContentOptionally().get()); + assertEquals("deepValue", deepInner.getOnlyTextContentOptionally().get()); + } + + @Test + public void testExtractNamespaces() throws Exception { + final XmlElement innerPrefixed = xmlElement.getOnlyChildElement("innerPrefixed"); + Map.Entry namespaceOfTextContent = innerPrefixed.findNamespaceOfTextContent(); + + assertNotNull(namespaceOfTextContent); + assertEquals("b", namespaceOfTextContent.getKey()); + assertEquals("prefixedValueNamespace", namespaceOfTextContent.getValue()); + final XmlElement innerNamespace = xmlElement.getOnlyChildElement("innerNamespace"); + namespaceOfTextContent = innerNamespace.findNamespaceOfTextContent(); + + assertEquals("", namespaceOfTextContent.getKey()); + assertEquals("innerNamespace", namespaceOfTextContent.getValue()); + } + + @Test + public void testUnrecognisedElements() throws Exception { + xmlElement.checkUnrecognisedElements(xmlElement.getOnlyChildElement("inner"), xmlElement.getOnlyChildElement("innerPrefixed"), xmlElement.getOnlyChildElement("innerNamespace")); + + try { + xmlElement.checkUnrecognisedElements(xmlElement.getOnlyChildElement("inner")); + fail(); + } catch (final NetconfDocumentedException e) { + assertThat(e.getMessage(), both(containsString("innerNamespace")).and(containsString("innerNamespace"))); + } + } +}