Comment to binding-generator source code (partially) + bug fixing
[yangtools.git] / code-generator / binding-generator-impl / src / test / java / org / opendaylight / yangtools / sal / binding / generator / impl / ExtendedTypedefTest.java
1 package org.opendaylight.yangtools.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.yangtools.sal.binding.generator.api.BindingGenerator;
13 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
14 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
15 import org.opendaylight.yangtools.sal.binding.model.api.Type;
16 import org.opendaylight.yangtools.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     private final static String testFolderPath = AugmentedTypeTest.class.getResource("/typedef-of-typedef").getPath();
26
27     @BeforeClass
28     public static void loadTestResources() {
29         final File testFolder = new File(testFolderPath);
30
31         for (final File fileEntry : testFolder.listFiles()) {
32             if (fileEntry.isFile()) {
33                 testModels.add(fileEntry);
34             }
35         }
36     }
37
38     @Test
39     public void constantGenerationTest() {
40         final YangModelParser parser = new YangParserImpl();
41         final Set<Module> modules = parser.parseYangModels(testModels);
42         final SchemaContext context = parser.resolveSchemaContext(modules);
43
44         assertNotNull(context);
45         final BindingGenerator bindingGen = new BindingGeneratorImpl();
46         final List<Type> genTypes = bindingGen.generateTypes(context);
47
48         GeneratedTransferObject simpleTypedef4 = null;
49         GeneratedTransferObject extendedTypedefUnion = null;
50         GeneratedTransferObject unionTypedef = null;
51         GeneratedTransferObject typedefFromImport = 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                 } else if (type.getName().equals("TypedefFromImport")) {
61                     typedefFromImport = (GeneratedTransferObject) type;
62                 }
63             }
64         }
65
66         // typedef-from-import
67         assertNotNull("TypedefFromImport not found", typedefFromImport);
68         List<GeneratedProperty> properties = typedefFromImport.getProperties();
69         assertTrue("Properties of TypedefFromImport should be empty", properties.isEmpty());
70         assertEquals("TypedefFromImport should be extended", "Ipv4Address", typedefFromImport.getExtends().getName());
71
72         // simple-typedef4
73         assertNotNull("SimpleTypedef4 not found", simpleTypedef4);
74         assertNotNull("ExtendedTypedefUnion not found", extendedTypedefUnion);
75         assertNotNull("UnionTypedef", unionTypedef);
76
77         properties = simpleTypedef4.getProperties();
78         assertTrue("SimpleTypedef4 shouldn't have properties.", properties.isEmpty());
79
80         GeneratedTransferObject extendTO = simpleTypedef4.getExtends();
81         assertNotNull("SimpleTypedef4 should have extend.", extendTO);
82         assertEquals("Incorrect extension for SimpleTypedef4.", "SimpleTypedef3", extendTO.getName());
83         properties = extendTO.getProperties();
84         assertTrue("SimpleTypedef3 shouldn't have properties.", properties.isEmpty());
85
86         extendTO = extendTO.getExtends();
87         assertNotNull("SimpleTypedef3 should have extend.", extendTO);
88         assertEquals("Incorrect extension for SimpleTypedef3.", "SimpleTypedef2", extendTO.getName());
89         properties = extendTO.getProperties();
90         assertTrue("SimpleTypedef2 shouldn't have properties.", properties.isEmpty());
91
92         extendTO = extendTO.getExtends();
93         assertNotNull("SimpleTypedef2 should have extend.", extendTO);
94         assertEquals("SimpleTypedef2 should be extended with SimpleTypedef1.", "SimpleTypedef1", extendTO.getName());
95         properties = extendTO.getProperties();
96         assertEquals("Incorrect number of properties in class SimpleTypedef1.", 1, properties.size());
97
98         assertEquals("Incorrect property's name", "simpleTypedef1", properties.get(0).getName());
99         assertEquals("Property's incorrect type", BaseYangTypes.UINT8_TYPE, properties.get(0).getReturnType());
100
101         extendTO = extendTO.getExtends();
102         assertNull("SimpleTypedef1 shouldn't have extend.", extendTO);
103
104         // extended-typedef-union
105         assertNotNull("ExtendedTypedefUnion object not found", extendedTypedefUnion);
106         properties = extendedTypedefUnion.getProperties();
107         assertTrue("ExtendedTypedefUnion shouldn't have any property", properties.isEmpty());
108
109         extendTO = extendedTypedefUnion.getExtends();
110         assertEquals("Incorrect extension fo ExtendedTypedefUnion.", "UnionTypedef", extendTO.getName());
111         assertNull("UnionTypedef shouldn't be extended", extendTO.getExtends());
112         assertEquals("Incorrect number of properties for UnionTypedef.", 4, extendTO.getProperties().size());
113
114         GeneratedProperty simpleTypedef4Property = null;
115         GeneratedProperty simpleTypedef1Property = null;
116         GeneratedProperty byteTypeProperty = null;
117         GeneratedProperty typedefEnumFruitProperty = null;
118         for (GeneratedProperty genProperty : extendTO.getProperties()) {
119             if (genProperty.getName().equals("simpleTypedef1")) {
120                 simpleTypedef1Property = genProperty;
121             } else if (genProperty.getName().equals("simpleTypedef4")) {
122                 simpleTypedef4Property = genProperty;
123             } else if (genProperty.getName().equals("byteType")) {
124                 byteTypeProperty = genProperty;
125             } else if (genProperty.getName().equals("typedefEnumFruit")) {
126                 typedefEnumFruitProperty = genProperty;
127             }
128         }
129
130         assertNotNull("simpleTypedef4 property not found in UnionTypedef", simpleTypedef4Property);
131         assertNotNull("simpleTypedef1 property not found in UnionTypedef", simpleTypedef1Property);
132         assertNotNull("byteType property not found in UnionTypedef", byteTypeProperty);
133         assertNotNull("typedefEnumFruit property not found in UnionTypedef", typedefEnumFruitProperty);
134
135         assertEquals("Incorrect type for property simpleTypedef4.", "SimpleTypedef4", simpleTypedef4Property
136                 .getReturnType().getName());
137         assertEquals("Incorrect type for property simpleTypedef1.", "SimpleTypedef1", simpleTypedef1Property
138                 .getReturnType().getName());
139         assertEquals("Incorrect type for property byteType.", "ByteType", byteTypeProperty.getReturnType().getName());
140         assertEquals("Incorrect type for property typedefEnumFruit.", "TypedefEnumFruit", typedefEnumFruitProperty
141                 .getReturnType().getName());
142     }
143
144 }