Util class for cleaning of generated Java files
[mdsal.git] / binding2 / mdsal-binding2-java-api-generator / src / test / java / org / opendaylight / mdsal / binding / javav2 / java / api / generator / renderers / BuilderRendererTest.java
1 /*
2  * Copyright (c) 2017 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.javav2.java.api.generator.renderers;
9
10 import static org.junit.Assert.assertTrue;
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.spy;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.junit.Test;
17 import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
18 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
19 import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
20 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
21
22 public class BuilderRendererTest {
23     private static final String TEST = "test";
24
25     @Test
26     public void builderTemplateGenerateToStringWithPropertyTest() throws Exception {
27         final GeneratedType genType = mockGenType("get" + TEST);
28         final String generateToString = genToString(genType);
29         assertTrue(generateToString.contains("java.lang.String toString() {"));
30         assertTrue(generateToString.contains("java.lang.String name = \"test [\";"));
31         assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);"));
32         assertTrue(generateToString.contains("if (_test != null) {"));
33         assertTrue(generateToString.contains("builder.append(\"_test=\");"));
34         assertTrue(generateToString.contains("builder.append(_test);"));
35         assertTrue(generateToString.contains("return builder.append(']').toString();"));
36     }
37
38     @Test
39     public void builderTemplateGenerateToStringWithoutAnyPropertyTest() throws Exception {
40         final GeneratedType genType = mockGenType(TEST);
41         final String generateToString = genToString(genType);
42         assertTrue(generateToString.contains("java.lang.String toString() {"));
43         assertTrue(generateToString.contains("java.lang.String name = \"test [\";"));
44         assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);"));
45         assertTrue(generateToString.contains("return builder.append(']').toString();"));
46     }
47
48     @Test
49     public void builderTemplateGenerateToStringWithMorePropertiesTest() throws Exception {
50         final GeneratedType genType = mockGenTypeMoreMeth("get" + TEST);
51         final String generateToString = genToString(genType);
52         assertTrue(generateToString.contains("java.lang.String toString() {"));
53         assertTrue(generateToString.contains("java.lang.String name = \"test [\";"));
54         assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);"));
55         assertTrue(generateToString.contains("if (_test1 != null) {"));
56         assertTrue(generateToString.contains("builder.append(\"_test1=\");"));
57         assertTrue(generateToString.contains("builder.append(_test1);"));
58         assertTrue(generateToString.contains("builder.append(\", \");"));
59         assertTrue(generateToString.contains("if (_test2 != null) {"));
60         assertTrue(generateToString.contains("builder.append(\"_test2=\");"));
61         assertTrue(generateToString.contains("builder.append(_test2);"));
62         assertTrue(generateToString.contains("return builder.append(']').toString();"));
63     }
64
65     @Test
66     public void builderTemplateGenerateToStringWithoutPropertyWithAugmentTest() throws Exception {
67         final GeneratedType genType = mockGenType(TEST);
68         mockAugment(genType);
69         final String generateToString = genToString(genType);
70         assertTrue(generateToString.contains("java.lang.String toString() {"));
71         assertTrue(generateToString.contains("java.lang.String name = \"test [\";"));
72         assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);"));
73         assertTrue(generateToString.contains("builder.append(\"augmentation=\");"));
74         assertTrue(generateToString.contains("builder.append(augmentation.values());"));
75         assertTrue(generateToString.contains("return builder.append(']').toString();"));
76     }
77
78     @Test
79     public void builderTemplateGenerateToStringWithPropertyWithAugmentTest() throws Exception {
80         final GeneratedType genType = mockGenType("get" + TEST);
81         mockAugment(genType);
82         final String generateToString = genToString(genType);
83         assertTrue(generateToString.contains("java.lang.String toString() {"));
84         assertTrue(generateToString.contains("java.lang.String name = \"test [\";"));
85         assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);"));
86         assertTrue(generateToString.contains("if (_test != null) {"));
87         assertTrue(generateToString.contains("builder.append(\"_test=\");"));
88         assertTrue(generateToString.contains("builder.append(_test);"));
89         assertTrue(generateToString.contains("builder.append(\", \");"));
90         assertTrue(generateToString.contains("builder.append(\"augmentation=\");"));
91         assertTrue(generateToString.contains("builder.append(augmentation.values());"));
92         assertTrue(generateToString.contains("return builder.append(']').toString();"));
93     }
94
95     @Test
96     public void builderTemplateGenerateToStringWithMorePropertiesWithAugmentTest() throws Exception {
97         final GeneratedType genType = mockGenTypeMoreMeth("get" + TEST);
98         mockAugment(genType);
99         final String generateToString = genToString(genType).toString();
100         assertTrue(generateToString.contains("if (_test1 != null) {"));
101         assertTrue(generateToString.contains("builder.append(\"_test1=\");"));
102         assertTrue(generateToString.contains("builder.append(_test1);"));
103         assertTrue(generateToString.contains("builder.append(\", \");"));
104         assertTrue(generateToString.contains("if (_test2 != null) {"));
105         assertTrue(generateToString.contains("builder.append(\"_test2=\");"));
106         assertTrue(generateToString.contains("builder.append(_test2);"));
107         assertTrue(generateToString.contains("builder.append(\", \");"));
108         assertTrue(generateToString.contains("builder.append(\"augmentation=\");"));
109         assertTrue(generateToString.contains("builder.append(augmentation.values());"));
110         assertTrue(generateToString.contains("return builder.append(']').toString();"));
111     }
112
113     private void mockAugment(final GeneratedType genType) {
114         final List<Type> impls = new ArrayList<>();
115         final Type impl = mock(Type.class);
116         doReturn("org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable").when(impl)
117                 .getFullyQualifiedName();
118         impls.add(impl);
119         doReturn(impls).when(genType).getImplements();
120     }
121
122     private GeneratedType mockGenTypeMoreMeth(final String methodeName) {
123         final GeneratedType genType = spy(GeneratedType.class);
124         doReturn(TEST).when(genType).getName();
125         doReturn(TEST).when(genType).getPackageName();
126         doReturn(new GeneratedTypeBuilderImpl(new StringBuilder(methodeName).append("test").toString(), methodeName)
127                 .toInstance()).when(genType).getParentTypeForBuilder();
128
129         final List<MethodSignature> listMethodSign = new ArrayList<>();
130         for (int i = 0; i < 2; i++) {
131             final MethodSignature methSign = mockMethSign(methodeName + (i + 1));
132             listMethodSign.add(methSign);
133         }
134         doReturn(listMethodSign).when(genType).getMethodDefinitions();
135
136         final List<Type> impls = new ArrayList<>();
137         doReturn(impls).when(genType).getImplements();
138         return genType;
139     }
140
141     private String genToString(final GeneratedType genType) {
142         final BuilderRenderer bt = new BuilderRenderer(genType);
143         return bt.body();
144     }
145
146     private GeneratedType mockGenType(final String methodeName) {
147         final GeneratedType genType = spy(GeneratedType.class);
148         doReturn(TEST).when(genType).getName();
149         doReturn(TEST).when(genType).getPackageName();
150         doReturn(new GeneratedTypeBuilderImpl(new StringBuilder(methodeName).append("test").toString(), methodeName)
151                 .toInstance()).when(genType).getParentTypeForBuilder();
152
153         final List<MethodSignature> listMethodSign = new ArrayList<>();
154         final MethodSignature methSign = mockMethSign(methodeName);
155         listMethodSign.add(methSign);
156         doReturn(listMethodSign).when(genType).getMethodDefinitions();
157
158         final List<Type> impls = new ArrayList<>();
159         doReturn(impls).when(genType).getImplements();
160         return genType;
161     }
162
163     private MethodSignature mockMethSign(final String methodeName) {
164         final MethodSignature methSign = mock(MethodSignature.class);
165         doReturn(methodeName).when(methSign).getName();
166         final Type methType = mock(Type.class);
167         doReturn(TEST).when(methType).getName();
168         doReturn(TEST).when(methType).getPackageName();
169         doReturn(methType).when(methSign).getReturnType();
170         return methSign;
171     }
172 }