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;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.assertTrue;
15 import java.util.List;
16 import org.junit.Test;
17 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
18 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
19 import org.opendaylight.mdsal.binding.model.api.Type;
20 import org.opendaylight.mdsal.binding.model.util.BaseYangTypes;
21 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
22 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
24 public class ExtendedTypedefTest {
27 public void constantGenerationTest() {
28 final SchemaContext context = YangParserTestUtils.parseYangResources(ExtendedTypedefTest.class,
29 "/typedef-of-typedef/typedef_of_typedef.yang", "/ietf/ietf-inet-types.yang");
30 assertNotNull("Schema Context is null", context);
32 final List<Type> genTypes = DefaultBindingGenerator.generateFor(context);
34 GeneratedTransferObject simpleTypedef4 = null;
35 GeneratedTransferObject extendedTypedefUnion = null;
36 GeneratedTransferObject unionTypedef = null;
37 GeneratedTransferObject typedefFromImport = null;
38 for (final Type type : genTypes) {
39 if (type instanceof GeneratedTransferObject) {
40 if (type.getName().equals("SimpleTypedef4")) {
41 simpleTypedef4 = (GeneratedTransferObject) type;
42 } else if (type.getName().equals("ExtendedTypedefUnion")) {
43 extendedTypedefUnion = (GeneratedTransferObject) type;
44 } else if (type.getName().equals("UnionTypedef")) {
45 unionTypedef = (GeneratedTransferObject) type;
46 } else if (type.getName().equals("TypedefFromImport")) {
47 typedefFromImport = (GeneratedTransferObject) type;
52 // typedef-from-import
53 assertNotNull("TypedefFromImport not found", typedefFromImport);
54 List<GeneratedProperty> properties = typedefFromImport.getProperties();
55 assertTrue("Properties of TypedefFromImport should be empty", properties.isEmpty());
56 assertEquals("TypedefFromImport should be extended", "Ipv4Address", typedefFromImport.getSuperType().getName());
59 assertNotNull("SimpleTypedef4 not found", simpleTypedef4);
60 assertNotNull("ExtendedTypedefUnion not found", extendedTypedefUnion);
61 assertNotNull("UnionTypedef", unionTypedef);
63 properties = simpleTypedef4.getProperties();
64 assertTrue("SimpleTypedef4 shouldn't have properties.", properties.isEmpty());
66 GeneratedTransferObject extendTO = simpleTypedef4.getSuperType();
67 assertNotNull("SimpleTypedef4 should have extend.", extendTO);
68 assertEquals("Incorrect extension for SimpleTypedef4.", "SimpleTypedef3", extendTO.getName());
69 properties = extendTO.getProperties();
70 assertTrue("SimpleTypedef3 shouldn't have properties.", properties.isEmpty());
72 extendTO = extendTO.getSuperType();
73 assertNotNull("SimpleTypedef3 should have extend.", extendTO);
74 assertEquals("Incorrect extension for SimpleTypedef3.", "SimpleTypedef2", extendTO.getName());
75 properties = extendTO.getProperties();
76 assertTrue("SimpleTypedef2 shouldn't have properties.", properties.isEmpty());
78 extendTO = extendTO.getSuperType();
79 assertNotNull("SimpleTypedef2 should have extend.", extendTO);
80 assertEquals("SimpleTypedef2 should be extended with SimpleTypedef1.", "SimpleTypedef1", extendTO.getName());
81 properties = extendTO.getProperties();
82 assertEquals("Incorrect number of properties in class SimpleTypedef1.", 1, properties.size());
84 assertEquals("Incorrect property's name", "value", properties.get(0).getName());
85 assertEquals("Property's incorrect type", BaseYangTypes.UINT8_TYPE, properties.get(0).getReturnType());
87 extendTO = extendTO.getSuperType();
88 assertNull("SimpleTypedef1 shouldn't have extend.", extendTO);
90 // extended-typedef-union
91 assertNotNull("ExtendedTypedefUnion object not found", extendedTypedefUnion);
92 properties = extendedTypedefUnion.getProperties();
93 assertEquals("ExtendedTypedefUnion shouldn't have any property", 0, properties.size());
95 extendTO = extendedTypedefUnion.getSuperType();
96 assertEquals("Incorrect extension fo ExtendedTypedefUnion.", "UnionTypedef", extendTO.getName());
97 assertNull("UnionTypedef shouldn't be extended", extendTO.getSuperType());
98 assertEquals("Incorrect number of properties for UnionTypedef.", 4, extendTO.getProperties().size());
100 GeneratedProperty simpleTypedef4Property = null;
101 GeneratedProperty simpleTypedef1Property = null;
102 GeneratedProperty byteTypeProperty = null;
103 GeneratedProperty typedefEnumFruitProperty = null;
104 for (GeneratedProperty genProperty : extendTO.getProperties()) {
105 if (genProperty.getName().equals("simpleTypedef1")) {
106 simpleTypedef1Property = genProperty;
107 } else if (genProperty.getName().equals("simpleTypedef4")) {
108 simpleTypedef4Property = genProperty;
109 } else if (genProperty.getName().equals("byteType")) {
110 byteTypeProperty = genProperty;
111 } else if (genProperty.getName().equals("typedefEnumFruit")) {
112 typedefEnumFruitProperty = genProperty;
116 assertNotNull("simpleTypedef4 property not found in UnionTypedef", simpleTypedef4Property);
117 assertNotNull("simpleTypedef1 property not found in UnionTypedef", simpleTypedef1Property);
118 assertNotNull("byteType property not found in UnionTypedef", byteTypeProperty);
119 assertNotNull("typedefEnumFruit property not found in UnionTypedef", typedefEnumFruitProperty);
121 assertEquals("Incorrect type for property simpleTypedef4.", "SimpleTypedef4", simpleTypedef4Property
122 .getReturnType().getName());
123 assertEquals("Incorrect type for property simpleTypedef1.", "SimpleTypedef1", simpleTypedef1Property
124 .getReturnType().getName());
125 assertEquals("Incorrect type for property byteType.", "ByteType", byteTypeProperty.getReturnType().getName());
126 assertEquals("Incorrect type for property typedefEnumFruit.", "TypedefEnumFruit", typedefEnumFruitProperty
127 .getReturnType().getName());