Migrate users of deprecated QNameModule methods
[yangtools.git] / codec / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / Bug5446Test.java
index ba0c1c784505de7cb57480d82b5e1e1c5d6a632d..8f6cbbd617da2c13c2dbddd4b4a964f6e7a12a91 100644 (file)
@@ -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<byte[]> 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);
-        }
-    }
 }