Bug 3147 - Improve generating of toString() method in builderTemplate
[mdsal.git] / binding2 / mdsal-binding2-java-api-generator / src / main / test / 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.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
127         final List<MethodSignature> listMethodSign = new ArrayList<>();
128         for (int i = 0; i < 2; i++) {
129             final MethodSignature methSign = mockMethSign(methodeName + (i + 1));
130             listMethodSign.add(methSign);
131         }
132         doReturn(listMethodSign).when(genType).getMethodDefinitions();
133
134         final List<Type> impls = new ArrayList<>();
135         doReturn(impls).when(genType).getImplements();
136         return genType;
137     }
138
139     private String genToString(final GeneratedType genType) {
140         final BuilderRenderer bt = new BuilderRenderer(genType);
141         return bt.body();
142     }
143
144     private GeneratedType mockGenType(final String methodeName) {
145         final GeneratedType genType = spy(GeneratedType.class);
146         doReturn(TEST).when(genType).getName();
147         doReturn(TEST).when(genType).getPackageName();
148
149         final List<MethodSignature> listMethodSign = new ArrayList<>();
150         final MethodSignature methSign = mockMethSign(methodeName);
151         listMethodSign.add(methSign);
152         doReturn(listMethodSign).when(genType).getMethodDefinitions();
153
154         final List<Type> impls = new ArrayList<>();
155         doReturn(impls).when(genType).getImplements();
156         return genType;
157     }
158
159     private MethodSignature mockMethSign(final String methodeName) {
160         final MethodSignature methSign = mock(MethodSignature.class);
161         doReturn(methodeName).when(methSign).getName();
162         final Type methType = mock(Type.class);
163         doReturn(TEST).when(methType).getName();
164         doReturn(TEST).when(methType).getPackageName();
165         doReturn(methType).when(methSign).getReturnType();
166         return methSign;
167     }
168 }