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