Fix mdsal-dom-spi dependencies
[mdsal.git] / binding / mdsal-binding-generator / src / test / java / org / opendaylight / mdsal / binding / generator / impl / ExtendedTypedefTest.java
1 /*
2  * Copyright (c) 2016 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.mdsal.binding.generator.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13
14 import java.util.List;
15 import org.junit.Test;
16 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
17 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
18 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
19 import org.opendaylight.mdsal.binding.model.ri.BaseYangTypes;
20 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
21
22 public class ExtendedTypedefTest {
23     @Test
24     public void constantGenerationTest() {
25         final List<GeneratedType> genTypes = DefaultBindingGenerator.generateFor(YangParserTestUtils.parseYangResources(
26             ExtendedTypedefTest.class, "/typedef_of_typedef.yang", "/ietf-models/ietf-inet-types.yang"));
27
28         GeneratedTransferObject simpleTypedef4 = null;
29         GeneratedTransferObject extendedTypedefUnion = null;
30         GeneratedTransferObject unionTypedef = null;
31         GeneratedTransferObject typedefFromImport = null;
32         for (final GeneratedType type : genTypes) {
33             if (type instanceof GeneratedTransferObject) {
34                 if (type.getName().equals("SimpleTypedef4")) {
35                     simpleTypedef4 = (GeneratedTransferObject) type;
36                 } else if (type.getName().equals("ExtendedTypedefUnion")) {
37                     extendedTypedefUnion = (GeneratedTransferObject) type;
38                 } else if (type.getName().equals("UnionTypedef")) {
39                     unionTypedef = (GeneratedTransferObject) type;
40                 } else if (type.getName().equals("TypedefFromImport")) {
41                     typedefFromImport = (GeneratedTransferObject) type;
42                 }
43             }
44         }
45
46         // typedef-from-import
47         assertNotNull("TypedefFromImport not found", typedefFromImport);
48         List<GeneratedProperty> properties = typedefFromImport.getProperties();
49         assertEquals("Properties of TypedefFromImport should be empty", 0, properties.size());
50         assertEquals("TypedefFromImport should be extended", "Ipv4Address", typedefFromImport.getSuperType().getName());
51
52         // simple-typedef4
53         assertNotNull("SimpleTypedef4 not found", simpleTypedef4);
54         assertNotNull("ExtendedTypedefUnion not found", extendedTypedefUnion);
55         assertNotNull("UnionTypedef", unionTypedef);
56
57         properties = simpleTypedef4.getProperties();
58         assertEquals("SimpleTypedef4 shouldn't have properties.", 0, properties.size());
59
60         GeneratedTransferObject extendTO = simpleTypedef4.getSuperType();
61         assertNotNull("SimpleTypedef4 should have extend.", extendTO);
62         assertEquals("Incorrect extension for SimpleTypedef4.", "SimpleTypedef3", extendTO.getName());
63         properties = extendTO.getProperties();
64         assertEquals("SimpleTypedef3 shouldn't have properties.", 0, properties.size());
65
66         extendTO = extendTO.getSuperType();
67         assertNotNull("SimpleTypedef3 should have extend.", extendTO);
68         assertEquals("Incorrect extension for SimpleTypedef3.", "SimpleTypedef2", extendTO.getName());
69         properties = extendTO.getProperties();
70         assertEquals("SimpleTypedef2 shouldn't have properties.", 0, properties.size());
71
72         extendTO = extendTO.getSuperType();
73         assertNotNull("SimpleTypedef2 should have extend.", extendTO);
74         assertEquals("SimpleTypedef2 should be extended with SimpleTypedef1.", "SimpleTypedef1", extendTO.getName());
75         properties = extendTO.getProperties();
76         assertEquals("Incorrect number of properties in class SimpleTypedef1.", 1, properties.size());
77
78         assertEquals("Incorrect property's name", "value", properties.get(0).getName());
79         assertEquals("Property's incorrect type", BaseYangTypes.UINT8_TYPE, properties.get(0).getReturnType());
80
81         extendTO = extendTO.getSuperType();
82         assertNull("SimpleTypedef1 shouldn't have extend.", extendTO);
83
84         // extended-typedef-union
85         assertNotNull("ExtendedTypedefUnion object not found", extendedTypedefUnion);
86         properties = extendedTypedefUnion.getProperties();
87         assertEquals("ExtendedTypedefUnion shouldn't have any property", 0, properties.size());
88
89         extendTO = extendedTypedefUnion.getSuperType();
90         assertEquals("Incorrect extension fo ExtendedTypedefUnion.", "UnionTypedef", extendTO.getName());
91         assertNull("UnionTypedef shouldn't be extended", extendTO.getSuperType());
92
93         properties = extendTO.getProperties();
94         assertEquals("Incorrect number of properties for UnionTypedef.", 4, properties.size());
95
96         GeneratedProperty simpleTypedef4Property = null;
97         GeneratedProperty simpleTypedef1Property = null;
98         GeneratedProperty byteTypeProperty = null;
99         GeneratedProperty typedefEnumFruitProperty = null;
100         for (GeneratedProperty genProperty : properties) {
101             if (genProperty.getName().equals("simpleTypedef1")) {
102                 simpleTypedef1Property = genProperty;
103             } else if (genProperty.getName().equals("simpleTypedef4")) {
104                 simpleTypedef4Property = genProperty;
105             } else if (genProperty.getName().equals("byteType")) {
106                 byteTypeProperty = genProperty;
107             } else if (genProperty.getName().equals("typedefEnumFruit")) {
108                 typedefEnumFruitProperty = genProperty;
109             }
110         }
111
112         assertNotNull("simpleTypedef4 property not found in UnionTypedef", simpleTypedef4Property);
113         assertNotNull("simpleTypedef1 property not found in UnionTypedef", simpleTypedef1Property);
114         assertNotNull("byteType property not found in UnionTypedef", byteTypeProperty);
115         assertNotNull("typedefEnumFruit property not found in UnionTypedef", typedefEnumFruitProperty);
116
117         assertEquals("Incorrect type for property simpleTypedef4.", "SimpleTypedef4", simpleTypedef4Property
118                 .getReturnType().getName());
119         assertEquals("Incorrect type for property simpleTypedef1.", "SimpleTypedef1", simpleTypedef1Property
120                 .getReturnType().getName());
121         assertEquals("Incorrect type for property byteType.", "ByteType", byteTypeProperty.getReturnType().getName());
122         assertEquals("Incorrect type for property typedefEnumFruit.", "TypedefEnumFruit", typedefEnumFruitProperty
123                 .getReturnType().getName());
124     }
125 }