2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.sal.binding.generator.impl;
\r
10 import static org.junit.Assert.*;
\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
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
29 public class ExtendedTypedefTest {
\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
35 public static void loadTestResources() {
\r
36 final File testFolder = new File(testFolderPath);
\r
38 for (final File fileEntry : testFolder.listFiles()) {
\r
39 if (fileEntry.isFile()) {
\r
40 testModels.add(fileEntry);
\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
51 assertNotNull(context);
\r
52 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
53 final List<Type> genTypes = bindingGen.generateTypes(context);
\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
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
80 assertNotNull("SimpleTypedef4 not found", simpleTypedef4);
\r
81 assertNotNull("ExtendedTypedefUnion not found", extendedTypedefUnion);
\r
82 assertNotNull("UnionTypedef", unionTypedef);
\r
84 properties = simpleTypedef4.getProperties();
\r
85 assertTrue("SimpleTypedef4 shouldn't have properties.", properties.isEmpty());
\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
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
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
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
108 extendTO = extendTO.getSuperType();
\r
109 assertNull("SimpleTypedef1 shouldn't have extend.", extendTO);
\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
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
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
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
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