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;
13 import com.google.common.collect.ImmutableMap;
15 import org.junit.Before;
16 import org.junit.BeforeClass;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider;
19 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.Revision;
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;
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 AbstractTypeProvider provider;
36 public static void setup() {
37 context = YangParserTestUtils.parseYangResources(TypeProviderIntegrationTest.class, "/type-provider/test.yang",
38 "/ietf/ietf-inet-types.yang");
39 assertNotNull(context);
44 provider = new CodegenTypeProvider(context, ImmutableMap.of());
45 m = context.findModule("test", Revision.of("2013-10-08")).get();
49 public void testGetTypeDefaultConstructionBinary() {
50 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-binary");
51 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
52 String actual = provider.getTypeDefaultConstruction(leaf);
53 assertEquals("new byte[] {77, 97, 110}", actual);
55 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-binary");
56 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
57 actual = provider.getTypeDefaultConstruction(leaf);
58 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
62 public void testGetTypeDefaultConstructionBits() {
63 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-bits");
64 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
65 String actual = provider.getTypeDefaultConstruction(leaf);
66 assertEquals("new " + PKG + "TestData.LeafBits(false, false, true)", actual);
68 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-bits");
69 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
70 actual = provider.getTypeDefaultConstruction(leaf);
71 assertEquals("new " + PKG + "MyBits(false, false, true)", actual);
75 public void testGetTypeDefaultConstructionBoolean() {
76 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-boolean");
77 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
78 String actual = provider.getTypeDefaultConstruction(leaf);
79 assertEquals("java.lang.Boolean.TRUE", actual);
81 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-boolean");
82 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
83 actual = provider.getTypeDefaultConstruction(leaf);
84 assertEquals("new " + PKG + "MyBoolean(java.lang.Boolean.TRUE)", actual);
88 public void testGetTypeDefaultConstructionDecimal() {
89 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-decimal64");
90 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
91 String actual = provider.getTypeDefaultConstruction(leaf);
92 assertEquals("new java.math.BigDecimal(\"3.14\")", actual);
94 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-decimal64");
95 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
96 actual = provider.getTypeDefaultConstruction(leaf);
97 assertEquals("new " + PKG + "MyDecimal64(new java.math.BigDecimal(\"3.14\"))", actual);
101 public void testGetTypeDefaultConstructionEmpty() {
102 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-empty");
103 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
104 String actual = provider.getTypeDefaultConstruction(leaf);
105 assertEquals("java.lang.Boolean.FALSE", actual);
107 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-empty");
108 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
109 actual = provider.getTypeDefaultConstruction(leaf);
110 assertEquals("new " + PKG + "MyEmpty(java.lang.Boolean.FALSE)", actual);
114 public void testGetTypeDefaultConstructionEnumeration() {
115 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-enumeration");
116 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
117 String actual = provider.getTypeDefaultConstruction(leaf);
118 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.LeafEnumeration.Seven", actual);
120 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-enumeration");
121 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
122 actual = provider.getTypeDefaultConstruction(leaf);
123 assertEquals(PKG + "MyEnumeration.Seven", actual);
127 public void testGetTypeDefaultConstructionInt8() {
128 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int8");
129 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
130 String actual = provider.getTypeDefaultConstruction(leaf);
131 assertEquals("java.lang.Byte.valueOf(\"11\")", actual);
133 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int8");
134 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
135 actual = provider.getTypeDefaultConstruction(leaf);
136 assertEquals("new " + PKG + "MyInt8(java.lang.Byte.valueOf(\"11\"))", actual);
140 public void testGetTypeDefaultConstructionInt16() {
141 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int16");
142 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
143 String actual = provider.getTypeDefaultConstruction(leaf);
144 assertEquals("java.lang.Short.valueOf(\"111\")", actual);
146 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int16");
147 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
148 actual = provider.getTypeDefaultConstruction(leaf);
149 assertEquals("new " + PKG + "MyInt16(java.lang.Short.valueOf(\"111\"))", actual);
153 public void testGetTypeDefaultConstructionInt32() {
154 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int32");
155 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
156 String actual = provider.getTypeDefaultConstruction(leaf);
157 assertEquals("java.lang.Integer.valueOf(\"1111\")", actual);
159 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int32");
160 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
161 actual = provider.getTypeDefaultConstruction(leaf);
162 assertEquals("new " + PKG + "MyInt32(java.lang.Integer.valueOf(\"1111\"))", actual);
166 public void testGetTypeDefaultConstructionInt64() {
167 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int64");
168 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
169 String actual = provider.getTypeDefaultConstruction(leaf);
170 assertEquals("java.lang.Long.valueOf(\"11111\")", actual);
172 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int64");
173 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
174 actual = provider.getTypeDefaultConstruction(leaf);
175 assertEquals("new " + PKG + "MyInt64(java.lang.Long.valueOf(\"11111\"))", actual);
179 public void testGetTypeDefaultConstructionLeafref1() {
180 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-leafref");
181 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
182 String actual = provider.getTypeDefaultConstruction(leaf);
183 assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
185 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-leafref");
186 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
187 actual = provider.getTypeDefaultConstruction(leaf);
188 assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
192 public void testGetTypeDefaultConstructionLeafref2() {
193 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-leafref1");
194 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
195 String actual = provider.getTypeDefaultConstruction(leaf);
196 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
198 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-leafref1");
199 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
200 actual = provider.getTypeDefaultConstruction(leaf);
201 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
205 public void testGetTypeDefaultConstructionString() {
206 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-string");
207 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
208 String actual = provider.getTypeDefaultConstruction(leaf);
209 assertEquals("\"name\"", actual);
211 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-string");
212 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
213 actual = provider.getTypeDefaultConstruction(leaf);
214 assertEquals("new " + PKG + "MyString(\"name\")", actual);
218 public void testGetTypeDefaultConstructionUint8() {
219 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint8");
220 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
221 String actual = provider.getTypeDefaultConstruction(leaf);
222 assertEquals("java.lang.Short.valueOf(\"11\")", actual);
224 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint8");
225 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
226 actual = provider.getTypeDefaultConstruction(leaf);
227 assertEquals("new " + PKG + "MyUint8(java.lang.Short.valueOf(\"11\"))", actual);
231 public void testGetTypeDefaultConstructionUint16() {
232 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint16");
233 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
234 String actual = provider.getTypeDefaultConstruction(leaf);
235 assertEquals("java.lang.Integer.valueOf(\"111\")", actual);
237 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint16");
238 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
239 actual = provider.getTypeDefaultConstruction(leaf);
240 assertEquals("new " + PKG + "MyUint16(java.lang.Integer.valueOf(\"111\"))", actual);
244 public void testGetTypeDefaultConstructionUint32() {
245 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint32");
246 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
247 String actual = provider.getTypeDefaultConstruction(leaf);
248 assertEquals("java.lang.Long.valueOf(\"1111\")", actual);
250 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint32");
251 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
252 actual = provider.getTypeDefaultConstruction(leaf);
253 assertEquals("new " + PKG + "MyUint32(java.lang.Long.valueOf(\"1111\"))", actual);
257 public void testGetTypeDefaultConstructionUint64() {
258 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint64");
259 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
260 String actual = provider.getTypeDefaultConstruction(leaf);
261 assertEquals("new java.math.BigInteger(\"11111\")", actual);
263 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint64");
264 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
265 actual = provider.getTypeDefaultConstruction(leaf);
266 assertEquals("new " + PKG + "MyUint64(new java.math.BigInteger(\"11111\"))", actual);
270 public void testGetTypeDefaultConstruction() {
271 final QName leafNode = QName.create(m.getQNameModule(), "ip-leaf");
272 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode);
273 String actual = provider.getTypeDefaultConstruction(leaf);
274 String exp = "new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(\"0.0.0.1\")";
275 assertEquals(exp, actual);
279 public void testGetTypeDefaultConstructionUnion() {
280 final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-union");
281 LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
282 String actual = provider.getTypeDefaultConstruction(leaf);
283 String expected = "new " + PKG + "TestData.LeafUnion(\"111\".toCharArray())";
284 assertEquals(expected, actual);
286 final QName leafNode2 = QName.create(m.getQNameModule(), "ext-union");
287 leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
288 actual = provider.getTypeDefaultConstruction(leaf);
289 expected = "new " + PKG + "MyUnion(\"111\".toCharArray())";
290 assertEquals(expected, actual);
294 public void testGetTypeDefaultConstructionUnionNested() {
295 final QName containerNode1 = QName.create(m.getQNameModule(), "c1");
296 ContainerSchemaNode c1 = (ContainerSchemaNode) m.getDataChildByName(containerNode1);
297 final QName containerNode2 = QName.create(m.getQNameModule(), "c2");
298 ContainerSchemaNode c2 = (ContainerSchemaNode) c1.getDataChildByName(containerNode2);
299 final QName containerNode3 = QName.create(m.getQNameModule(), "c3");
300 ContainerSchemaNode c3 = (ContainerSchemaNode) c2.getDataChildByName(containerNode3);
301 final QName leafNode = QName.create(m.getQNameModule(), "id");
302 LeafSchemaNode leaf = (LeafSchemaNode) c3.getDataChildByName(leafNode);
304 String actual = provider.getTypeDefaultConstruction(leaf);
305 String expected = "new " + PKG + "NestedUnion(\"111\".toCharArray())";
306 assertEquals(expected, actual);
310 public void testGetParamNameFromType() {
311 m = context.findModule("ietf-inet-types", Revision.of("2010-09-24")).get();
312 Set<TypeDefinition<?>> types = m.getTypeDefinitions();
313 TypeDefinition<?> ipv4 = null;
314 TypeDefinition<?> ipv6 = null;
315 TypeDefinition<?> ipv4Pref = null;
316 TypeDefinition<?> ipv6Pref = null;
317 for (TypeDefinition<?> type : types) {
318 if ("ipv4-address".equals(type.getQName().getLocalName())) {
320 } else if ("ipv6-address".equals(type.getQName().getLocalName())) {
322 } else if ("ipv4-prefix".equals(type.getQName().getLocalName())) {
324 } else if ("ipv6-prefix".equals(type.getQName().getLocalName())) {
331 assertNotNull(ipv4Pref);
332 assertNotNull(ipv6Pref);
333 assertEquals("ipv4Address", provider.getParamNameFromType(ipv4));
334 assertEquals("ipv6Address", provider.getParamNameFromType(ipv6));
335 assertEquals("ipv4Prefix", provider.getParamNameFromType(ipv4Pref));
336 assertEquals("ipv6Prefix", provider.getParamNameFromType(ipv6Pref));