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.yangtools.sal.binding.generator.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
14 import java.text.ParseException;
15 import java.text.SimpleDateFormat;
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;
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;
36 public static void setup() throws Exception {
37 File abstractTopology = new File(TypeProviderIntegrationTest.class.getResource("/type-provider/test.yang")
39 File ietfInetTypes = new File(TypeProviderIntegrationTest.class.getResource("/ietf/ietf-inet-types.yang")
41 context = YangParserTestUtils.parseYangSources(abstractTopology, ietfInetTypes);
42 assertNotNull(context);
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"));
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
307 String actual = provider.getTypeDefaultConstruction(leaf);
308 String expected = "new " + PKG + "NestedUnion(\"111\".toCharArray())";
309 assertEquals(expected, actual);
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())) {
323 } else if ("ipv6-address".equals(type.getQName().getLocalName())) {
325 } else if ("ipv4-prefix".equals(type.getQName().getLocalName())) {
327 } else if ("ipv6-prefix".equals(type.getQName().getLocalName())) {
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));