X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fcodec%2Fxml%2FXmlStreamUtilsTest.java;h=3b436236040f90beda2ddbf2875e4b88bca2a224;hb=e173f129d7d4a64fa711665fadf203cdffc2d355;hp=be321e526508a824e210fb7edebe037e0f9aeea4;hpb=774cfc9c95b20bad92b33a6398793c940f1339a2;p=yangtools.git 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 be321e5265..3b43623604 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 @@ -8,10 +8,11 @@ package org.opendaylight.yangtools.yang.data.impl.codec.xml; +import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; - import com.google.common.base.Optional; import com.google.common.collect.Maps; import java.io.ByteArrayOutputStream; @@ -19,9 +20,11 @@ import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.AbstractMap; -import java.util.Arrays; import java.util.Collections; +import java.util.Date; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamWriter; import org.custommonkey.xmlunit.Diff; @@ -31,18 +34,16 @@ import org.junit.Ignore; 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.impl.ImmutableCompositeNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; -import org.opendaylight.yangtools.yang.model.util.StringType; import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; import org.w3c.dom.Document; @@ -57,7 +58,7 @@ public class XmlStreamUtilsTest { public static void initialize() throws URISyntaxException { final YangParserImpl yangParser = new YangParserImpl(); final File file = new File(XmlStreamUtils.class.getResource("/leafref-test.yang").toURI()); - schemaContext = yangParser.parseFiles(Arrays.asList(file)); + schemaContext = yangParser.parseFiles(Collections.singletonList(file)); assertNotNull(schemaContext); assertEquals(1,schemaContext.getModules().size()); leafRefModule = schemaContext.getModules().iterator().next(); @@ -102,22 +103,47 @@ public class XmlStreamUtilsTest { assertTrue("Xml differs: " + diff.toString(), identical); } + @Test + public void testWriteIdentityRef() throws Exception { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final XMLStreamWriter writer = XML_OUTPUT_FACTORY.createXMLStreamWriter(out); + + writer.writeStartElement("element"); + final QNameModule parent = QNameModule.create(URI.create("parent:uri"), new Date()); + XmlStreamUtils.write(writer, null, QName.create(parent, "identity"), Optional.of(parent)); + writer.writeEndElement(); + + writer.writeStartElement("elementDifferent"); + XmlStreamUtils.write(writer, null, QName.create("different:namespace", "identity"), Optional.of(parent)); + writer.writeEndElement(); + + writer.close(); + out.close(); + + final String xmlAsString = new String(out.toByteArray()).replaceAll("\\s*", ""); + assertThat(xmlAsString, containsString("element>identity")); + + final Pattern prefixedIdentityPattern = Pattern.compile(".*\"different:namespace\">(.*):identity.*"); + final Matcher matcher = prefixedIdentityPattern.matcher(xmlAsString); + assertTrue("Xml: " + xmlAsString + " should match: " + prefixedIdentityPattern, matcher.matches()); + } + /** * One leafref reference to other leafref via relative references */ @Test public void testLeafRefRelativeChaining() { - getTargetNodeForLeafRef("leafname3",StringType.class); + getTargetNodeForLeafRef("leafname3", StringTypeDefinition.class); } @Test public void testLeafRefRelative() { - getTargetNodeForLeafRef("pointToStringLeaf",StringType.class); + getTargetNodeForLeafRef("pointToStringLeaf", StringTypeDefinition.class); } @Test public void testLeafRefAbsoluteWithSameTarget() { - getTargetNodeForLeafRef("absname",InstanceIdentifierType.class); + getTargetNodeForLeafRef("absname", InstanceIdentifierTypeDefinition.class); } /** @@ -126,13 +152,15 @@ public class XmlStreamUtilsTest { @Ignore //ignored because this isn't implemented @Test public void testLeafRefWithDoublePointInPath() { - getTargetNodeForLeafRef("lf-with-double-point-inside",StringType.class); + getTargetNodeForLeafRef("lf-with-double-point-inside", StringTypeDefinition.class); } @Test public void testLeafRefRelativeAndAbsoluteWithSameTarget() { - final TypeDefinition targetNodeForAbsname = getTargetNodeForLeafRef("absname",InstanceIdentifierType.class); - final TypeDefinition targetNodeForRelname = getTargetNodeForLeafRef("relname",InstanceIdentifierType.class); + final TypeDefinition targetNodeForAbsname = getTargetNodeForLeafRef("absname", + InstanceIdentifierTypeDefinition.class); + final TypeDefinition targetNodeForRelname = getTargetNodeForLeafRef("relname", + InstanceIdentifierTypeDefinition.class); assertEquals(targetNodeForAbsname, targetNodeForRelname); } @@ -142,39 +170,11 @@ public class XmlStreamUtilsTest { final LeafrefTypeDefinition leafrefTypedef = findLeafrefType(schemaNode); assertNotNull(leafrefTypedef); final TypeDefinition targetBaseType = SchemaContextUtil.getBaseTypeForLeafRef(leafrefTypedef, schemaContext, schemaNode); - assertEquals("Wrong class found.", clas, targetBaseType.getClass()); + assertTrue("Wrong class found.", clas.isInstance(targetBaseType)); return targetBaseType; } - @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) { + private static Map mapPrefixed(final Iterable> prefixes) { final Map mappedPrefixes = Maps.newHashMap(); for (final Map.Entry prefix : prefixes) { mappedPrefixes.put(prefix.getKey().toString(), prefix.getValue()); @@ -182,9 +182,8 @@ public class XmlStreamUtilsTest { return mappedPrefixes; } - private QName getAttrQName(final String namespace, final String revision, final String localName, final Optional prefix) { - - if(prefix.isPresent()) { + private static QName getAttrQName(final String namespace, final String revision, final String localName, final Optional prefix) { + if (prefix.isPresent()) { final QName moduleQName = QName.create(namespace, revision, "module"); final QNameModule module = QNameModule.create(moduleQName.getNamespace(), moduleQName.getRevision()); return QName.create(module, localName); @@ -210,7 +209,7 @@ public class XmlStreamUtilsTest { return null; } - private LeafrefTypeDefinition findLeafrefType(final LeafSchemaNode schemaNode) { + private static LeafrefTypeDefinition findLeafrefType(final LeafSchemaNode schemaNode) { final TypeDefinition type = schemaNode.getType(); if (type instanceof LeafrefTypeDefinition) { return (LeafrefTypeDefinition)type;