Added model generation from ietf-topology models
[yangtools.git] / code-generator / binding-java-api-generator / src / test / java / org / opendaylight / yangtools / sal / java / api / generator / test / ClassCodeGeneratorTest.java
1 package org.opendaylight.yangtools.sal.java.api.generator.test;\r
2 \r
3 import static org.junit.Assert.*;\r
4 \r
5 import java.io.File;\r
6 import java.io.IOException;\r
7 import java.io.Writer;\r
8 import java.util.ArrayList;\r
9 import java.util.List;\r
10 import java.util.Set;\r
11 \r
12 import org.junit.BeforeClass;\r
13 import org.junit.Test;\r
14 import org.opendaylight.yangtools.binding.generator.util.Types;\r
15 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;\r
16 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;\r
17 import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl;\r
18 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;\r
19 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;\r
20 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;\r
21 import org.opendaylight.yangtools.sal.binding.model.api.Type;\r
22 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;\r
23 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;\r
24 import org.opendaylight.yangtools.sal.java.api.generator.TOGenerator;\r
25 import org.opendaylight.yangtools.yang.model.api.Module;\r
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;\r
27 import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;\r
28 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;\r
29 \r
30 public class ClassCodeGeneratorTest {\r
31 \r
32     private final static List<File> testModels = new ArrayList<File>();\r
33 \r
34     @BeforeClass\r
35     public static void loadTestResources() {\r
36         final File listModelFile = new File(ClassCodeGeneratorTest.class\r
37                 .getResource("/list-composite-key.yang").getPath());\r
38         testModels.add(listModelFile);\r
39     }\r
40 \r
41     @Test\r
42     public void compositeKeyClassTest() {\r
43         final YangModelParser parser = new YangParserImpl();\r
44         final Set<Module> modules = parser.parseYangModels(testModels);\r
45         final SchemaContext context = parser.resolveSchemaContext(modules);\r
46 \r
47         assertNotNull(context);\r
48         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
49         final List<Type> genTypes = bindingGen.generateTypes(context);\r
50 \r
51         assertTrue(genTypes != null);\r
52         assertEquals(7, genTypes.size());\r
53 \r
54         int genTypesCount = 0;\r
55         int genTOsCount = 0;\r
56         for (final Type type : genTypes) {\r
57             if (type instanceof GeneratedType\r
58                     && !(type instanceof GeneratedTransferObject)) {\r
59                 genTypesCount++;\r
60             } else if (type instanceof GeneratedTransferObject) {\r
61                 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;\r
62 \r
63                 if (genTO.getName().equals("CompositeKeyListKey")) {\r
64                     final List<GeneratedProperty> properties = genTO\r
65                             .getProperties();\r
66                     int propertyCount = 0;\r
67                     for (final GeneratedProperty prop : properties) {\r
68                         if (prop.getName().equals("Key1")) {\r
69                             propertyCount++;\r
70                         } else if (prop.getName().equals("Key2")) {\r
71                             propertyCount++;\r
72                         }\r
73                     }\r
74 \r
75                     final TOGenerator clsGen = new TOGenerator();\r
76                     try {\r
77                         final Writer writer = clsGen.generate(genTO);\r
78                         assertNotNull(writer);\r
79 \r
80                         final String outputStr = writer.toString();\r
81                         writer.close();\r
82 \r
83                         assertNotNull(outputStr);\r
84                         assertTrue(outputStr\r
85                                 .contains("public CompositeKeyListKey(String Key2, "\r
86                                         + "Byte Key1)"));\r
87 \r
88                     } catch (IOException e) {\r
89                         e.printStackTrace();\r
90                     }\r
91 \r
92                     assertEquals(2, propertyCount);\r
93                     genTOsCount++;\r
94                 } else if (genTO.getName().equals("InnerListKey")) {\r
95                     final List<GeneratedProperty> properties = genTO\r
96                             .getProperties();\r
97                     assertEquals(1, properties.size());\r
98                     genTOsCount++;\r
99                 }\r
100             }\r
101         }\r
102 \r
103         assertEquals(5, genTypesCount);\r
104         assertEquals(2, genTOsCount);\r
105     }\r
106 \r
107     @Test\r
108     public void defaultConstructorTest() {\r
109         final GeneratedTOBuilder toBuilder = new GeneratedTOBuilderImpl(\r
110                 "simple.pack", "DefCtor");\r
111 \r
112         GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo");\r
113         propBuilder.setReturnType(Types.typeForClass(String.class));\r
114         propBuilder.setReadOnly(false);\r
115 \r
116         propBuilder = toBuilder.addProperty("bar");\r
117         propBuilder.setReturnType(Types.typeForClass(Integer.class));\r
118         propBuilder.setReadOnly(false);\r
119 \r
120         final GeneratedTransferObject genTO = toBuilder.toInstance();\r
121 \r
122         final TOGenerator clsGen = new TOGenerator();\r
123         try {\r
124             final Writer writer = clsGen.generate(genTO);\r
125             assertNotNull(writer);\r
126 \r
127             final String outputStr = writer.toString();\r
128             writer.close();\r
129 \r
130             assertNotNull(outputStr);\r
131             assertTrue(outputStr.contains("public DefCtor()"));\r
132 \r
133         } catch (IOException e) {\r
134             e.printStackTrace();\r
135         }\r
136     }\r
137 \r
138     @Test\r
139     public void toStringTest() {\r
140         final GeneratedTOBuilder toBuilder = new GeneratedTOBuilderImpl(\r
141                 "simple.pack", "DefCtor");\r
142 \r
143         GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo");\r
144         propBuilder.setReturnType(Types.typeForClass(String.class));\r
145         propBuilder.setReadOnly(false);\r
146         toBuilder.addToStringProperty(propBuilder);\r
147 \r
148         propBuilder = toBuilder.addProperty("bar");\r
149         propBuilder.setReturnType(Types.typeForClass(Integer.class));\r
150         propBuilder.setReadOnly(false);\r
151         toBuilder.addToStringProperty(propBuilder);\r
152         final GeneratedTransferObject genTO = toBuilder.toInstance();\r
153         final TOGenerator clsGen = new TOGenerator();\r
154         try {\r
155             final Writer writer = clsGen.generate(genTO);\r
156             assertNotNull(writer);\r
157         } catch (IOException e) {\r
158             e.printStackTrace();\r
159         }\r
160     }\r
161 }\r