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