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