2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.binding.java.api.generator;
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;
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;
23 public class BuilderGeneratorTest {
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);
30 public void basicTest() {
31 assertEquals("", new BuilderGenerator().generate(mock(Type.class)));
35 public void builderTemplateGenerateToStringWithPropertyTest() {
36 final GeneratedType genType = mockGenType("get" + TEST);
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());
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());
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());
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());
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());
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());
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();
104 doReturn(impls).when(genType).getImplements();
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();
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);
119 doReturn(listMethodSign).when(genType).getMethodDefinitions();
121 final List<Type> impls = new ArrayList<>();
122 doReturn(impls).when(genType).getImplements();
126 private static CharSequence genToString(final GeneratedType genType) {
127 final BuilderTemplate bt = BuilderGenerator.templateForType(genType);
128 return bt.generateToString(bt.properties);
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();
137 final List<MethodSignature> listMethodSign = new ArrayList<>();
138 final MethodSignature methSign = mockMethSign(methodeName);
139 listMethodSign.add(methSign);
140 doReturn(listMethodSign).when(genType).getMethodDefinitions();
142 final List<Type> impls = new ArrayList<>();
143 doReturn(impls).when(genType).getImplements();
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();