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
9 package org.opendaylight.yangtools.yang.data.impl.schema;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertThrows;
15 import static org.mockito.Mockito.mock;
18 import java.net.URISyntaxException;
19 import java.util.HashMap;
20 import java.util.LinkedList;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.opendaylight.yangtools.util.UnmodifiableCollection;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
28 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
29 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
34 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
35 import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode;
36 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
37 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
38 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
39 import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode;
40 import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode;
41 import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder;
42 import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder;
43 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
44 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
45 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
46 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeSchemaAwareBuilder;
47 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeBuilder;
48 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeSchemaAwareBuilder;
49 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
50 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeSchemaAwareBuilder;
51 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
52 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
53 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeSchemaAwareBuilder;
54 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
55 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder;
56 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserLeafSetNodeBuilder;
57 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserLeafSetNodeSchemaAwareBuilder;
58 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeBuilder;
59 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeSchemaAwareBuilder;
60 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
61 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
62 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
63 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
64 import org.opendaylight.yangtools.yang.model.api.Module;
65 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
66 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
68 public class BuilderTest {
69 private static final QName ROOT_CONTAINER = QName.create("test.namespace.builder.test", "2016-01-01",
71 private static final QName LIST_MAIN = QName.create(ROOT_CONTAINER, "list-ordered-by-user-with-key");
72 private static final QName LEAF_LIST_MAIN = QName.create(ROOT_CONTAINER, "leaf-list-ordered-by-user");
73 private static final QName LIST_MAIN_CHILD_QNAME_1 = QName.create(ROOT_CONTAINER, "leaf-a");
74 private static final NodeIdentifier NODE_IDENTIFIER_LIST = NodeIdentifier.create(LIST_MAIN);
75 private static final NodeIdentifier NODE_IDENTIFIER_LEAF_LIST = NodeIdentifier.create(LEAF_LIST_MAIN);
76 private static final NodeIdentifier NODE_IDENTIFIER_LEAF = NodeIdentifier.create(LIST_MAIN_CHILD_QNAME_1);
77 private static final MapEntryNode LIST_MAIN_CHILD_1 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
79 private static final MapEntryNode LIST_MAIN_CHILD_2 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
81 private static final MapEntryNode LIST_MAIN_CHILD_3 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
83 private static final int SIZE = 3;
84 private static final NodeWithValue<String> BAR_PATH = new NodeWithValue<>(LEAF_LIST_MAIN, "bar");
85 private static final LeafSetEntryNode<String> LEAF_SET_ENTRY_NODE =
86 ImmutableLeafSetEntryNodeBuilder.<String>create()
87 .withNodeIdentifier(BAR_PATH)
90 private ListSchemaNode list;
91 private LeafListSchemaNode leafList;
94 public void setup() throws URISyntaxException {
95 final File leafRefTestYang = new File(getClass().getResource("/builder-test/immutable-ordered-map-node.yang")
97 final SchemaContext schema = YangParserTestUtils.parseYangFiles(leafRefTestYang);
98 final Module module = schema.getModules().iterator().next();
99 final DataSchemaNode root = module.findDataChildByName(ROOT_CONTAINER).get();
100 list = (ListSchemaNode)((ContainerSchemaNode) root).findDataChildByName(LIST_MAIN).get();
101 leafList = (LeafListSchemaNode)((ContainerSchemaNode) root).findDataChildByName(LEAF_LIST_MAIN).get();
105 public void immutableOrderedMapBuilderTest() {
106 final LinkedList<MapEntryNode> mapEntryNodeColl = new LinkedList<>();
107 mapEntryNodeColl.add(LIST_MAIN_CHILD_3);
108 final Map<QName, Object> keys = new HashMap<>();
109 keys.put(LIST_MAIN_CHILD_QNAME_1, 1);
110 final NodeIdentifierWithPredicates mapEntryPath = NodeIdentifierWithPredicates.of(LIST_MAIN, keys);
111 final UserMapNode orderedMapNodeCreateNull = ImmutableUserMapNodeBuilder.create()
112 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
113 .withChild(LIST_MAIN_CHILD_1)
114 .addChild(LIST_MAIN_CHILD_2)
115 .withValue(mapEntryNodeColl)
117 final UserMapNode orderedMapNodeCreateSize = ImmutableUserMapNodeBuilder.create(SIZE)
118 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
120 final UserMapNode orderedMapNodeCreateNode = ImmutableUserMapNodeBuilder.create(orderedMapNodeCreateNull)
121 .removeChild(mapEntryPath)
123 final UserMapNode orderedMapNodeSchemaAware = ImmutableUserMapNodeSchemaAwareBuilder.create(list)
124 .withChild(LIST_MAIN_CHILD_1)
126 final UserMapNode orderedMapNodeSchemaAwareMapNodeConst = ImmutableUserMapNodeSchemaAwareBuilder.create(
127 list, getImmutableUserMapNode())
130 assertNotNull(Builders.orderedMapBuilder(list));
131 assertEquals(SIZE, orderedMapNodeCreateNull.size());
132 assertEquals(orderedMapNodeCreateNode.size(), orderedMapNodeCreateNull.size() - 1);
133 assertEquals(NODE_IDENTIFIER_LIST, orderedMapNodeCreateSize.getIdentifier());
134 assertEquals(LIST_MAIN_CHILD_1, orderedMapNodeCreateNull.childAt(0));
135 assertEquals(SIZE, orderedMapNodeCreateNull.size());
136 assertEquals(orderedMapNodeSchemaAware.childAt(0), orderedMapNodeSchemaAwareMapNodeConst.childAt(0));
140 public void immutableUserLeafSetNodeBuilderTest() {
141 final UserLeafSetNode<String> orderedLeafSet = ImmutableUserLeafSetNodeBuilder.<String>create()
142 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
143 .withChild(LEAF_SET_ENTRY_NODE)
144 .withChildValue("baz")
145 .removeChild(BAR_PATH)
147 final LinkedList<LeafSetNode<?>> mapEntryNodeColl = new LinkedList<>();
148 mapEntryNodeColl.add(orderedLeafSet);
149 final UnmodifiableCollection<?> leafSetCollection = (UnmodifiableCollection<?>)orderedLeafSet.body();
150 final NormalizedNode orderedMapNodeSchemaAware = ImmutableUserLeafSetNodeSchemaAwareBuilder.create(
151 leafList).withChildValue("baz").build();
152 final UnmodifiableCollection<?> SchemaAwareleafSetCollection =
153 (UnmodifiableCollection<?>) orderedMapNodeSchemaAware.body();
154 final NormalizedNode orderedLeafSetShemaAware = ImmutableUserLeafSetNodeSchemaAwareBuilder.create(
155 leafList, (UserLeafSetNode<?>) orderedLeafSet).build();
157 assertNotNull(Builders.orderedLeafSetBuilder(leafList));
158 assertNotNull(Builders.anyXmlBuilder());
159 assertNotNull(orderedLeafSetShemaAware);
160 assertEquals(1, ((UserLeafSetNode<?>)orderedLeafSet).size());
161 assertEquals("baz", orderedLeafSet.childAt(0).body());
162 assertNull(orderedLeafSet.childByArg(BAR_PATH));
163 assertEquals(1, leafSetCollection.size());
164 assertEquals(1, SchemaAwareleafSetCollection.size());
168 public void immutableMapNodeBuilderTest() {
169 final LinkedList<MapEntryNode> mapEntryNodeColl = new LinkedList<>();
170 mapEntryNodeColl.add(LIST_MAIN_CHILD_3);
171 final CollectionNodeBuilder<MapEntryNode, SystemMapNode> collectionNodeBuilder =
172 ImmutableMapNodeBuilder.create(1);
173 assertNotNull(collectionNodeBuilder);
174 collectionNodeBuilder.withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST);
175 collectionNodeBuilder.withValue(mapEntryNodeColl);
176 final SystemMapNode mapNode = collectionNodeBuilder.build();
177 final SystemMapNode mapNodeSchemaAware = ImmutableMapNodeSchemaAwareBuilder.create(list,
178 getImmutableMapNode()).build();
179 assertNotNull(mapNodeSchemaAware);
180 assertNotNull(Builders.mapBuilder(mapNode));
184 public void immutableUnkeyedListEntryNodeBuilderTest() {
185 final UnkeyedListEntryNode unkeyedListEntryNode = ImmutableUnkeyedListEntryNodeBuilder.create()
186 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
188 final UnkeyedListEntryNode unkeyedListEntryNodeSize = ImmutableUnkeyedListEntryNodeBuilder.create(1)
189 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
191 final UnkeyedListEntryNode unkeyedListEntryNodeNode = ImmutableUnkeyedListEntryNodeBuilder
192 .create(unkeyedListEntryNode).build();
193 assertEquals(unkeyedListEntryNode.getNodeType().getLocalName(), unkeyedListEntryNodeSize.getNodeType()
195 assertEquals(unkeyedListEntryNodeSize.getNodeType().getLocalName(), unkeyedListEntryNodeNode.getNodeType()
200 public void immutableUnkeyedListNodeBuilderTest() {
201 final UnkeyedListEntryNode unkeyedListEntryNode = ImmutableUnkeyedListEntryNodeBuilder.create()
202 .withNodeIdentifier(NODE_IDENTIFIER_LEAF)
204 final ImmutableUnkeyedListNodeBuilder immutableUnkeyedListNodeBuilder = (ImmutableUnkeyedListNodeBuilder)
205 ImmutableUnkeyedListNodeBuilder.create();
206 final UnkeyedListNode unkeyedListNode = immutableUnkeyedListNodeBuilder
207 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
208 .addChild(unkeyedListEntryNode)
210 final UnkeyedListNode unkeyedListNodeSize = ImmutableUnkeyedListNodeBuilder.create(1)
211 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
213 final UnkeyedListNode unkeyedListNodeCreated = ImmutableUnkeyedListNodeBuilder.create(unkeyedListNode)
216 assertThrows(IndexOutOfBoundsException.class, () -> unkeyedListNodeSize.childAt(1));
218 assertNotNull(unkeyedListNodeSize.body());
219 assertEquals(unkeyedListEntryNode, unkeyedListNodeCreated.childAt(0));
220 assertEquals(unkeyedListNode.getNodeType().getLocalName(), unkeyedListNodeSize.getNodeType().getLocalName());
221 assertNotNull(unkeyedListNodeCreated);
225 public void immutableChoiceNodeBuilderTest() {
226 final ChoiceNode choiceNode = ImmutableChoiceNodeBuilder.create(1).withNodeIdentifier(NODE_IDENTIFIER_LIST)
228 final ChoiceNode choiceNodeCreated = ImmutableChoiceNodeBuilder.create(choiceNode).build();
229 assertEquals(choiceNodeCreated.getIdentifier(), choiceNode.getIdentifier());
233 @Test(expected = NullPointerException.class)
234 public void immutableAugmentationNodeBuilderExceptionTest() {
235 ImmutableAugmentationNodeBuilder.create(1).build();
238 @Test(expected = NullPointerException.class)
239 public void immutableContainerNodeBuilderExceptionTest() {
240 final ContainerNode immutableContainerNode = ImmutableContainerNodeBuilder.create(1)
241 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
243 assertNotNull(immutableContainerNode);
244 final ContainerSchemaNode containerSchemaNode = mock(ContainerSchemaNode.class);
245 ImmutableContainerNodeSchemaAwareBuilder.create(containerSchemaNode, immutableContainerNode)
246 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
250 @Test(expected = NullPointerException.class)
251 public void immutableLeafSetNodeBuilderExceptionTest() {
252 final SystemLeafSetNode<Object> leafSetNode = ImmutableLeafSetNodeBuilder.create(1)
253 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST).build();
254 assertNotNull(leafSetNode);
255 ImmutableLeafSetNodeSchemaAwareBuilder.create(mock(LeafListSchemaNode.class), leafSetNode).build();
258 @Test(expected = UnsupportedOperationException.class)
259 public void immutableLeafSetEntryNodeSchemaAwareBuilderExceptionTest() {
260 final LeafListSchemaNode leafListSchemaNode = mock(LeafListSchemaNode.class);
261 ImmutableLeafSetEntryNodeSchemaAwareBuilder.create(leafListSchemaNode).withNodeIdentifier(BAR_PATH).build();
264 @Test(expected = NullPointerException.class)
265 public void immutableMapEntryNodeBuilderExceptionTest() {
266 ImmutableMapEntryNodeBuilder.create(1).build();
269 @Test(expected = UnsupportedOperationException.class)
270 public void immutableUnkeyedListNodeBuilderExceptionTest() {
271 ImmutableUnkeyedListNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LEAF)
272 .removeChild(NODE_IDENTIFIER_LIST).build();
275 @Test(expected = UnsupportedOperationException.class)
276 public void immutableMapNodeSchemaAwareExceptionTest() {
277 ImmutableMapNodeSchemaAwareBuilder.create(list, getImmutableMapNode()).withNodeIdentifier(NODE_IDENTIFIER_LIST)
281 @Test(expected = UnsupportedOperationException.class)
282 public void immutableOrderedMapSchemaAwareExceptionTest1() {
283 ImmutableUserMapNodeSchemaAwareBuilder.create(list).withNodeIdentifier(NODE_IDENTIFIER_LIST).build();
286 @Test(expected = UnsupportedOperationException.class)
287 public void immutableUserLeafSetNodeSchemaAwareExceptionTest1() {
288 ImmutableUserLeafSetNodeSchemaAwareBuilder.create(leafList).withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
292 private static SystemLeafSetNode<String> getImmutableLeafSetNode() {
293 final ListNodeBuilder<String, SystemLeafSetNode<String>> leafSetBuilder = Builders.leafSetBuilder();
294 leafSetBuilder.withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST);
295 leafSetBuilder.addChild(LEAF_SET_ENTRY_NODE);
296 return leafSetBuilder.build();
299 private static SystemMapNode getImmutableMapNode() {
300 return ImmutableMapNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LIST).withChild(LIST_MAIN_CHILD_1)
304 private static UserMapNode getImmutableUserMapNode() {
305 return ImmutableUserMapNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LIST)
306 .withChild(LIST_MAIN_CHILD_1).build();