c40acf5ed8b6a2e129472064d6a495465e4a6e76
[mdsal.git] / binding / mdsal-binding-generator-impl / src / test / java / org / opendaylight / mdsal / binding / generator / impl / TypeProviderIntegrationTest.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 package org.opendaylight.mdsal.binding.generator.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12
13 import com.google.common.collect.ImmutableMap;
14 import java.util.Set;
15 import org.junit.AfterClass;
16 import org.junit.Before;
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19 import org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider;
20 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.common.Revision;
23 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.Module;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
28 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
29
30 public class TypeProviderIntegrationTest {
31     private static final String PKG = "org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.";
32     private static SchemaContext CONTEXT;
33     private AbstractTypeProvider provider;
34     private Module module;
35
36     @BeforeClass
37     public static void setup() {
38         CONTEXT = YangParserTestUtils.parseYangResources(TypeProviderIntegrationTest.class, "/type-provider/test.yang",
39             "/ietf/ietf-inet-types.yang");
40         assertNotNull(CONTEXT);
41     }
42
43     @AfterClass
44     public static void teardown() {
45         CONTEXT = null;
46     }
47
48     @Before
49     public void init() {
50         provider = new CodegenTypeProvider(CONTEXT, ImmutableMap.of());
51         module = CONTEXT.findModule("test", Revision.of("2013-10-08")).get();
52     }
53
54     @Test
55     public void testGetTypeDefaultConstructionBinary() {
56         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-binary");
57         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
58         String actual = provider.getTypeDefaultConstruction(leaf);
59         assertEquals("new byte[] {77, 97, 110}", actual);
60
61         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-binary");
62         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
63         actual = provider.getTypeDefaultConstruction(leaf);
64         assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
65     }
66
67     @Test
68     public void testGetTypeDefaultConstructionBits() {
69         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-bits");
70         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
71         String actual = provider.getTypeDefaultConstruction(leaf);
72         assertEquals("new " + PKG + "TestData.LeafBits(false, false, true)", actual);
73
74         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-bits");
75         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
76         actual = provider.getTypeDefaultConstruction(leaf);
77         assertEquals("new " + PKG + "MyBits(false, false, true)", actual);
78     }
79
80     @Test
81     public void testGetTypeDefaultConstructionBoolean() {
82         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-boolean");
83         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
84         String actual = provider.getTypeDefaultConstruction(leaf);
85         assertEquals("java.lang.Boolean.TRUE", actual);
86
87         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-boolean");
88         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
89         actual = provider.getTypeDefaultConstruction(leaf);
90         assertEquals("new " + PKG + "MyBoolean(java.lang.Boolean.TRUE)", actual);
91     }
92
93     @Test
94     public void testGetTypeDefaultConstructionDecimal() {
95         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-decimal64");
96         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
97         String actual = provider.getTypeDefaultConstruction(leaf);
98         assertEquals("new java.math.BigDecimal(\"3.14\")", actual);
99
100         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-decimal64");
101         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
102         actual = provider.getTypeDefaultConstruction(leaf);
103         assertEquals("new " + PKG + "MyDecimal64(new java.math.BigDecimal(\"3.14\"))", actual);
104     }
105
106     @Test
107     public void testGetTypeDefaultConstructionEmpty() {
108         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-empty");
109         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
110         String actual = provider.getTypeDefaultConstruction(leaf);
111         assertEquals("java.lang.Boolean.FALSE", actual);
112
113         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-empty");
114         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
115         actual = provider.getTypeDefaultConstruction(leaf);
116         assertEquals("new " + PKG + "MyEmpty(java.lang.Boolean.FALSE)", actual);
117     }
118
119     @Test
120     public void testGetTypeDefaultConstructionEnumeration() {
121         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-enumeration");
122         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
123         String actual = provider.getTypeDefaultConstruction(leaf);
124         assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.LeafEnumeration.Seven", actual);
125
126         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-enumeration");
127         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
128         actual = provider.getTypeDefaultConstruction(leaf);
129         assertEquals(PKG + "MyEnumeration.Seven", actual);
130     }
131
132     @Test
133     public void testGetTypeDefaultConstructionInt8() {
134         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int8");
135         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
136         String actual = provider.getTypeDefaultConstruction(leaf);
137         assertEquals("java.lang.Byte.valueOf(\"11\")", actual);
138
139         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int8");
140         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
141         actual = provider.getTypeDefaultConstruction(leaf);
142         assertEquals("new " + PKG + "MyInt8(java.lang.Byte.valueOf(\"11\"))", actual);
143     }
144
145     @Test
146     public void testGetTypeDefaultConstructionInt16() {
147         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int16");
148         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
149         String actual = provider.getTypeDefaultConstruction(leaf);
150         assertEquals("java.lang.Short.valueOf(\"111\")", actual);
151
152         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int16");
153         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
154         actual = provider.getTypeDefaultConstruction(leaf);
155         assertEquals("new " + PKG + "MyInt16(java.lang.Short.valueOf(\"111\"))", actual);
156     }
157
158     @Test
159     public void testGetTypeDefaultConstructionInt32() {
160         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int32");
161         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
162         String actual = provider.getTypeDefaultConstruction(leaf);
163         assertEquals("java.lang.Integer.valueOf(\"1111\")", actual);
164
165         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int32");
166         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
167         actual = provider.getTypeDefaultConstruction(leaf);
168         assertEquals("new " + PKG + "MyInt32(java.lang.Integer.valueOf(\"1111\"))", actual);
169     }
170
171     @Test
172     public void testGetTypeDefaultConstructionInt64() {
173         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int64");
174         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
175         String actual = provider.getTypeDefaultConstruction(leaf);
176         assertEquals("java.lang.Long.valueOf(\"11111\")", actual);
177
178         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int64");
179         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
180         actual = provider.getTypeDefaultConstruction(leaf);
181         assertEquals("new " + PKG + "MyInt64(java.lang.Long.valueOf(\"11111\"))", actual);
182     }
183
184     @Test
185     public void testGetTypeDefaultConstructionLeafref1() {
186         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-leafref");
187         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
188         String actual = provider.getTypeDefaultConstruction(leaf);
189         assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
190
191         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-leafref");
192         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
193         actual = provider.getTypeDefaultConstruction(leaf);
194         assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
195     }
196
197     @Test
198     public void testGetTypeDefaultConstructionLeafref2() {
199         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-leafref1");
200         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
201         String actual = provider.getTypeDefaultConstruction(leaf);
202         assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
203
204         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-leafref1");
205         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
206         actual = provider.getTypeDefaultConstruction(leaf);
207         assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
208     }
209
210     @Test
211     public void testGetTypeDefaultConstructionString() {
212         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-string");
213         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
214         String actual = provider.getTypeDefaultConstruction(leaf);
215         assertEquals("\"name\"", actual);
216
217         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-string");
218         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
219         actual = provider.getTypeDefaultConstruction(leaf);
220         assertEquals("new " + PKG + "MyString(\"name\")", actual);
221     }
222
223     @Test
224     public void testGetTypeDefaultConstructionUint8() {
225         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint8");
226         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
227         String actual = provider.getTypeDefaultConstruction(leaf);
228         assertEquals("java.lang.Short.valueOf(\"11\")", actual);
229
230         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint8");
231         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
232         actual = provider.getTypeDefaultConstruction(leaf);
233         assertEquals("new " + PKG + "MyUint8(java.lang.Short.valueOf(\"11\"))", actual);
234     }
235
236     @Test
237     public void testGetTypeDefaultConstructionUint16() {
238         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint16");
239         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
240         String actual = provider.getTypeDefaultConstruction(leaf);
241         assertEquals("java.lang.Integer.valueOf(\"111\")", actual);
242
243         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint16");
244         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
245         actual = provider.getTypeDefaultConstruction(leaf);
246         assertEquals("new " + PKG + "MyUint16(java.lang.Integer.valueOf(\"111\"))", actual);
247     }
248
249     @Test
250     public void testGetTypeDefaultConstructionUint32() {
251         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint32");
252         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
253         String actual = provider.getTypeDefaultConstruction(leaf);
254         assertEquals("java.lang.Long.valueOf(\"1111\")", actual);
255
256         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint32");
257         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
258         actual = provider.getTypeDefaultConstruction(leaf);
259         assertEquals("new " + PKG + "MyUint32(java.lang.Long.valueOf(\"1111\"))", actual);
260     }
261
262     @Test
263     public void testGetTypeDefaultConstructionUint64() {
264         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint64");
265         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
266         String actual = provider.getTypeDefaultConstruction(leaf);
267         assertEquals("new java.math.BigInteger(\"11111\")", actual);
268
269         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint64");
270         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
271         actual = provider.getTypeDefaultConstruction(leaf);
272         assertEquals("new " + PKG + "MyUint64(new java.math.BigInteger(\"11111\"))", actual);
273     }
274
275     @Test
276     public void testGetTypeDefaultConstruction() {
277         final QName leafNode = QName.create(module.getQNameModule(), "ip-leaf");
278         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode);
279         String actual = provider.getTypeDefaultConstruction(leaf);
280         String exp = "new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924."
281                 + "Ipv4Address(\"0.0.0.1\")";
282         assertEquals(exp, actual);
283     }
284
285     @Test
286     public void testGetTypeDefaultConstructionUnion() {
287         final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-union");
288         LeafSchemaNode leaf = (LeafSchemaNode) module.getDataChildByName(leafNode1);
289         String actual = provider.getTypeDefaultConstruction(leaf);
290         String expected = "new " + PKG + "TestData.LeafUnion(\"111\".toCharArray())";
291         assertEquals(expected, actual);
292
293         final QName leafNode2 = QName.create(module.getQNameModule(), "ext-union");
294         leaf = (LeafSchemaNode) module.getDataChildByName(leafNode2);
295         actual = provider.getTypeDefaultConstruction(leaf);
296         expected = "new " + PKG + "MyUnion(\"111\".toCharArray())";
297         assertEquals(expected, actual);
298     }
299
300     @Test
301     public void testGetTypeDefaultConstructionUnionNested()  {
302         final QName containerNode1 = QName.create(module.getQNameModule(), "c1");
303         ContainerSchemaNode c1 = (ContainerSchemaNode) module.getDataChildByName(containerNode1);
304         final QName containerNode2 = QName.create(module.getQNameModule(), "c2");
305         ContainerSchemaNode c2 = (ContainerSchemaNode) c1.getDataChildByName(containerNode2);
306         final QName containerNode3 = QName.create(module.getQNameModule(), "c3");
307         ContainerSchemaNode c3 = (ContainerSchemaNode) c2.getDataChildByName(containerNode3);
308         final QName leafNode = QName.create(module.getQNameModule(), "id");
309         LeafSchemaNode leaf = (LeafSchemaNode) c3.getDataChildByName(leafNode);
310
311         String actual = provider.getTypeDefaultConstruction(leaf);
312         String expected = "new " + PKG + "NestedUnion(\"111\".toCharArray())";
313         assertEquals(expected, actual);
314     }
315
316     @Test
317     public void testGetParamNameFromType() {
318         module = CONTEXT.findModule("ietf-inet-types", Revision.of("2010-09-24")).get();
319         Set<TypeDefinition<?>> types = module.getTypeDefinitions();
320         TypeDefinition<?> ipv4 = null;
321         TypeDefinition<?> ipv6 = null;
322         TypeDefinition<?> ipv4Pref = null;
323         TypeDefinition<?> ipv6Pref = null;
324         for (TypeDefinition<?> type : types) {
325             if ("ipv4-address".equals(type.getQName().getLocalName())) {
326                 ipv4 = type;
327             } else if ("ipv6-address".equals(type.getQName().getLocalName())) {
328                 ipv6 = type;
329             } else if ("ipv4-prefix".equals(type.getQName().getLocalName())) {
330                 ipv4Pref = type;
331             } else if ("ipv6-prefix".equals(type.getQName().getLocalName())) {
332                 ipv6Pref = type;
333             }
334         }
335
336         assertNotNull(ipv4);
337         assertNotNull(ipv6);
338         assertNotNull(ipv4Pref);
339         assertNotNull(ipv6Pref);
340         assertEquals("ipv4Address", provider.getParamNameFromType(ipv4));
341         assertEquals("ipv6Address", provider.getParamNameFromType(ipv6));
342         assertEquals("ipv4Prefix", provider.getParamNameFromType(ipv4Pref));
343         assertEquals("ipv6Prefix", provider.getParamNameFromType(ipv6Pref));
344     }
345 }