2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.impl.schema;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import java.io.IOException;
14 import java.util.List;
16 import javax.xml.transform.dom.DOMSource;
17 import org.junit.jupiter.api.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.QNameModule;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
22 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
24 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
26 class ImmutableNormalizedNodeStreamWriterTest {
28 private QNameModule bazModule;
30 private QName outerContainer;
32 private QName myContainer1;
33 private QName myKeyedList;
34 private QName myKeyLeaf;
35 private QName myLeafInList1;
36 private QName myLeafInList2;
37 private QName myOrderedList;
38 private QName myKeyLeafInOrderedList;
39 private QName myLeafInOrderedList1;
40 private QName myLeafInOrderedList2;
41 private QName myUnkeyedList;
42 private QName myLeafInUnkeyedList;
43 private QName myLeaf1;
44 private QName myLeafList;
45 private QName myOrderedLeafList;
47 private QName myContainer2;
48 private QName innerContainer;
49 private QName myLeaf2;
50 private QName myLeaf3;
51 private QName myChoice;
52 private QName myLeafInCase2;
53 private QName myAnyxml;
55 private QName myContainer3;
56 private QName myDoublyKeyedList;
57 private QName myFirstKeyLeaf;
58 private QName mySecondKeyLeaf;
59 private QName myLeafInList3;
61 private DOMSource anyxmlDomSource;
64 void testImmutableNormalizedNodeStreamWriter() throws IOException {
65 bazModule = QNameModule.of("baz-namespace", "1970-01-01");
67 outerContainer = QName.create(bazModule, "outer-container");
69 myContainer1 = QName.create(bazModule, "my-container-1");
70 myKeyedList = QName.create(bazModule, "my-keyed-list");
71 myKeyLeaf = QName.create(bazModule, "my-key-leaf");
72 myLeafInList1 = QName.create(bazModule, "my-leaf-in-list-1");
73 myLeafInList2 = QName.create(bazModule, "my-leaf-in-list-2");
74 myOrderedList = QName.create(bazModule, "my-ordered-list");
75 myKeyLeafInOrderedList = QName.create(bazModule, "my-key-leaf-in-ordered-list");
76 myLeafInOrderedList1 = QName.create(bazModule, "my-leaf-in-ordered-list-1");
77 myLeafInOrderedList2 = QName.create(bazModule, "my-leaf-in-ordered-list-2");
78 myUnkeyedList = QName.create(bazModule, "my-unkeyed-list");
79 myLeafInUnkeyedList = QName.create(bazModule, "my-leaf-in-unkeyed-list");
80 myLeaf1 = QName.create(bazModule, "my-leaf-1");
81 myLeafList = QName.create(bazModule, "my-leaf-list");
82 myOrderedLeafList = QName.create(bazModule, "my-ordered-leaf-list");
84 myContainer2 = QName.create(bazModule, "my-container-2");
85 innerContainer = QName.create(bazModule, "inner-container");
86 myLeaf2 = QName.create(bazModule, "my-leaf-2");
87 myLeaf3 = QName.create(bazModule, "my-leaf-3");
88 myChoice = QName.create(bazModule, "my-choice");
89 myLeafInCase2 = QName.create(bazModule, "my-leaf-in-case-2");
90 myAnyxml = QName.create(bazModule, "my-anyxml");
92 myContainer3 = QName.create(bazModule, "my-container-3");
93 myDoublyKeyedList = QName.create(bazModule, "my-doubly-keyed-list");
94 myFirstKeyLeaf = QName.create(bazModule, "my-first-key-leaf");
95 mySecondKeyLeaf = QName.create(bazModule, "my-second-key-leaf");
96 myLeafInList3 = QName.create(bazModule, "my-leaf-in-list-3");
98 anyxmlDomSource = new DOMSource();
100 final var result = new NormalizationResultHolder();
101 final var immutableNormalizedNodeStreamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
102 final var normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(immutableNormalizedNodeStreamWriter);
103 normalizedNodeWriter.write(buildOuterContainerNode());
105 final var output = result.getResult().data();
106 assertNotNull(output);
108 final var expectedNormalizedNode = buildOuterContainerNode();
109 assertNotNull(expectedNormalizedNode);
111 assertEquals(expectedNormalizedNode, output);
114 private ContainerNode buildOuterContainerNode() {
115 return ImmutableNodes.newContainerBuilder()
116 .withNodeIdentifier(new NodeIdentifier(outerContainer))
117 .withChild(ImmutableNodes.newContainerBuilder()
118 .withNodeIdentifier(new NodeIdentifier(myContainer1))
119 .withChild(ImmutableNodes.newSystemMapBuilder()
120 .withNodeIdentifier(new NodeIdentifier(myKeyedList))
121 .withChild(ImmutableNodes.newMapEntryBuilder()
122 .withNodeIdentifier(NodeIdentifierWithPredicates.of(myKeyedList, myKeyLeaf, "listkeyvalue1"))
123 .withChild(ImmutableNodes.leafNode(myLeafInList1, "listleafvalue1"))
124 .withChild(ImmutableNodes.leafNode(myLeafInList2, "listleafvalue2"))
126 .withChild(ImmutableNodes.newMapEntryBuilder()
127 .withNodeIdentifier(NodeIdentifierWithPredicates.of(myKeyedList, myKeyLeaf, "listkeyvalue2"))
128 .withChild(ImmutableNodes.leafNode(myLeafInList1, "listleafvalue12"))
129 .withChild(ImmutableNodes.leafNode(myLeafInList2, "listleafvalue22"))
132 .withChild(ImmutableNodes.newUserMapBuilder()
133 .withNodeIdentifier(new NodeIdentifier(myOrderedList))
134 .withChild(ImmutableNodes.newMapEntryBuilder()
136 NodeIdentifierWithPredicates.of(myOrderedList, myKeyLeafInOrderedList, "olistkeyvalue1"))
137 .withChild(ImmutableNodes.leafNode(myLeafInOrderedList1, "olistleafvalue1"))
138 .withChild(ImmutableNodes.leafNode(myLeafInOrderedList2, "olistleafvalue2"))
140 .withChild(ImmutableNodes.newMapEntryBuilder()
142 NodeIdentifierWithPredicates.of(myOrderedList, myKeyLeafInOrderedList, "olistkeyvalue2"))
143 .withChild(ImmutableNodes.leafNode(myLeafInOrderedList1, "olistleafvalue12"))
144 .withChild(ImmutableNodes.leafNode(myLeafInOrderedList2, "olistleafvalue22"))
147 .withChild(ImmutableNodes.newUnkeyedListBuilder()
148 .withNodeIdentifier(new NodeIdentifier(myUnkeyedList))
149 .withValue(List.of(ImmutableNodes.newUnkeyedListEntryBuilder()
150 .withNodeIdentifier(new NodeIdentifier(myLeafInUnkeyedList))
151 .withChild(ImmutableNodes.leafNode(myLeafInUnkeyedList, "foo"))
154 .withChild(ImmutableNodes.leafNode(myLeaf1, "value1"))
155 .withChild(ImmutableNodes.newSystemLeafSetBuilder()
156 .withNodeIdentifier(new NodeIdentifier(myLeafList))
157 .withChild(ImmutableNodes.leafSetEntry(myLeafList, "lflvalue1"))
158 .withChild(ImmutableNodes.leafSetEntry(myLeafList, "lflvalue2"))
160 .withChild(ImmutableNodes.newUserLeafSetBuilder()
161 .withNodeIdentifier(new NodeIdentifier(myOrderedLeafList))
162 .withChild(ImmutableNodes.leafSetEntry(myOrderedLeafList, "olflvalue1"))
163 .withChild(ImmutableNodes.leafSetEntry(myOrderedLeafList, "olflvalue2"))
166 .withChild(ImmutableNodes.newContainerBuilder()
167 .withNodeIdentifier(new NodeIdentifier(myContainer2))
168 .withChild(ImmutableNodes.newContainerBuilder()
169 .withNodeIdentifier(new NodeIdentifier(innerContainer))
170 .withChild(ImmutableNodes.leafNode(myLeaf2, "value2"))
172 .withChild(ImmutableNodes.leafNode(myLeaf3, "value3"))
173 .withChild(ImmutableNodes.newChoiceBuilder()
174 .withNodeIdentifier(new NodeIdentifier(myChoice))
175 .withChild(ImmutableNodes.leafNode(myLeafInCase2, "case2value"))
177 .withChild(ImmutableNodes.newAnyxmlBuilder(DOMSource.class)
178 .withNodeIdentifier(new NodeIdentifier(myAnyxml))
179 .withValue(anyxmlDomSource)
182 .withChild(ImmutableNodes.newContainerBuilder()
183 .withNodeIdentifier(new NodeIdentifier(myContainer3))
184 .withChild(ImmutableNodes.newSystemMapBuilder()
185 .withNodeIdentifier(new NodeIdentifier(myDoublyKeyedList))
186 .withChild(ImmutableNodes.newMapEntryBuilder()
187 .withNodeIdentifier(NodeIdentifierWithPredicates.of(myDoublyKeyedList,
188 Map.of(myFirstKeyLeaf, "listkeyvalue1", mySecondKeyLeaf, "listkeyvalue2")))
189 .withChild(ImmutableNodes.leafNode(myLeafInList3, "listleafvalue1"))