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