Merge "When a node is going down, remove edges in both directions associated with...
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / test / java / org / opendaylight / controller / sal / binding / generator / impl / ExtendedTypedefTest.java
1 package org.opendaylight.controller.sal.binding.generator.impl;
2
3 import static org.junit.Assert.assertNotNull;
4 import static org.junit.Assert.assertTrue;
5 import static org.junit.Assert.assertEquals;
6 import static org.junit.Assert.assertNull;
7 import static org.junit.Assert.assertFalse;
8
9 import java.io.File;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Set;
13
14 import org.junit.BeforeClass;
15 import org.junit.Test;
16 import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;
17 import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;
18 import org.opendaylight.controller.sal.binding.model.api.Constant;
19 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
20 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
21 import org.opendaylight.controller.sal.binding.model.api.ParameterizedType;
22 import org.opendaylight.controller.sal.binding.model.api.Type;
23 import org.opendaylight.controller.sal.binding.yang.types.BaseYangTypes;
24 import org.opendaylight.controller.yang.model.api.Module;
25 import org.opendaylight.controller.yang.model.api.SchemaContext;
26 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;
27 import org.opendaylight.controller.yang.parser.impl.YangParserImpl;
28
29 public class ExtendedTypedefTest {
30
31     private final static List<File> testModels = new ArrayList<File>();
32
33     @BeforeClass
34     public static void loadTestResources() {
35         final File listModelFile = new File(ExtendedTypedefTest.class.getResource("/typedef_of_typedef.yang").getPath());
36         testModels.add(listModelFile);
37     }
38
39     @Test    
40     public void constantGenerationTest() {
41         final YangModelParser parser = new YangParserImpl();
42         final Set<Module> modules = parser.parseYangModels(testModels);
43         final SchemaContext context = parser.resolveSchemaContext(modules);
44
45         assertNotNull(context);
46         final BindingGenerator bindingGen = new BindingGeneratorImpl();
47         final List<Type> genTypes = bindingGen.generateTypes(context);
48
49         GeneratedTransferObject simpleTypedef4 = null;
50         GeneratedTransferObject extendedTypedefUnion = null;
51         GeneratedTransferObject unionTypedef = null;
52         for (final Type type : genTypes) {
53             if (type instanceof GeneratedTransferObject) {
54                 if (type.getName().equals("SimpleTypedef4")) {
55                     simpleTypedef4 = (GeneratedTransferObject) type;
56                 } else if (type.getName().equals("ExtendedTypedefUnion")) {
57                     extendedTypedefUnion = (GeneratedTransferObject) type;
58                 } else if (type.getName().equals("UnionTypedef")) {
59                     unionTypedef = (GeneratedTransferObject) type;
60                 }
61             }
62         }
63
64         // simple-typedef4
65         assertNotNull("SimpleTypedef4 not found", simpleTypedef4);
66         assertNotNull("ExtendedTypedefUnion not found", extendedTypedefUnion);
67         assertNotNull("UnionTypedef", unionTypedef);
68
69         List<GeneratedProperty> properties = simpleTypedef4.getProperties();
70         assertTrue("SimpleTypedef4 shouldn't have properties.", properties.isEmpty());
71
72         GeneratedTransferObject extendTO = simpleTypedef4.getExtends();
73         assertNotNull("SimpleTypedef4 should have extend.", extendTO);
74         assertEquals("Incorrect extension for SimpleTypedef4.", "SimpleTypedef3", extendTO.getName());
75         properties = extendTO.getProperties();
76         assertTrue("SimpleTypedef3 shouldn't have properties.", properties.isEmpty());
77
78         extendTO = extendTO.getExtends();
79         assertNotNull("SimpleTypedef3 should have extend.", extendTO);
80         assertEquals("Incorrect extension for SimpleTypedef3.", "SimpleTypedef2", extendTO.getName());
81         properties = extendTO.getProperties();
82         assertTrue("SimpleTypedef2 shouldn't have properties.", properties.isEmpty());
83
84         extendTO = extendTO.getExtends();
85         assertNotNull("SimpleTypedef2 should have extend.", extendTO);
86         assertEquals("SimpleTypedef2 should be extended with SimpleTypedef1.", "SimpleTypedef1", extendTO.getName());
87         properties = extendTO.getProperties();
88         assertEquals("Incorrect number of properties in class SimpleTypedef1.", 1, properties.size());
89
90         assertEquals("Incorrect property's name", "simpleTypedef1", properties.get(0).getName());
91         assertEquals("Property's incorrect type", BaseYangTypes.UINT8_TYPE, properties.get(0).getReturnType());
92
93         extendTO = extendTO.getExtends();
94         assertNull("SimpleTypedef1 shouldn't have extend.", extendTO);
95
96         // extended-typedef-union
97         assertNotNull("ExtendedTypedefUnion object not found", extendedTypedefUnion);
98         properties = extendedTypedefUnion.getProperties();
99         assertTrue("ExtendedTypedefUnion shouldn't have any property", properties.isEmpty());
100
101         extendTO = extendedTypedefUnion.getExtends();
102         assertEquals("Incorrect extension fo ExtendedTypedefUnion.", "UnionTypedef", extendTO.getName());
103         assertNull("UnionTypedef shouldn't be extended", extendTO.getExtends());
104         assertEquals("Incorrect number of properties for UnionTypedef.", 4, extendTO.getProperties().size());
105
106         GeneratedProperty simpleTypedef4Property = null;
107         GeneratedProperty simpleTypedef1Property = null;
108         GeneratedProperty byteTypeProperty = null;
109         GeneratedProperty typedefEnumFruitProperty = null;
110         for (GeneratedProperty genProperty : extendTO.getProperties()) {
111             if (genProperty.getName().equals("simpleTypedef1")) {
112                 simpleTypedef1Property = genProperty;
113             } else if (genProperty.getName().equals("simpleTypedef4")) {
114                 simpleTypedef4Property = genProperty;
115             } else if (genProperty.getName().equals("byteType")) {
116                 byteTypeProperty = genProperty;
117             } else if (genProperty.getName().equals("typedefEnumFruit")) {
118                 typedefEnumFruitProperty = genProperty;
119             }
120         }
121
122         assertNotNull("simpleTypedef4 property not found in UnionTypedef", simpleTypedef4Property);
123         assertNotNull("simpleTypedef1 property not found in UnionTypedef", simpleTypedef1Property);
124         assertNotNull("byteType property not found in UnionTypedef", byteTypeProperty);
125         assertNotNull("typedefEnumFruit property not found in UnionTypedef", typedefEnumFruitProperty);
126
127         assertEquals("Incorrect type for property simpleTypedef4.", "SimpleTypedef4", simpleTypedef4Property
128                 .getReturnType().getName());
129         assertEquals("Incorrect type for property simpleTypedef1.", "SimpleTypedef1", simpleTypedef1Property
130                 .getReturnType().getName());
131         assertEquals("Incorrect type for property byteType.", "ByteType", byteTypeProperty
132                 .getReturnType().getName());
133         assertEquals("Incorrect type for property typedefEnumFruit.", "TypedefEnumFruit", typedefEnumFruitProperty
134                 .getReturnType().getName());
135     }
136
137 }