Fix raw type warning
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / BuilderTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.yangtools.yang.data.impl.schema;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.mockito.Mockito.mock;
14
15 import java.io.File;
16 import java.io.FileNotFoundException;
17 import java.net.URISyntaxException;
18 import java.util.HashMap;
19 import java.util.LinkedList;
20 import java.util.Map;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.yangtools.util.UnmodifiableCollection;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
28 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
34 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
35 import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode;
36 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
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.impl.schema.builder.api.CollectionNodeBuilder;
40 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
41 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
42 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
43 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
44 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeSchemaAwareBuilder;
45 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeBuilder;
46 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeSchemaAwareBuilder;
47 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
48 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeSchemaAwareBuilder;
49 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
50 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
51 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeSchemaAwareBuilder;
52 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder;
53 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeSchemaAwareBuilder;
54 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder;
55 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeSchemaAwareBuilder;
56 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
57 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder;
58 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableYangModeledAnyXmlNodeBuilder;
59 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
60 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
61 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
62 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
63 import org.opendaylight.yangtools.yang.model.api.Module;
64 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
65 import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode;
66 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
67 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl;
68 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
69
70 public class BuilderTest {
71     private static final QName ROOT_CONTAINER = QName.create("test.namespace.builder.test", "2016-01-01",
72         "root-container");
73     private static final QName LIST_MAIN = QName.create(ROOT_CONTAINER, "list-ordered-by-user-with-key");
74     private static final QName LEAF_LIST_MAIN = QName.create(ROOT_CONTAINER, "leaf-list-ordered-by-user");
75     private static final QName LIST_MAIN_CHILD_QNAME_1 = QName.create(ROOT_CONTAINER, "leaf-a");
76     private static final NodeIdentifier NODE_IDENTIFIER_LIST = NodeIdentifier.create(LIST_MAIN);
77     private static final NodeIdentifier NODE_IDENTIFIER_LEAF_LIST = NodeIdentifier.create(LEAF_LIST_MAIN);
78     private static final NodeIdentifier NODE_IDENTIFIER_LEAF = NodeIdentifier.create(LIST_MAIN_CHILD_QNAME_1);
79     private static final MapEntryNode LIST_MAIN_CHILD_1 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
80             1);
81     private static final MapEntryNode LIST_MAIN_CHILD_2 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
82             2);
83     private static final MapEntryNode LIST_MAIN_CHILD_3 = ImmutableNodes.mapEntry(LIST_MAIN, LIST_MAIN_CHILD_QNAME_1,
84             3);
85     private static final int SIZE = 3;
86     private static final NodeWithValue<String> BAR_PATH = new NodeWithValue<>(LEAF_LIST_MAIN, "bar");
87     private static final LeafSetEntryNode<String> LEAF_SET_ENTRY_NODE =
88             ImmutableLeafSetEntryNodeBuilder.<String>create()
89             .withNodeIdentifier(BAR_PATH)
90             .withValue("bar")
91             .build();
92     private ListSchemaNode list;
93     private LeafListSchemaNode leafList;
94
95     @Before
96     public void setup() throws FileNotFoundException, ReactorException, URISyntaxException {
97         final File leafRefTestYang = new File(getClass().getResource("/builder-test/immutable-ordered-map-node.yang")
98                 .toURI());
99         final SchemaContext schema = YangParserTestUtils.parseYangFiles(leafRefTestYang);
100         final Module module = schema.getModules().iterator().next();
101         final DataSchemaNode root = module.getDataChildByName(ROOT_CONTAINER);
102         list = (ListSchemaNode)((ContainerEffectiveStatementImpl) root).getDataChildByName(LIST_MAIN);
103         leafList = (LeafListSchemaNode)((ContainerEffectiveStatementImpl) root).getDataChildByName(LEAF_LIST_MAIN);
104     }
105
106     @Test
107     public void immutableOrderedMapBuilderTest() {
108         final LinkedList<MapEntryNode> mapEntryNodeColl = new LinkedList<>();
109         mapEntryNodeColl.add(LIST_MAIN_CHILD_3);
110         final Map<QName, Object> keys = new HashMap<>();
111         keys.put(LIST_MAIN_CHILD_QNAME_1, 1);
112         final NodeIdentifierWithPredicates mapEntryPath = new NodeIdentifierWithPredicates(LIST_MAIN, keys);
113         final OrderedMapNode orderedMapNodeCreateNull = ImmutableOrderedMapNodeBuilder.create()
114                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
115                 .withChild(LIST_MAIN_CHILD_1)
116                 .addChild(LIST_MAIN_CHILD_2)
117                 .withValue(mapEntryNodeColl)
118                 .build();
119         final OrderedMapNode orderedMapNodeCreateSize = ImmutableOrderedMapNodeBuilder.create(SIZE)
120                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
121                 .build();
122         final OrderedMapNode orderedMapNodeCreateNode = ImmutableOrderedMapNodeBuilder.create(orderedMapNodeCreateNull)
123                 .removeChild(mapEntryPath)
124                 .build();
125         final OrderedMapNode orderedMapNodeSchemaAware = ImmutableOrderedMapNodeSchemaAwareBuilder.create(list)
126                 .withChild(LIST_MAIN_CHILD_1)
127                 .build();
128         final OrderedMapNode orderedMapNodeSchemaAwareMapNodeConst = ImmutableOrderedMapNodeSchemaAwareBuilder.create(
129                 list, getImmutableOrderedMapNode())
130                 .build();
131
132         assertNotNull(Builders.orderedMapBuilder(list));
133         assertEquals(SIZE, orderedMapNodeCreateNull.getSize());
134         assertEquals(orderedMapNodeCreateNode.getSize(), orderedMapNodeCreateNull.getSize() - 1);
135         assertEquals(NODE_IDENTIFIER_LIST, orderedMapNodeCreateSize.getIdentifier());
136         assertEquals(LIST_MAIN_CHILD_1, orderedMapNodeCreateNull.getChild(0));
137         assertEquals(SIZE, orderedMapNodeCreateNull.getValue().size());
138         assertEquals(orderedMapNodeSchemaAware.getChild(0), orderedMapNodeSchemaAwareMapNodeConst.getChild(0));
139     }
140
141     @Test
142     public void immutableOrderedLeafSetNodeBuilderTest() {
143         final NormalizedNode<?, ?> orderedLeafSet = ImmutableOrderedLeafSetNodeBuilder.<String>create()
144                 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
145                 .withChild(LEAF_SET_ENTRY_NODE)
146                 .withChildValue("baz")
147                 .removeChild(BAR_PATH)
148                 .build();
149         final LinkedList<LeafSetNode<?>> mapEntryNodeColl = new LinkedList<>();
150         mapEntryNodeColl.add((LeafSetNode<?>)orderedLeafSet);
151         final UnmodifiableCollection<?> leafSetCollection = (UnmodifiableCollection<?>)orderedLeafSet.getValue();
152         final NormalizedNode<?, ?> orderedMapNodeSchemaAware = ImmutableOrderedLeafSetNodeSchemaAwareBuilder.create(
153             leafList).withChildValue("baz").build();
154         final UnmodifiableCollection<?> SchemaAwareleafSetCollection =
155                 (UnmodifiableCollection<?>)orderedMapNodeSchemaAware.getValue();
156         final NormalizedNode<?, ?> orderedLeafSetShemaAware = ImmutableOrderedLeafSetNodeSchemaAwareBuilder.create(
157             leafList,(LeafSetNode<?>)orderedLeafSet).build();
158
159         assertNotNull(Builders.orderedLeafSetBuilder(leafList));
160         assertNotNull(Builders.anyXmlBuilder());
161         assertNotNull(orderedLeafSetShemaAware);
162         assertEquals(1, ((OrderedLeafSetNode<?>)orderedLeafSet).getSize());
163         assertEquals("baz", ((OrderedLeafSetNode<?>)orderedLeafSet).getChild(0).getValue());
164         assertNotNull(((OrderedLeafSetNode<?>)orderedLeafSet).getChild(BAR_PATH));
165         assertEquals(1, leafSetCollection.size());
166         assertEquals(1, SchemaAwareleafSetCollection.size());
167     }
168
169     @Test
170     public void immutableMapNodeBuilderTest() {
171         final LinkedList<MapEntryNode> mapEntryNodeColl = new LinkedList<>();
172         mapEntryNodeColl.add(LIST_MAIN_CHILD_3);
173         final CollectionNodeBuilder<MapEntryNode, MapNode> collectionNodeBuilder = ImmutableMapNodeBuilder.create(1);
174         assertNotNull(collectionNodeBuilder);
175         collectionNodeBuilder.withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST);
176         collectionNodeBuilder.withValue(mapEntryNodeColl);
177         final MapNode mapNode = collectionNodeBuilder.build();
178         final MapNode mapNodeSchemaAware = ImmutableMapNodeSchemaAwareBuilder.create(list, getImmutableMapNode())
179                 .build();
180         assertNotNull(mapNodeSchemaAware);
181         assertNotNull(Builders.mapBuilder(mapNode));
182     }
183
184     @Test
185     public void immutableUnkeyedListEntryNodeBuilderTest() {
186         final UnkeyedListEntryNode unkeyedListEntryNode = ImmutableUnkeyedListEntryNodeBuilder.create()
187                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
188                 .build();
189         final UnkeyedListEntryNode unkeyedListEntryNodeSize = ImmutableUnkeyedListEntryNodeBuilder.create(1)
190                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
191                 .build();
192         final UnkeyedListEntryNode unkeyedListEntryNodeNode = ImmutableUnkeyedListEntryNodeBuilder
193                 .create(unkeyedListEntryNode).build();
194         assertEquals(unkeyedListEntryNode.getNodeType().getLocalName(), unkeyedListEntryNodeSize.getNodeType()
195                 .getLocalName());
196         assertEquals(unkeyedListEntryNodeSize.getNodeType().getLocalName(), unkeyedListEntryNodeNode.getNodeType()
197                 .getLocalName());
198     }
199
200     @Test
201     public void immutableUnkeyedListNodeBuilderTest() {
202         final UnkeyedListEntryNode unkeyedListEntryNode = ImmutableUnkeyedListEntryNodeBuilder.create()
203                 .withNodeIdentifier(NODE_IDENTIFIER_LEAF)
204                 .build();
205         final ImmutableUnkeyedListNodeBuilder immutableUnkeyedListNodeBuilder = (ImmutableUnkeyedListNodeBuilder)
206                 ImmutableUnkeyedListNodeBuilder.create();
207         final UnkeyedListNode unkeyedListNode = immutableUnkeyedListNodeBuilder
208                 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
209                 .addChild(unkeyedListEntryNode)
210                 .build();
211         final UnkeyedListNode unkeyedListNodeSize = ImmutableUnkeyedListNodeBuilder.create(1)
212                 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
213                 .build();
214         final UnkeyedListNode unkeyedListNodeCreated = ImmutableUnkeyedListNodeBuilder.create(unkeyedListNode)
215                 .build();
216         try {
217             unkeyedListNodeSize.getChild(1);
218         } catch (IndexOutOfBoundsException e) {
219             // Ignored on purpose
220         }
221
222         assertNotNull(unkeyedListNodeSize.getValue());
223         assertEquals(unkeyedListEntryNode, unkeyedListNodeCreated.getChild(0));
224         assertEquals(unkeyedListNode.getNodeType().getLocalName(), unkeyedListNodeSize.getNodeType()
225                 .getLocalName());
226         assertNotNull(unkeyedListNodeCreated);
227     }
228
229     @Test
230     public void immutableChoiceNodeBuilderTest() {
231         final ChoiceNode choiceNode = ImmutableChoiceNodeBuilder.create(1).withNodeIdentifier(NODE_IDENTIFIER_LIST)
232                 .build();
233         final ChoiceNode choiceNodeCreated = ImmutableChoiceNodeBuilder.create(choiceNode).build();
234         assertEquals(choiceNodeCreated.getIdentifier(), choiceNode.getIdentifier());
235     }
236
237
238     @Test(expected = NullPointerException.class)
239     public void immutableAugmentationNodeBuilderExceptionTest() {
240         ImmutableAugmentationNodeBuilder.create(1).build();
241     }
242
243     @Test(expected = NullPointerException.class)
244     public void immutableContainerNodeBuilderExceptionTest() {
245         final ContainerNode immutableContainerNode = ImmutableContainerNodeBuilder.create(1)
246                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
247                 .build();
248         assertNotNull(immutableContainerNode);
249         final ContainerSchemaNode containerSchemaNode = mock(ContainerSchemaNode.class);
250         ImmutableContainerNodeSchemaAwareBuilder.create(containerSchemaNode, immutableContainerNode)
251                 .withNodeIdentifier(NODE_IDENTIFIER_LIST)
252                 .build();
253     }
254
255     @Test(expected = NullPointerException.class)
256     public void immutableLeafSetNodeBuilderExceptionTest() {
257         final LeafSetNode<?> leafSetNode = ImmutableLeafSetNodeBuilder.create(1)
258                 .withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST).build();
259         assertNotNull(leafSetNode);
260         ImmutableLeafSetNodeSchemaAwareBuilder.create(mock(LeafListSchemaNode.class), leafSetNode).build();
261     }
262
263     @Test(expected = UnsupportedOperationException.class)
264     public void immutableLeafSetEntryNodeSchemaAwareBuilderExceptionTest() {
265         final LeafListSchemaNode leafListSchemaNode = mock(LeafListSchemaNode.class);
266         ImmutableLeafSetEntryNodeSchemaAwareBuilder.create(leafListSchemaNode).withNodeIdentifier(BAR_PATH).build();
267     }
268
269     @Test(expected = NullPointerException.class)
270     public void immutableMapEntryNodeBuilderExceptionTest() {
271         ImmutableMapEntryNodeBuilder.create(1).build();
272     }
273
274     @Test(expected = NullPointerException.class)
275     public void immutableYangModeledAnyXmlNodeBuilderExceptionTest() {
276         ImmutableYangModeledAnyXmlNodeBuilder.create(mock(YangModeledAnyXmlSchemaNode.class), 1);
277     }
278
279     @Test(expected = UnsupportedOperationException.class)
280     public void immutableUnkeyedListNodeBuilderExceptionTest() {
281         ImmutableUnkeyedListNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LEAF)
282                 .removeChild(NODE_IDENTIFIER_LIST).build();
283     }
284
285     @Test(expected = UnsupportedOperationException.class)
286     public void immutableOrderedMapNotSchemaAwareExceptionTest1() {
287         ImmutableOrderedMapNodeBuilder.create(getImmutableMapNode()).build();
288     }
289
290     @Test(expected = UnsupportedOperationException.class)
291     public void immutableMapNodeSchemaAwareExceptionTest() {
292         ImmutableMapNodeSchemaAwareBuilder.create(list, getImmutableMapNode()).withNodeIdentifier(NODE_IDENTIFIER_LIST)
293         .build();
294     }
295
296     @Test(expected = UnsupportedOperationException.class)
297     public void immutableOrderedMapSchemaAwareExceptionTest1() {
298         ImmutableOrderedMapNodeSchemaAwareBuilder.create(list).withNodeIdentifier(NODE_IDENTIFIER_LIST).build();
299     }
300
301     @Test(expected = UnsupportedOperationException.class)
302     public void immutableOrderedMapSchemaAwareExceptionTest2() {
303         ImmutableOrderedMapNodeSchemaAwareBuilder.create(list, getImmutableMapNode()).build();
304     }
305
306     @Test(expected = UnsupportedOperationException.class)
307     public void immutableOrderedLeafSetNodeExceptionTest1() {
308         ImmutableOrderedLeafSetNodeBuilder.create(getImmutableLeafSetNode()).build();
309     }
310
311     @Test(expected = UnsupportedOperationException.class)
312     public void immutableOrderedLeafSetNodeSchemaAwareExceptionTest1() {
313         ImmutableOrderedLeafSetNodeSchemaAwareBuilder.create(leafList).withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST)
314         .build();
315     }
316
317     private static LeafSetNode<?> getImmutableLeafSetNode() {
318         final ListNodeBuilder<String, LeafSetEntryNode<String>> leafSetBuilder = Builders.<String>leafSetBuilder();
319         leafSetBuilder.withNodeIdentifier(NODE_IDENTIFIER_LEAF_LIST);
320         leafSetBuilder.addChild(LEAF_SET_ENTRY_NODE);
321         return leafSetBuilder.build();
322     }
323
324     private static MapNode getImmutableMapNode() {
325         return ImmutableMapNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LIST).withChild(LIST_MAIN_CHILD_1)
326                 .build();
327     }
328
329     private static MapNode getImmutableOrderedMapNode() {
330         return ImmutableOrderedMapNodeBuilder.create().withNodeIdentifier(NODE_IDENTIFIER_LIST)
331                 .withChild(LIST_MAIN_CHILD_1).build();
332     }
333 }