2d83c9ac1668426b3d85a770a3cef11db321afc8
[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.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                     final String outputStr = clsGen.generate(genTO);\r
77 \r
78                     assertNotNull(outputStr);\r
79                     assertTrue(outputStr\r
80                             .contains("public CompositeKeyListKey(String _Key2, "\r
81                                     + "Byte _Key1)"));\r
82 \r
83                     assertEquals(2, propertyCount);\r
84                     genTOsCount++;\r
85                 } else if (genTO.getName().equals("InnerListKey")) {\r
86                     final List<GeneratedProperty> properties = genTO\r
87                             .getProperties();\r
88                     assertEquals(1, properties.size());\r
89                     genTOsCount++;\r
90                 }\r
91             }\r
92         }\r
93 \r
94         assertEquals(5, genTypesCount);\r
95         assertEquals(2, genTOsCount);\r
96     }\r
97 \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