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.MethodSignature.ValueMechanics;
22 import org.opendaylight.mdsal.binding.model.api.Type;
24 public class BuilderGeneratorTest {
25 private static final String TEST = "test";
26 private static final JavaTypeName TYPE_NAME = JavaTypeName.create(TEST, TEST);
29 public void basicTest() {
30 assertEquals("", new BuilderGenerator().generate(mock(Type.class)));
34 public void builderTemplateGenerateToStringWithPropertyTest() {
35 final GeneratedType genType = mockGenType("get" + TEST);
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());
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());
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());
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());
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());
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());
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();
103 doReturn(impls).when(genType).getImplements();
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();
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);
118 doReturn(listMethodSign).when(genType).getMethodDefinitions();
120 final List<Type> impls = new ArrayList<>();
121 doReturn(impls).when(genType).getImplements();
125 private static CharSequence genToString(final GeneratedType genType) {
126 final BuilderTemplate bt = BuilderGenerator.templateForType(genType);
127 return bt.generateToString(bt.properties);
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();
136 final List<MethodSignature> listMethodSign = new ArrayList<>();
137 final MethodSignature methSign = mockMethSign(methodeName);
138 listMethodSign.add(methSign);
139 doReturn(listMethodSign).when(genType).getMethodDefinitions();
141 final List<Type> impls = new ArrayList<>();
142 doReturn(impls).when(genType).getImplements();
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();