From 8fbeb37b37d38ce783712c370f63edafe5bc8d7b Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Mon, 8 Sep 2014 17:24:23 +0200 Subject: [PATCH] BUG-1718 Fix hasAttributes method in XmlStreamUtils Change-Id: I5aefa3532f6b43ec746b4a1c1a11c9aa26820104 Signed-off-by: Maros Marsalek --- .../data/impl/codec/xml/XmlStreamUtils.java | 4 +- .../impl/codec/xml/XmlStreamUtilsTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java index 4527e75ef9..b60cf2bc19 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java @@ -147,7 +147,7 @@ public class XmlStreamUtils { if (isEmptyElement(data)) { if (hasAttributes(data)) { writer.writeStartElement(pfx, qname.getLocalName(), ns); - RandomPrefix randomPrefix = new RandomPrefix(); + final RandomPrefix randomPrefix = new RandomPrefix(); writeAttributes(writer, (AttributesContainer) data, randomPrefix); writer.writeEndElement(); } else { @@ -215,7 +215,7 @@ public class XmlStreamUtils { private static boolean hasAttributes(final Node data) { if (data instanceof AttributesContainer) { final Map c = ((AttributesContainer) data).getAttributes(); - return c == null || c.isEmpty(); + return c != null && !c.isEmpty(); } else { return false; } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtilsTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtilsTest.java index 479a47f106..6832748bda 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtilsTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtilsTest.java @@ -12,11 +12,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import com.google.common.base.Optional; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import java.io.ByteArrayOutputStream; +import java.io.File; import java.net.URI; import java.util.AbstractMap; +import java.util.Collections; import java.util.Map; import javax.xml.stream.XMLOutputFactory; @@ -27,6 +30,13 @@ import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.data.api.Node; +import org.opendaylight.yangtools.yang.data.api.SimpleNode; +import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; +import org.opendaylight.yangtools.yang.data.impl.NodeFactory; +import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; import org.w3c.dom.Document; public class XmlStreamUtilsTest { @@ -70,6 +80,34 @@ public class XmlStreamUtilsTest { assertTrue("Xml differs: " + diff.toString(), identical); } + @Test + public void testEmptyNodeWithAttribute() throws Exception { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final XMLStreamWriter writer = XML_OUTPUT_FACTORY.createXMLStreamWriter(out); + + final Map attrs = Maps.newHashMap(); + attrs.put(QName.create("namespaceAttr", "2012-12-12", "attr1"), "value"); + final QName qName = QName.create("urn:opendaylight:controller:rpc:test", "2014-07-28", "cont"); + final ImmutableCompositeNode dataAttributes = ImmutableCompositeNode.create(qName, attrs, Collections.>emptyList()); + XmlStreamUtils.create(XmlUtils.DEFAULT_XML_CODEC_PROVIDER).writeDocument(writer, dataAttributes); + + writer.close(); + out.close(); + + final String xmlAsString = new String(out.toByteArray()); + + // TODO why resulting xml does not have namespace definition ? If sending xml by e.g. netconf the namespace is there but not here in test + final String expectedXmlAsString = ""; + + XMLUnit.setIgnoreAttributeOrder(true); + final Document control = XMLUnit.buildControlDocument(expectedXmlAsString); + final Document test = XMLUnit.buildTestDocument(xmlAsString); + final Diff diff = XMLUnit.compareXML(control, test); + + final boolean identical = diff.identical(); + assertTrue("Xml differs: " + diff.toString(), identical); + } + private Map mapPrefixed(final Iterable> prefixes) { final Map mappedPrefixes = Maps.newHashMap(); for (final Map.Entry prefix : prefixes) { -- 2.36.6