Added NormalizedNodeContainerBuilder and helpers.
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / test / NormalizedNodeUtilsTest.java
1 package org.opendaylight.yangtools.yang.data.impl.schema.test;
2
3 import static org.junit.Assert.assertNotNull;
4 import static org.junit.Assert.assertTrue;
5 import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapEntry;
6 import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapEntryBuilder;
7 import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapNodeBuilder;
8
9 import org.junit.Test;
10 import org.opendaylight.yangtools.yang.common.QName;
11 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
12 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier;
13 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
14 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeUtils;
15 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
16
17 import com.google.common.base.Optional;
18
19 /**
20  *
21  * Schema structure of document is
22  *
23  * <pre>
24  * container root { 
25  *      list list-a {
26  *              key leaf-a;
27  *              leaf leaf-a;
28  *              choice choice-a {
29  *                      case one {
30  *                              leaf one;
31  *                      }
32  *                      case two-three {
33  *                              leaf two;
34  *                              leaf three;
35  *                      }
36  *              }
37  *              list list-b {
38  *                      key leaf-b;
39  *                      leaf leaf-b;
40  *              }
41  *      }
42  * }
43  * </pre>
44  *
45  */
46 public class NormalizedNodeUtilsTest {
47
48     private static final QName ROOT_QNAME = QName.create("urn:opendalight:controller:sal:dom:store:test", "2014-03-13",
49             "root");
50     private static final QName LIST_A_QNAME = QName.create(ROOT_QNAME, "list-a");
51     private static final QName LIST_B_QNAME = QName.create(ROOT_QNAME, "list-b");
52     private static final QName CHOICE_A_QNAME = QName.create(ROOT_QNAME, "choice-a");
53     private static final QName LEAF_A_QNAME = QName.create(ROOT_QNAME, "leaf-a");
54     private static final QName LEAF_B_QNAME = QName.create(ROOT_QNAME, "leaf-b");
55     private static final String FOO = "foo";
56     private static final String BAR = "bar";
57     private static final String ONE = "one";
58     private static final String TWO = "two";
59
60     private static final InstanceIdentifier LIST_A_FOO_PATH = InstanceIdentifier.builder()
61                 //.node(ROOT_QNAME)
62                 .node(LIST_A_QNAME)
63                 .nodeWithKey(LIST_A_QNAME, LEAF_A_QNAME, FOO)
64                 .build();
65     private static final InstanceIdentifier LIST_B_TWO_PATH = InstanceIdentifier.builder()
66                 //.node(ROOT_QNAME)
67                 .node(LIST_A_QNAME)
68                 .nodeWithKey(LIST_A_QNAME, LEAF_A_QNAME, BAR)
69                 .node(LIST_B_QNAME)
70                 .nodeWithKey(LIST_B_QNAME,LEAF_B_QNAME,TWO)
71                 .build();
72
73     /**
74      * Returns a test document
75      *
76      * <pre>
77      * root
78      *     list-a
79      *          leaf-a "foo"
80      *     list-a
81      *          leaf-a "bar"
82      *          list-b
83      *                  leaf-b "one"
84      *          list-b
85      *                  leaf-b "two"
86      *
87      * </pre>
88      *
89      * @return
90      */
91     public NormalizedNode<?, ?> createDocumentOne() {
92         return ImmutableContainerNodeBuilder
93                 .create()
94                 .withNodeIdentifier(new NodeIdentifier(ROOT_QNAME))
95                 .withChild(
96                         mapNodeBuilder(LIST_A_QNAME)
97                                 .withChild(mapEntry(LIST_A_QNAME, LEAF_A_QNAME, FOO))
98                                 .withChild(
99                                         mapEntryBuilder(LIST_A_QNAME, LEAF_A_QNAME, BAR).withChild(
100                                                 mapNodeBuilder(LIST_B_QNAME)
101                                                         .withChild(mapEntry(LIST_B_QNAME, LEAF_B_QNAME, ONE))
102                                                         .withChild(mapEntry(LIST_B_QNAME, LEAF_B_QNAME, TWO)).build())
103                                                 .build()).build()).build();
104
105     }
106
107     @Test
108     public void findNodeTest() {
109         NormalizedNode<?, ?> tree = createDocumentOne();
110         assertNotNull(tree);
111
112         Optional<NormalizedNode<?, ?>> listFooResult = NormalizedNodeUtils.findNode(tree, LIST_A_FOO_PATH);
113         assertTrue(listFooResult.isPresent());
114
115         Optional<NormalizedNode<?, ?>> listTwoResult = NormalizedNodeUtils.findNode(tree, LIST_B_TWO_PATH);
116         assertTrue(listTwoResult.isPresent());
117     }
118
119 }