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