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