Remove parent type references
[mdsal.git] / binding / mdsal-binding-generator-util / src / test / java / org / opendaylight / mdsal / binding / model / util / generated / type / builder / GeneratedTypeBuilderTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.mdsal.binding.model.util.generated.type.builder;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14
15 import java.io.Serializable;
16 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.model.api.Constant;
19 import org.opendaylight.mdsal.binding.model.api.Enumeration;
20 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
21 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
22 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
23 import org.opendaylight.mdsal.binding.model.api.MethodSignature;
24 import org.opendaylight.mdsal.binding.model.api.Type;
25 import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
26 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder;
27 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
28 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
29 import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder;
30 import org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil;
31 import org.opendaylight.mdsal.binding.model.util.TypeComments;
32 import org.opendaylight.mdsal.binding.model.util.Types;
33 import org.opendaylight.yangtools.yang.common.QName;
34 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
35
36 public class GeneratedTypeBuilderTest {
37
38     @Test
39     public void addConstantTest() {
40         GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
41             JavaTypeName.create("my.package", "MyName"));
42
43         // assertNotNull(generatedTypeBuilder.addComment("My comment ..."));
44
45         Constant constant = generatedTypeBuilder.addConstant(Types.typeForClass(String.class), "myConstant",
46                 "myConstantValue");
47         // Constant constantx =
48         // generatedTypeBuilder.addConstant(Types.typeForClass(String.class),
49         // "myConstant", "myConstantValue");
50         Constant constant2 = generatedTypeBuilder.addConstant(
51                 Types.typeForClass(int.class, BindingGeneratorUtil.getRestrictions(null)), "myIntConstant", 1);
52
53         Constant constant3 = new ConstantImpl(Types.typeForClass(String.class), "myConstant", "myConstantValue");
54         final Constant constant4 = new ConstantImpl(Types.typeForClass(String.class), "myConstant2", "myConstantValue");
55         final Constant constant5 = new ConstantImpl(Types.typeForClass(String.class), "myConstant", "myConstantValue2");
56
57         assertNotNull(constant);
58         assertNotNull(constant2);
59         assertNotNull(constant3);
60         assertNotNull(constant4);
61         assertNotNull(constant5);
62         // assertNotNull(constantx);
63         // assertTrue(constant!=constantx);
64
65         assertFalse(constant.equals(null));
66         assertFalse(constant.equals(new Object()));
67         assertTrue(constant.equals(constant));
68         assertTrue(constant.equals(constant3));
69         assertFalse(constant.equals(constant2));
70         assertFalse(constant.equals(constant4));
71         assertFalse(constant.equals(constant5));
72
73         assertTrue(constant.hashCode() == constant.hashCode());
74         assertTrue(constant.hashCode() == constant3.hashCode());
75         assertFalse(constant.hashCode() == constant2.hashCode());
76         assertFalse(constant.hashCode() == constant4.hashCode());
77         assertTrue(constant.hashCode() == constant5.hashCode());
78
79         assertEquals("Constant [type=Type (java.lang.String), name=myConstant, value=myConstantValue]",
80             constant.toString());
81
82         assertEquals("Type (java.lang.String) myConstant myConstantValue", constant.toFormattedString());
83
84         GeneratedType instance = generatedTypeBuilder.build();
85         List<Constant> constantDefinitions = instance.getConstantDefinitions();
86         assertNotNull(constantDefinitions);
87         assertEquals(2, constantDefinitions.size());
88         assertTrue(constantDefinitions.contains(constant));
89         assertTrue(constantDefinitions.contains(constant2));
90         assertTrue(constantDefinitions.contains(constant3));
91         assertFalse(constantDefinitions.contains(constant4));
92         assertFalse(constantDefinitions.contains(constant5));
93
94         assertEquals("myConstant", constant.getName());
95         assertEquals("myConstantValue", constant.getValue());
96         assertEquals(Types.typeForClass(String.class), constant.getType());
97     }
98
99     @Test(expected = IllegalArgumentException.class)
100     public void addConstantIllegalArgumentTest() {
101         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addConstant(
102             Types.typeForClass(String.class), null, "myConstantValue");
103     }
104
105     @Test(expected = IllegalArgumentException.class)
106     public void addConstantIllegalArgumentTest2() {
107         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addConstant(null, "myConstantName",
108             "myConstantValue");
109     }
110
111     @Test
112     public void generatedTypeBuilderEqualsAndHashCodeTest() {
113         final CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
114             JavaTypeName.create("my.package", "MyName"));
115         final CodegenGeneratedTypeBuilder generatedTypeBuilder2 = new CodegenGeneratedTypeBuilder(
116             JavaTypeName.create("my.package", "MyName"));
117         final CodegenGeneratedTypeBuilder generatedTypeBuilder3 = new CodegenGeneratedTypeBuilder(
118             JavaTypeName.create("my.package", "MyName2"));
119         final CodegenGeneratedTypeBuilder generatedTypeBuilder4 = new CodegenGeneratedTypeBuilder(
120             JavaTypeName.create("my.package2", "MyName"));
121
122         assertFalse(generatedTypeBuilder.equals(null));
123         assertFalse(generatedTypeBuilder.equals(new Object()));
124         assertTrue(generatedTypeBuilder.equals(generatedTypeBuilder));
125         assertTrue(generatedTypeBuilder.equals(generatedTypeBuilder2));
126
127         assertTrue(generatedTypeBuilder.hashCode() == generatedTypeBuilder.hashCode());
128         assertTrue(generatedTypeBuilder.hashCode() == generatedTypeBuilder2.hashCode());
129         assertFalse(generatedTypeBuilder.hashCode() == generatedTypeBuilder3.hashCode());
130         assertFalse(generatedTypeBuilder.hashCode() == generatedTypeBuilder4.hashCode());
131
132     }
133
134     @Test
135     public void addPropertyTest() {
136         CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
137             JavaTypeName.create("my.package", "MyName"));
138
139         GeneratedPropertyBuilder propertyBuilder = generatedTypeBuilder.addProperty("myProperty");
140         GeneratedPropertyBuilder propertyBuilder2 = generatedTypeBuilder.addProperty("myProperty2");
141         // GeneratedPropertyBuilder propertyBuilderNull =
142         // generatedTypeBuilder.addProperty(null);
143
144         assertNotNull(propertyBuilder);
145         assertNotNull(propertyBuilder2);
146         // assertNotNull(propertyBuilderNull);
147
148         assertTrue(generatedTypeBuilder.containsProperty("myProperty"));
149         assertTrue(generatedTypeBuilder.containsProperty("myProperty2"));
150         assertFalse(generatedTypeBuilder.containsProperty("myProperty3"));
151
152         GeneratedType instance = generatedTypeBuilder.build();
153         List<GeneratedProperty> properties = instance.getProperties();
154
155         assertEquals(2, properties.size());
156
157         assertTrue(properties.contains(propertyBuilder.toInstance()));
158         assertTrue(properties.contains(propertyBuilder2.toInstance()));
159         // assertTrue(properties.contains(propertyBuilderNull.toInstance(instance)));
160         assertFalse(properties.contains(new GeneratedPropertyBuilderImpl("myProperty3").toInstance()));
161
162     }
163
164     @Test(expected = IllegalArgumentException.class)
165     public void addMethodIllegalArgumentTest() {
166         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addMethod(null);
167     }
168
169     @Test
170     public void addMethodTest() {
171         GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
172             JavaTypeName.create("my.package", "MyName"));
173
174         MethodSignatureBuilder methodBuilder = generatedTypeBuilder.addMethod("myMethodName");
175         MethodSignatureBuilder methodBuilder2 = generatedTypeBuilder.addMethod("myMethodName2");
176
177         assertNotNull(methodBuilder);
178         assertNotNull(methodBuilder2);
179
180         assertTrue(generatedTypeBuilder.containsMethod("myMethodName"));
181         assertTrue(generatedTypeBuilder.containsMethod("myMethodName2"));
182         assertFalse(generatedTypeBuilder.containsMethod("myMethodName3"));
183
184         GeneratedType instance = generatedTypeBuilder.build();
185         List<MethodSignature> methodDefinitions = instance.getMethodDefinitions();
186
187         assertEquals(2, methodDefinitions.size());
188
189         assertTrue(methodDefinitions.contains(methodBuilder.toInstance(instance)));
190         assertTrue(methodDefinitions.contains(methodBuilder2.toInstance(instance)));
191         assertFalse(methodDefinitions.contains(new MethodSignatureBuilderImpl("myMethodName3").toInstance(instance)));
192
193     }
194
195     @Test(expected = IllegalArgumentException.class)
196     public void addEnumerationIllegalArgumentTest() {
197         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addEnumeration(null);
198     }
199
200     @Test
201     public void addEnumerationTest() {
202         GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
203             JavaTypeName.create("my.package", "MyName"));
204
205         EnumBuilder enumBuilder = generatedTypeBuilder.addEnumeration("myEnumName");
206         EnumBuilder enumBuilder2 = generatedTypeBuilder.addEnumeration("myEnumName2");
207
208         assertNotNull(enumBuilder);
209         assertNotNull(enumBuilder2);
210
211         GeneratedType instance = generatedTypeBuilder.build();
212         List<Enumeration> enumerations = instance.getEnumerations();
213
214         assertEquals(2, enumerations.size());
215
216         assertTrue(enumerations.contains(enumBuilder.toInstance()));
217         assertTrue(enumerations.contains(enumBuilder2.toInstance()));
218         assertFalse(enumerations.contains(new CodegenEnumerationBuilder(JavaTypeName.create("my.package",
219             "myEnumName3")).toInstance()));
220
221     }
222
223     @Test(expected = IllegalArgumentException.class)
224     public void addImplementsTypeIllegalArgumentTest() {
225         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addImplementsType(null);
226     }
227
228     @Test
229     public void addImplementsTypeTest() {
230         CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
231             JavaTypeName.create("my.package", "MyName"));
232
233         assertEquals(generatedTypeBuilder,
234                 generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)));
235         assertEquals(generatedTypeBuilder, generatedTypeBuilder.addImplementsType(Types.typeForClass(Runnable.class)));
236
237         GeneratedType instance = generatedTypeBuilder.build();
238         List<Type> implementTypes = instance.getImplements();
239
240         assertEquals(2, implementTypes.size());
241
242         assertTrue(implementTypes.contains(Types.typeForClass(Serializable.class)));
243         assertTrue(implementTypes.contains(Types.typeForClass(Runnable.class)));
244         assertFalse(implementTypes.contains(Types.typeForClass(Throwable.class)));
245     }
246
247     @Test(expected = IllegalArgumentException.class)
248     public void addEnclosingTransferObjectIllegalArgumentTest() {
249         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addEnclosingTransferObject(
250             (String) null);
251     }
252
253     @Test(expected = IllegalArgumentException.class)
254     public void addEnclosingTransferObjectIllegalArgumentTest2() {
255         new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addEnclosingTransferObject(
256             (GeneratedTOBuilder) null);
257     }
258
259     @Test
260     public void addEnclosingTransferObjectTest() {
261         GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
262             JavaTypeName.create("my.package", "MyName"));
263
264         GeneratedTOBuilder enclosingTransferObject = generatedTypeBuilder.addEnclosingTransferObject("myTOName");
265         GeneratedTOBuilder enclosingTransferObject2 = generatedTypeBuilder.addEnclosingTransferObject("myTOName2");
266         assertEquals(generatedTypeBuilder, generatedTypeBuilder.addEnclosingTransferObject(
267             new CodegenGeneratedTOBuilder(generatedTypeBuilder.getIdentifier().createEnclosed("myTOName3"))));
268
269         assertNotNull(enclosingTransferObject);
270         assertNotNull(enclosingTransferObject2);
271
272         GeneratedType instance = generatedTypeBuilder.build();
273         List<GeneratedType> enclosedTypes = instance.getEnclosedTypes();
274
275         assertEquals(3, enclosedTypes.size());
276
277         assertTrue(enclosedTypes.contains(enclosingTransferObject.build()));
278         assertTrue(enclosedTypes.contains(enclosingTransferObject2.build()));
279         assertTrue(enclosedTypes.contains(new CodegenGeneratedTOBuilder(
280             generatedTypeBuilder.getIdentifier().createEnclosed("myTOName3")).build()));
281         assertFalse(enclosedTypes.contains(new CodegenGeneratedTOBuilder(
282             generatedTypeBuilder.getIdentifier().createEnclosed("myTOName4")).build()));
283     }
284
285     @Test
286     public void generatedTypeTest() {
287         GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder(
288             JavaTypeName.create("my.package", "MyName"));
289
290         generatedTypeBuilder.setDescription("My description ...");
291         generatedTypeBuilder.setModuleName("myModuleName");
292         generatedTypeBuilder.setReference("myReference");
293         generatedTypeBuilder.setSchemaPath(SchemaPath.create(true, QName.create("test", "path")));
294         assertNotNull(generatedTypeBuilder.addComment(TypeComments.javadoc("My comment..").get()));
295
296         assertEquals(
297                 "GeneratedTransferObject [packageName=my.package, name=MyName, comment=My comment.., annotations=[], "
298                         + "implements=[], enclosedTypes=[], constants=[], enumerations=[], properties=, methods=[]]",
299                         generatedTypeBuilder.toString());
300
301         GeneratedType instance = generatedTypeBuilder.build();
302
303         assertEquals("My description ...", instance.getDescription());
304         assertEquals("myModuleName", instance.getModuleName());
305         assertEquals("myReference", instance.getReference());
306         assertEquals(SchemaPath.create(true, QName.create("test", "path")).getPathFromRoot(),
307             instance.getSchemaPath());
308         assertEquals("My comment..", instance.getComment().getJavadoc());
309     }
310 }