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