X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=codec%2Fyang-data-codec-xml%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fcodec%2Fxml%2FBug5446Test.java;h=8f6cbbd617da2c13c2dbddd4b4a964f6e7a12a91;hb=b399395448bc45d411bd121331ce1510a2b92de1;hp=ba0c1c784505de7cb57480d82b5e1e1c5d6a632d;hpb=c2bf3bfa3ee962ed854c8d48fc9796472fc56461;p=yangtools.git diff --git a/codec/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java b/codec/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java index ba0c1c7845..8f6cbbd617 100644 --- a/codec/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java +++ b/codec/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java @@ -7,59 +7,74 @@ */ package org.opendaylight.yangtools.yang.data.codec.xml; -import static java.util.Objects.requireNonNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; import java.util.Base64; import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.custommonkey.xmlunit.XMLTestCase; -import org.custommonkey.xmlunit.XMLUnit; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; +import org.xmlunit.builder.DiffBuilder; -public class Bug5446Test extends XMLTestCase { - private static final QNameModule FOO_MODULE = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2015-11-05")); - private static final QName ROOT_QNAME = QName.create(FOO_MODULE, "root"); - private static final QName IP_ADDRESS_QNAME = QName.create(FOO_MODULE, "ip-address"); +class Bug5446Test extends AbstractXmlTest { + private static final QName ROOT_QNAME = QName.create("foo", "2015-11-05", "root"); + private static final QName IP_ADDRESS_QNAME = QName.create(ROOT_QNAME, "ip-address"); @Test - public void test() throws Exception { - final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug5446/yang/foo.yang"); - final Document doc = loadDocument("/bug5446/xml/foo.xml"); - - final ContainerNode docNode = createDocNode(); - - DataContainerChild root = docNode.childByArg(new NodeIdentifier(ROOT_QNAME)); - DataContainerChild child = ((ContainerNode) root).childByArg(new NodeIdentifier(IP_ADDRESS_QNAME)); + void test() throws Exception { + final EffectiveModelContext schemaContext = YangParserTestUtils.parseYang(""" + module foo { + yang-version 1; + namespace "foo"; + prefix "foo"; + + revision "2015-11-05" { + } + + typedef ipv4-address-binary { + type binary { + length "4"; + } + } + + typedef ipv6-address-binary { + type binary { + length "16"; + } + } + + typedef ip-address-binary { + type union { + type ipv4-address-binary; + type ipv6-address-binary; + } + } + + container root { + leaf ip-address { + type ip-address-binary; + } + } + }"""); + final var doc = loadDocument("/bug5446/xml/foo.xml"); + + final var docNode = createDocNode(); + + DataContainerChild root = docNode.getChildByArg(new NodeIdentifier(ROOT_QNAME)); + DataContainerChild child = ((ContainerNode) root).getChildByArg(new NodeIdentifier(IP_ADDRESS_QNAME)); LeafNode ipAdress = (LeafNode) child; Object value = ipAdress.body(); @@ -69,81 +84,39 @@ public class Bug5446Test extends XMLTestCase { DOMResult serializationResult = writeNormalizedNode(docNode, schemaContext); assertNotNull(serializationResult); - XMLUnit.setIgnoreWhitespace(true); - XMLUnit.setIgnoreComments(true); - XMLUnit.setIgnoreAttributeOrder(true); - XMLUnit.setNormalize(true); - - String expectedXMLString = toString(doc.getDocumentElement()); - String serializationResultXMLString = toString(serializationResult.getNode()); - - assertXMLEqual(expectedXMLString, serializationResultXMLString); + final var diff = DiffBuilder.compare(toString(doc.getDocumentElement())) + .withTest(toString(serializationResult.getNode())) + .ignoreWhitespace() + .ignoreComments() + .checkForIdentical() + .build(); + assertFalse(diff.hasDifferences(), diff.toString()); } private static ContainerNode createDocNode() { - LeafNode ipAddress = ImmutableNodes.leafNode(IP_ADDRESS_QNAME, Base64.getDecoder().decode("fwAAAQ==")); - ContainerNode root = ImmutableContainerNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(ROOT_QNAME)) - .withChild(ipAddress).build(); - return ImmutableContainerNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(ROOT_QNAME)).withChild(root) - .build(); + return ImmutableNodes.newContainerBuilder() + .withNodeIdentifier(new NodeIdentifier(ROOT_QNAME)) + .withChild(ImmutableNodes.newContainerBuilder() + .withNodeIdentifier(new NodeIdentifier(ROOT_QNAME)) + .withChild(ImmutableNodes.leafNode(IP_ADDRESS_QNAME, Base64.getDecoder().decode("fwAAAQ=="))) + .build()) + .build(); } private static DOMResult writeNormalizedNode(final ContainerNode normalized, final EffectiveModelContext context) throws IOException, XMLStreamException { - final Document doc = UntrustedXML.newDocumentBuilder().newDocument(); - final DOMResult result = new DOMResult(doc); - NormalizedNodeWriter normalizedNodeWriter = null; - NormalizedNodeStreamWriter normalizedNodeStreamWriter = null; - XMLStreamWriter writer = null; - try { - writer = TestFactories.DEFAULT_OUTPUT_FACTORY.createXMLStreamWriter(result); - normalizedNodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(writer, context); - normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(normalizedNodeStreamWriter); - - for (NormalizedNode child : normalized.body()) { - normalizedNodeWriter.write(child); + final var doc = UntrustedXML.newDocumentBuilder().newDocument(); + final var result = new DOMResult(doc); + final var writer = TestFactories.DEFAULT_OUTPUT_FACTORY.createXMLStreamWriter(result); + try (var nnWriter = NormalizedNodeWriter.forStreamWriter( + XMLStreamNormalizedNodeStreamWriter.create(writer, context))) { + for (var child : normalized.body()) { + nnWriter.write(child); } - - normalizedNodeWriter.flush(); + nnWriter.flush(); } finally { - if (normalizedNodeWriter != null) { - normalizedNodeWriter.close(); - } - if (normalizedNodeStreamWriter != null) { - normalizedNodeStreamWriter.close(); - } - if (writer != null) { - writer.close(); - } + writer.close(); } - return result; } - - private static Document loadDocument(final String xmlPath) throws IOException, SAXException { - final InputStream resourceAsStream = Bug5446Test.class.getResourceAsStream(xmlPath); - return requireNonNull(readXmlToDocument(resourceAsStream)); - } - - private static Document readXmlToDocument(final InputStream xmlContent) throws IOException, SAXException { - final Document doc = UntrustedXML.newDocumentBuilder().parse(xmlContent); - doc.getDocumentElement().normalize(); - return doc; - } - - private static String toString(final Node xml) { - try { - final Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - - final StreamResult result = new StreamResult(new StringWriter()); - final DOMSource source = new DOMSource(xml); - transformer.transform(source, result); - - return result.getWriter().toString(); - } catch (IllegalArgumentException | TransformerFactoryConfigurationError | TransformerException e) { - throw new RuntimeException("Unable to serialize xml element " + xml, e); - } - } }