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