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