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