2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.binding.generator.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
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;
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;
35 public static void setup() {
36 context = YangParserTestUtils.parseYangResources(TypeProviderIntegrationTest.class, "/type-provider/test.yang",
37 "/ietf/ietf-inet-types.yang");
38 assertNotNull(context);
43 provider = new CodegenTypeProvider(context);
44 m = context.findModule("test", Revision.of("2013-10-08")).get();
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
303 String actual = provider.getTypeDefaultConstruction(leaf);
304 String expected = "new " + PKG + "NestedUnion(\"111\".toCharArray())";
305 assertEquals(expected, actual);
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())) {
319 } else if ("ipv6-address".equals(type.getQName().getLocalName())) {
321 } else if ("ipv4-prefix".equals(type.getQName().getLocalName())) {
323 } else if ("ipv6-prefix".equals(type.getQName().getLocalName())) {
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));