60b732ae706b59f6890c8ce53262b0a20c5398ae
[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.contains("public CompositeKeyListKey(Byte _Key1, String _Key2)"));\r
81 \r
82                     assertEquals(2, propertyCount);\r
83                     genTOsCount++;\r
84                 } else if (genTO.getName().equals("InnerListKey")) {\r
85                     final List<GeneratedProperty> properties = genTO\r
86                             .getProperties();\r
87                     assertEquals(1, properties.size());\r
88                     genTOsCount++;\r
89                 }\r
90             }\r
91         }\r
92 \r
93         assertEquals(5, genTypesCount);\r
94         assertEquals(2, genTOsCount);\r
95     }\r
96 \r
97     @Ignore\r
98     @Test\r
99     public void defaultConstructorTest() {\r
100         final GeneratedTOBuilder toBuilder = new GeneratedTOBuilderImpl(\r
101                 "simple.pack", "DefCtor");\r
102 \r
103         GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo");\r
104         propBuilder.setReturnType(Types.typeForClass(String.class));\r
105         propBuilder.setReadOnly(false);\r
106 \r
107         propBuilder = toBuilder.addProperty("bar");\r
108         propBuilder.setReturnType(Types.typeForClass(Integer.class));\r
109         propBuilder.setReadOnly(false);\r
110 \r
111         final GeneratedTransferObject genTO = toBuilder.toInstance();\r
112 \r
113         final TOGenerator clsGen = new TOGenerator();\r
114         final String outputStr = clsGen.generate(genTO);\r
115 \r
116         assertNotNull(outputStr);\r
117         assertTrue(outputStr.contains("public DefCtor()"));\r
118     }\r
119 \r
120     @Test\r
121     public void toStringTest() {\r
122         final GeneratedTOBuilder toBuilder = new GeneratedTOBuilderImpl(\r
123                 "simple.pack", "DefCtor");\r
124 \r
125         GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo");\r
126         propBuilder.setReturnType(Types.typeForClass(String.class));\r
127         propBuilder.setReadOnly(false);\r
128         toBuilder.addToStringProperty(propBuilder);\r
129 \r
130         propBuilder = toBuilder.addProperty("bar");\r
131         propBuilder.setReturnType(Types.typeForClass(Integer.class));\r
132         propBuilder.setReadOnly(false);\r
133         toBuilder.addToStringProperty(propBuilder);\r
134         final GeneratedTransferObject genTO = toBuilder.toInstance();\r
135         final TOGenerator clsGen = new TOGenerator();\r
136         assertNotNull(clsGen.generate(genTO));\r
137     }\r
138 }\r