BUG-457 Fix TODOs and FIXMEs in yang-data-impl schema package.
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / transform / dom / serializer / NormalizedNodeXmlTranslationTest.java
index a22993225bb1eceb3eafd08a654c7dd7e5714ab3..5154f773c20fd055781a6792d2c93e8535c4d5dc 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -31,20 +32,28 @@ import javax.xml.transform.TransformerFactoryConfigurationError;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import org.junit.Assert;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedDataBuilderTest;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.NodeSerializerDispatcher;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils;
-import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.ContainerNodeDomParser;
+import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.DomToNormalizedNodeParserFactory;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -59,6 +68,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 @RunWith(Parameterized.class)
@@ -71,10 +81,13 @@ public class NormalizedNodeXmlTranslationTest {
                 {"augment_choice_hell.yang", "augment_choice_hell_ok.xml", augmentChoiceHell()},
                 {"augment_choice_hell.yang", "augment_choice_hell_ok2.xml", null},
                 {"test.yang", "simple.xml", null},
-                {"test.yang", "simple2.xml", null}
+                {"test.yang", "simple2.xml", null},
+                // TODO check attributes
+                {"test.yang", "simple_xml_with_attributes.xml", withAttributes()}
         });
     }
 
+
     public static final String NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:test";
     private static Date revision;
     static {
@@ -85,6 +98,47 @@ public class NormalizedNodeXmlTranslationTest {
         }
     }
 
+    private static ContainerNode withAttributes() {
+        DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
+        b.withNodeIdentifier(getNodeIdentifier("container"));
+
+        CollectionNodeBuilder<MapEntryNode, MapNode> listBuilder = Builders.mapBuilder().withNodeIdentifier(
+                getNodeIdentifier("list"));
+
+        Map<QName, Object> predicates = Maps.newHashMap();
+        predicates.put(getNodeIdentifier("uint32InList").getNodeType(), 3L);
+
+        DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> list1Builder = Builders
+                .mapEntryBuilder().withNodeIdentifier(
+                        new InstanceIdentifier.NodeIdentifierWithPredicates(getNodeIdentifier("list").getNodeType(),
+                                predicates));
+        NormalizedNodeBuilder<InstanceIdentifier.NodeIdentifier,Object,LeafNode<Object>> uint32InListBuilder
+                = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("uint32InList"));
+
+        list1Builder.withChild(uint32InListBuilder.withValue(3L).build());
+
+        listBuilder.withChild(list1Builder.build());
+        b.withChild(listBuilder.build());
+
+        NormalizedNodeBuilder<InstanceIdentifier.NodeIdentifier, Object, LeafNode<Object>> booleanBuilder
+                = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("boolean"));
+        booleanBuilder.withValue(false);
+        b.withChild(booleanBuilder.build());
+
+        ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafListBuilder
+                = Builders.leafSetBuilder().withNodeIdentifier(getNodeIdentifier("leafList"));
+
+        NormalizedNodeBuilder<InstanceIdentifier.NodeWithValue, Object, LeafSetEntryNode<Object>> leafList1Builder
+                = Builders.leafSetEntryBuilder().withNodeIdentifier(new InstanceIdentifier.NodeWithValue(getNodeIdentifier("leafList").getNodeType(), "a"));
+
+        leafList1Builder.withValue("a");
+
+        leafListBuilder.withChild(leafList1Builder.build());
+        b.withChild(leafListBuilder.build());
+
+        return b.build();
+    }
+
     private static ContainerNode augmentChoiceHell() {
 
         DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
@@ -143,11 +197,11 @@ public class NormalizedNodeXmlTranslationTest {
             qn.add(getNodeIdentifier(childName).getNodeType());
         }
 
-        return new InstanceIdentifier.AugmentationIdentifier(null, qn);
+        return new InstanceIdentifier.AugmentationIdentifier(qn);
     }
 
     public NormalizedNodeXmlTranslationTest(String yangPath, String xmlPath, ContainerNode expectedNode) {
-        this.schema = parseTestSchema(yangPath);
+        SchemaContext schema = parseTestSchema(yangPath);
         this.xmlPath = xmlPath;
         this.containerNode = (ContainerSchemaNode) NormalizedDataBuilderTest.getSchemaNode(schema, "test", "container");
         this.expectedNode = expectedNode;
@@ -155,7 +209,6 @@ public class NormalizedNodeXmlTranslationTest {
 
     private final ContainerNode expectedNode;
     private final ContainerSchemaNode containerNode;
-    private final SchemaContext schema;
     private final String xmlPath;
 
 
@@ -182,7 +235,8 @@ public class NormalizedNodeXmlTranslationTest {
     public void testTranslation() throws Exception {
         Document doc = loadDocument(xmlPath);
 
-        ContainerNode built = new ContainerNodeDomParser(DomUtils.defaultValueCodecProvider()).parse(
+        ContainerNode built =
+                DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider()).getContainerNodeParser().parse(
                 Collections.singletonList(doc.getDocumentElement()), containerNode);
 
         if (expectedNode != null)
@@ -190,18 +244,19 @@ public class NormalizedNodeXmlTranslationTest {
 
         logger.info("{}", built);
 
-        final Document newDoc = XmlDocumentUtils.getDocument();
-        final NodeSerializerDispatcher<Element> dispatcher = new DomNodeSerializerDispatcher(newDoc, DomUtils.defaultValueCodecProvider());
-
-        Iterable<Element> els = new ContainerNodeDomSerializer(newDoc,
-                dispatcher).serialize(containerNode, built);
+        Iterable<Element> els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider())
+                .getContainerNodeSerializer().serialize(containerNode, built);
 
         Element el = els.iterator().next();
 
-        Assert.assertEquals(toString(doc.getDocumentElement()).replaceAll("\\s*", ""),
-                toString(el).replaceAll("\\s*", ""));
-    }
+        XMLUnit.setIgnoreWhitespace(true);
+        XMLUnit.setIgnoreComments(true);
 
+        System.err.println(toString(doc.getDocumentElement()));
+        System.err.println(toString(el));
+
+        boolean diff = new Diff(XMLUnit.buildControlDocument(toString(doc.getDocumentElement())), XMLUnit.buildTestDocument(toString(el))).similar();
+    }
 
     private Document loadDocument(String xmlPath) throws Exception {
         InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(xmlPath);