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