Squash empty lists/maps
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / test / java / org / opendaylight / mdsal / binding / java / api / generator / BuilderGeneratorTest.java
1 /*
2  * Copyright (c) 2016 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.java.api.generator;
9
10 import static org.junit.Assert.assertEquals;
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.model.api.GeneratedType;
19 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
20 import org.opendaylight.mdsal.binding.model.api.MethodSignature;
21 import org.opendaylight.mdsal.binding.model.api.MethodSignature.ValueMechanics;
22 import org.opendaylight.mdsal.binding.model.api.Type;
23
24 public class BuilderGeneratorTest {
25     private static final String TEST = "test";
26     private static final JavaTypeName TYPE_NAME = JavaTypeName.create(TEST, TEST);
27
28     @Test
29     public void basicTest() {
30         assertEquals("", new BuilderGenerator().generate(mock(Type.class)));
31     }
32
33     @Test
34     public void builderTemplateGenerateToStringWithPropertyTest() {
35         final GeneratedType genType = mockGenType("get" + TEST);
36
37         assertEquals("@Override\n"
38                 + "public String toString() {\n"
39                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
40                 + "    CodeHelpers.appendValue(helper, \"_test\", _test);\n"
41                 + "    return helper.toString();\n"
42                 + "}\n", genToString(genType).toString());
43     }
44
45     @Test
46     public void builderTemplateGenerateToStringWithoutAnyPropertyTest() throws Exception {
47         assertEquals("@Override\n"
48                 + "public String toString() {\n"
49                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
50                 + "    return helper.toString();\n"
51                 + "}\n", genToString(mockGenType(TEST)).toString());
52     }
53
54     @Test
55     public void builderTemplateGenerateToStringWithMorePropertiesTest() throws Exception {
56         assertEquals("@Override\n"
57                 + "public String toString() {\n"
58                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
59                 + "    CodeHelpers.appendValue(helper, \"_test1\", _test1);\n"
60                 + "    CodeHelpers.appendValue(helper, \"_test2\", _test2);\n"
61                 + "    return helper.toString();\n"
62                 + "}\n", genToString(mockGenTypeMoreMeth("get" + TEST)).toString());
63     }
64
65     @Test
66     public void builderTemplateGenerateToStringWithoutPropertyWithAugmentTest() throws Exception {
67         assertEquals("@Override\n"
68                 + "public String toString() {\n"
69                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
70                 + "    CodeHelpers.appendValue(helper, \"augmentation\", augmentations().values());\n"
71                 + "    return helper.toString();\n"
72                 + "}\n", genToString(mockAugment(mockGenType(TEST))).toString());
73     }
74
75     @Test
76     public void builderTemplateGenerateToStringWithPropertyWithAugmentTest() throws Exception {
77         assertEquals("@Override\n"
78                 + "public String toString() {\n"
79                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
80                 + "    CodeHelpers.appendValue(helper, \"_test\", _test);\n"
81                 + "    CodeHelpers.appendValue(helper, \"augmentation\", augmentations().values());\n"
82                 + "    return helper.toString();\n"
83                 + "}\n", genToString(mockAugment(mockGenType("get" + TEST))).toString());
84     }
85
86     @Test
87     public void builderTemplateGenerateToStringWithMorePropertiesWithAugmentTest() throws Exception {
88         assertEquals("@Override\n"
89                 + "public String toString() {\n"
90                 + "    final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
91                 + "    CodeHelpers.appendValue(helper, \"_test1\", _test1);\n"
92                 + "    CodeHelpers.appendValue(helper, \"_test2\", _test2);\n"
93                 + "    CodeHelpers.appendValue(helper, \"augmentation\", augmentations().values());\n"
94                 + "    return helper.toString();\n"
95                 + "}\n", genToString(mockAugment(mockGenTypeMoreMeth("get" + TEST))).toString());
96     }
97
98     private static GeneratedType mockAugment(final GeneratedType genType) {
99         final List<Type> impls = new ArrayList<>();
100         final Type impl = mock(Type.class);
101         doReturn("org.opendaylight.yangtools.yang.binding.Augmentable").when(impl).getFullyQualifiedName();
102         impls.add(impl);
103         doReturn(impls).when(genType).getImplements();
104         return genType;
105     }
106
107     private static GeneratedType mockGenTypeMoreMeth(final String methodeName) {
108         final GeneratedType genType = spy(GeneratedType.class);
109         doReturn(TYPE_NAME).when(genType).getIdentifier();
110         doReturn(TEST).when(genType).getName();
111         doReturn(TEST).when(genType).getPackageName();
112
113         final List<MethodSignature> listMethodSign = new ArrayList<>();
114         for (int i = 0; i < 2; i++) {
115             final MethodSignature methSign = mockMethSign(methodeName + (i + 1));
116             listMethodSign.add(methSign);
117         }
118         doReturn(listMethodSign).when(genType).getMethodDefinitions();
119
120         final List<Type> impls = new ArrayList<>();
121         doReturn(impls).when(genType).getImplements();
122         return genType;
123     }
124
125     private static CharSequence genToString(final GeneratedType genType) {
126         final BuilderTemplate bt = BuilderGenerator.templateForType(genType);
127         return bt.generateToString(bt.properties);
128     }
129
130     private static GeneratedType mockGenType(final String methodeName) {
131         final GeneratedType genType = spy(GeneratedType.class);
132         doReturn(TYPE_NAME).when(genType).getIdentifier();
133         doReturn(TEST).when(genType).getName();
134         doReturn(TEST).when(genType).getPackageName();
135
136         final List<MethodSignature> listMethodSign = new ArrayList<>();
137         final MethodSignature methSign = mockMethSign(methodeName);
138         listMethodSign.add(methSign);
139         doReturn(listMethodSign).when(genType).getMethodDefinitions();
140
141         final List<Type> impls = new ArrayList<>();
142         doReturn(impls).when(genType).getImplements();
143         return genType;
144     }
145
146     private static MethodSignature mockMethSign(final String methodeName) {
147         final MethodSignature methSign = mock(MethodSignature.class);
148         doReturn(methodeName).when(methSign).getName();
149         final Type methType = mock(Type.class);
150         doReturn(TYPE_NAME).when(methType).getIdentifier();
151         doReturn(methType).when(methSign).getReturnType();
152         doReturn(ValueMechanics.NORMAL).when(methSign).getMechanics();
153         return methSign;
154     }
155 }