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