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