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.AfterClass;
16 import org.junit.Before;
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19 import org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider;
20 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.common.Revision;
23 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.Module;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
28 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
30 public class TypeProviderIntegrationTest {
31 private static final String PKG = "org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.";
32 private static SchemaContext CONTEXT;
33 private AbstractTypeProvider provider;
34 private Module module;
37 public static void setup() {
38 CONTEXT = YangParserTestUtils.parseYangResources(TypeProviderIntegrationTest.class, "/type-provider/test.yang",
39 "/ietf/ietf-inet-types.yang");
40 assertNotNull(CONTEXT);
44 public static void teardown() {
50 provider = new CodegenTypeProvider(CONTEXT, ImmutableMap.of());
51 module = CONTEXT.findModule("test", Revision.of("2013-10-08")).get();
55 public void testGetTypeDefaultConstructionBinary() {
56 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-binary");
57 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
58 String actual = provider.getTypeDefaultConstruction(leaf);
59 assertEquals("new byte[] {77, 97, 110}", actual);
61 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-binary");
62 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
63 actual = provider.getTypeDefaultConstruction(leaf);
64 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
68 public void testGetTypeDefaultConstructionBits() {
69 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-bits");
70 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
71 String actual = provider.getTypeDefaultConstruction(leaf);
72 assertEquals("new " + PKG + "TestData.LeafBits(false, false, true)", actual);
74 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-bits");
75 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
76 actual = provider.getTypeDefaultConstruction(leaf);
77 assertEquals("new " + PKG + "MyBits(false, false, true)", actual);
81 public void testGetTypeDefaultConstructionBoolean() {
82 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-boolean");
83 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
84 String actual = provider.getTypeDefaultConstruction(leaf);
85 assertEquals("java.lang.Boolean.TRUE", actual);
87 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-boolean");
88 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
89 actual = provider.getTypeDefaultConstruction(leaf);
90 assertEquals("new " + PKG + "MyBoolean(java.lang.Boolean.TRUE)", actual);
94 public void testGetTypeDefaultConstructionDecimal() {
95 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-decimal64");
96 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
97 String actual = provider.getTypeDefaultConstruction(leaf);
98 assertEquals("new java.math.BigDecimal(\"3.14\")", actual);
100 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-decimal64");
101 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
102 actual = provider.getTypeDefaultConstruction(leaf);
103 assertEquals("new " + PKG + "MyDecimal64(new java.math.BigDecimal(\"3.14\"))", actual);
107 public void testGetTypeDefaultConstructionEmpty() {
108 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-empty");
109 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
110 String actual = provider.getTypeDefaultConstruction(leaf);
111 assertEquals("java.lang.Boolean.FALSE", actual);
113 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-empty");
114 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
115 actual = provider.getTypeDefaultConstruction(leaf);
116 assertEquals("new " + PKG + "MyEmpty(java.lang.Boolean.FALSE)", actual);
120 public void testGetTypeDefaultConstructionEnumeration() {
121 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-enumeration");
122 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
123 String actual = provider.getTypeDefaultConstruction(leaf);
124 assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.LeafEnumeration.Seven", actual);
126 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-enumeration");
127 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
128 actual = provider.getTypeDefaultConstruction(leaf);
129 assertEquals(PKG + "MyEnumeration.Seven", actual);
133 public void testGetTypeDefaultConstructionInt8() {
134 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int8");
135 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
136 String actual = provider.getTypeDefaultConstruction(leaf);
137 assertEquals("java.lang.Byte.valueOf(\"11\")", actual);
139 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int8");
140 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
141 actual = provider.getTypeDefaultConstruction(leaf);
142 assertEquals("new " + PKG + "MyInt8(java.lang.Byte.valueOf(\"11\"))", actual);
146 public void testGetTypeDefaultConstructionInt16() {
147 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int16");
148 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
149 String actual = provider.getTypeDefaultConstruction(leaf);
150 assertEquals("java.lang.Short.valueOf(\"111\")", actual);
152 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int16");
153 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
154 actual = provider.getTypeDefaultConstruction(leaf);
155 assertEquals("new " + PKG + "MyInt16(java.lang.Short.valueOf(\"111\"))", actual);
159 public void testGetTypeDefaultConstructionInt32() {
160 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int32");
161 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
162 String actual = provider.getTypeDefaultConstruction(leaf);
163 assertEquals("java.lang.Integer.valueOf(\"1111\")", actual);
165 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int32");
166 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
167 actual = provider.getTypeDefaultConstruction(leaf);
168 assertEquals("new " + PKG + "MyInt32(java.lang.Integer.valueOf(\"1111\"))", actual);
172 public void testGetTypeDefaultConstructionInt64() {
173 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-int64");
174 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
175 String actual = provider.getTypeDefaultConstruction(leaf);
176 assertEquals("java.lang.Long.valueOf(\"11111\")", actual);
178 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-int64");
179 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
180 actual = provider.getTypeDefaultConstruction(leaf);
181 assertEquals("new " + PKG + "MyInt64(java.lang.Long.valueOf(\"11111\"))", actual);
185 public void testGetTypeDefaultConstructionLeafref1() {
186 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-leafref");
187 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
188 String actual = provider.getTypeDefaultConstruction(leaf);
189 assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
191 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-leafref");
192 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
193 actual = provider.getTypeDefaultConstruction(leaf);
194 assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
198 public void testGetTypeDefaultConstructionLeafref2() {
199 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-leafref1");
200 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
201 String actual = provider.getTypeDefaultConstruction(leaf);
202 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
204 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-leafref1");
205 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
206 actual = provider.getTypeDefaultConstruction(leaf);
207 assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
211 public void testGetTypeDefaultConstructionString() {
212 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-string");
213 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
214 String actual = provider.getTypeDefaultConstruction(leaf);
215 assertEquals("\"name\"", actual);
217 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-string");
218 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
219 actual = provider.getTypeDefaultConstruction(leaf);
220 assertEquals("new " + PKG + "MyString(\"name\")", actual);
224 public void testGetTypeDefaultConstructionUint8() {
225 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint8");
226 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
227 String actual = provider.getTypeDefaultConstruction(leaf);
228 assertEquals("java.lang.Short.valueOf(\"11\")", actual);
230 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint8");
231 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
232 actual = provider.getTypeDefaultConstruction(leaf);
233 assertEquals("new " + PKG + "MyUint8(java.lang.Short.valueOf(\"11\"))", actual);
237 public void testGetTypeDefaultConstructionUint16() {
238 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint16");
239 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
240 String actual = provider.getTypeDefaultConstruction(leaf);
241 assertEquals("java.lang.Integer.valueOf(\"111\")", actual);
243 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint16");
244 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
245 actual = provider.getTypeDefaultConstruction(leaf);
246 assertEquals("new " + PKG + "MyUint16(java.lang.Integer.valueOf(\"111\"))", actual);
250 public void testGetTypeDefaultConstructionUint32() {
251 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint32");
252 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
253 String actual = provider.getTypeDefaultConstruction(leaf);
254 assertEquals("java.lang.Long.valueOf(\"1111\")", actual);
256 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint32");
257 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
258 actual = provider.getTypeDefaultConstruction(leaf);
259 assertEquals("new " + PKG + "MyUint32(java.lang.Long.valueOf(\"1111\"))", actual);
263 public void testGetTypeDefaultConstructionUint64() {
264 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint64");
265 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
266 String actual = provider.getTypeDefaultConstruction(leaf);
267 assertEquals("new java.math.BigInteger(\"11111\")", actual);
269 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint64");
270 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
271 actual = provider.getTypeDefaultConstruction(leaf);
272 assertEquals("new " + PKG + "MyUint64(new java.math.BigInteger(\"11111\"))", actual);
276 public void testGetTypeDefaultConstruction() {
277 final QName leafNode = QName.create(module.getQNameModule(), "ip-leaf");
278 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode).get();
279 String actual = provider.getTypeDefaultConstruction(leaf);
280 String exp = "new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924."
281 + "Ipv4Address(\"0.0.0.1\")";
282 assertEquals(exp, actual);
286 public void testGetTypeDefaultConstructionUnion() {
287 final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-union");
288 LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get();
289 String actual = provider.getTypeDefaultConstruction(leaf);
290 String expected = "new " + PKG + "TestData.LeafUnion(\"111\".toCharArray())";
291 assertEquals(expected, actual);
293 final QName leafNode2 = QName.create(module.getQNameModule(), "ext-union");
294 leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get();
295 actual = provider.getTypeDefaultConstruction(leaf);
296 expected = "new " + PKG + "MyUnion(\"111\".toCharArray())";
297 assertEquals(expected, actual);
301 public void testGetTypeDefaultConstructionUnionNested() {
302 final QName containerNode1 = QName.create(module.getQNameModule(), "c1");
303 ContainerSchemaNode c1 = (ContainerSchemaNode) module.findDataChildByName(containerNode1).get();
304 final QName containerNode2 = QName.create(module.getQNameModule(), "c2");
305 ContainerSchemaNode c2 = (ContainerSchemaNode) c1.findDataChildByName(containerNode2).get();
306 final QName containerNode3 = QName.create(module.getQNameModule(), "c3");
307 ContainerSchemaNode c3 = (ContainerSchemaNode) c2.findDataChildByName(containerNode3).get();
308 final QName leafNode = QName.create(module.getQNameModule(), "id");
309 LeafSchemaNode leaf = (LeafSchemaNode) c3.findDataChildByName(leafNode).get();
311 String actual = provider.getTypeDefaultConstruction(leaf);
312 String expected = "new " + PKG + "NestedUnion(\"111\".toCharArray())";
313 assertEquals(expected, actual);
317 public void testGetParamNameFromType() {
318 module = CONTEXT.findModule("ietf-inet-types", Revision.of("2010-09-24")).get();
319 Set<TypeDefinition<?>> types = module.getTypeDefinitions();
320 TypeDefinition<?> ipv4 = null;
321 TypeDefinition<?> ipv6 = null;
322 TypeDefinition<?> ipv4Pref = null;
323 TypeDefinition<?> ipv6Pref = null;
324 for (TypeDefinition<?> type : types) {
325 if ("ipv4-address".equals(type.getQName().getLocalName())) {
327 } else if ("ipv6-address".equals(type.getQName().getLocalName())) {
329 } else if ("ipv4-prefix".equals(type.getQName().getLocalName())) {
331 } else if ("ipv6-prefix".equals(type.getQName().getLocalName())) {
338 assertNotNull(ipv4Pref);
339 assertNotNull(ipv6Pref);
340 assertEquals("ipv4Address", provider.getParamNameFromType(ipv4));
341 assertEquals("ipv6Address", provider.getParamNameFromType(ipv6));
342 assertEquals("ipv4Prefix", provider.getParamNameFromType(ipv4Pref));
343 assertEquals("ipv6Prefix", provider.getParamNameFromType(ipv6Pref));