blob: 1e164f3387a9ef0a045b2c7f6e0e9c073b822552 [file] [log] [blame]
Bharat saraswalc34b9442016-03-28 15:50:13 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc34b9442016-03-28 15:50:13 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
Bharat saraswalc34b9442016-03-28 15:50:13 +053019import org.junit.Test;
20import org.onosproject.yangutils.datamodel.YangType;
21import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Shankara-Huaweib7564772016-08-02 18:13:13 +053022import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053023import org.onosproject.yangutils.utils.io.YangPluginConfig;
24
25import java.lang.reflect.Constructor;
26import java.lang.reflect.InvocationTargetException;
Bharat saraswalc34b9442016-03-28 15:50:13 +053027
28import static org.hamcrest.core.Is.is;
Bharat saraswal780eca32016-04-05 12:45:45 +053029import static org.hamcrest.core.IsNot.not;
Bharat saraswalc34b9442016-03-28 15:50:13 +053030import static org.junit.Assert.assertThat;
Gaurav Agrawala8391d02016-06-30 13:28:14 +053031import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswalc34b9442016-03-28 15:50:13 +053033import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuild;
34import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildForInterface;
Bharat saraswalc34b9442016-03-28 15:50:13 +053035import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
36import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
37import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
38import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
39import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053040import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethodStringAndJavaDoc;
Bharat saraswalc34b9442016-03-28 15:50:13 +053041import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
42import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForInterface;
43import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForTypeDefClass;
44import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053045import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053046import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCheckNotNull;
47import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Bharat saraswalc34b9442016-03-28 15:50:13 +053048import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
49import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
50import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053051import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswalc34b9442016-03-28 15:50:13 +053052import static org.onosproject.yangutils.utils.UtilConstants.CHECK_NOT_NULL_STRING;
53import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
54import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
55import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053056import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswalc34b9442016-03-28 15:50:13 +053057import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
58import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
59import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
60import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
61import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
Bharat saraswalc34b9442016-03-28 15:50:13 +053062import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
63import static org.onosproject.yangutils.utils.UtilConstants.NEW;
64import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
65import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
66import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
67import static org.onosproject.yangutils.utils.UtilConstants.OF;
68import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
69import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
70import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
71import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053072import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswalc34b9442016-03-28 15:50:13 +053073import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
74import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
75import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053076import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswalc34b9442016-03-28 15:50:13 +053077import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
78import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
79import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
80import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
81import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
82import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
83import static org.onosproject.yangutils.utils.UtilConstants.THIS;
84import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
85import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
86import static org.onosproject.yangutils.utils.UtilConstants.VOID;
87
88/**
89 * Unit tests for generated methods from the file type.
90 */
91public final class MethodsGeneratorTest {
92
Bharat saraswal9fab16b2016-09-23 23:27:24 +053093 private static final String CLASS_NAME = "Testname";
Bharat saraswalc34b9442016-03-28 15:50:13 +053094 private static final String ATTRIBUTE_NAME = "testname";
95
96 /**
97 * Unit test for private constructor.
98 *
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053099 * @throws SecurityException if any security violation is observed
100 * @throws NoSuchMethodException if when the method is not found
101 * @throws IllegalArgumentException if there is illegal argument found
102 * @throws InstantiationException if instantiation is provoked for the private constructor
103 * @throws IllegalAccessException if instance is provoked or a method is provoked
Bharat saraswalc34b9442016-03-28 15:50:13 +0530104 * @throws InvocationTargetException when an exception occurs by the method or constructor
105 */
106 @Test
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530107 public void callPrivateConstructors()
108 throws SecurityException, NoSuchMethodException, IllegalArgumentException,
Bharat saraswalc34b9442016-03-28 15:50:13 +0530109 InstantiationException, IllegalAccessException, InvocationTargetException {
110
Bharat saraswald14cbe82016-07-14 13:26:18 +0530111 Class<?>[] classesToConstruct = {MethodsGenerator.class};
Bharat saraswalc34b9442016-03-28 15:50:13 +0530112 for (Class<?> clazz : classesToConstruct) {
113 Constructor<?> constructor = clazz.getDeclaredConstructor();
114 constructor.setAccessible(true);
Bharat saraswal780eca32016-04-05 12:45:45 +0530115 assertThat(null, not(constructor.newInstance()));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530116 }
117 }
118
119 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530120 * Unit test case for checking the parse builder and type constructor.
Bharat saraswalc34b9442016-03-28 15:50:13 +0530121 */
122 @Test
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530123 public void getTypeConstructorTest() {
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530124
125 YangPluginConfig pluginConfig = new YangPluginConfig();
Bharat saraswalc34b9442016-03-28 15:50:13 +0530126 JavaAttributeInfo testAttr = getTestAttribute();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530127 String test = getTypeConstructorStringAndJavaDoc(testAttr, CLASS_NAME
128 );
129 assertThat(true, is(test.contains(PUBLIC + SPACE + CLASS_NAME +
130 OPEN_PARENTHESIS)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530131 }
132
133 /**
134 * Test for build method for class.
135 */
136 @Test
137 public void getBuildTest() {
Bharat saraswal8beac342016-08-04 02:00:03 +0530138 String method = getBuild(CLASS_NAME, false);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530139 assertThat(true, is(method.equals(
140 FOUR_SPACE_INDENTATION + PUBLIC + SPACE + CLASS_NAME + SPACE +
141 BUILD + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE +
142 OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION +
143 RETURN + SPACE + NEW + SPACE + DEFAULT_CAPS + CLASS_NAME +
144 OPEN_PARENTHESIS + THIS + CLOSE_PARENTHESIS +
145 SEMI_COLON + NEW_LINE + FOUR_SPACE_INDENTATION +
146 CLOSE_CURLY_BRACKET + NEW_LINE)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530147 }
148
149 /**
150 * Test for build method of interface.
151 */
152 @Test
153 public void getBuildForInterfaceTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530154 String method = getBuildForInterface(CLASS_NAME);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530155 assertThat(true, is(method.equals(
156 FOUR_SPACE_INDENTATION + CLASS_NAME + SPACE + BUILD +
157 OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
158 NEW_LINE)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530159 }
160
161 /**
162 * Test for check not null method.
163 */
164 @Test
165 public void getCheckNotNullTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530166 String method = getCheckNotNull(CLASS_NAME);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530167 assertThat(true, is(method.equals(
168 EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING +
169 OPEN_PARENTHESIS + CLASS_NAME + COMMA + SPACE +
170 CLASS_NAME + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530171 }
172
173 /**
174 * Test case for constructor.
175 */
176 @Test
177 public void getConstructorTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530178 JavaAttributeInfo testAttr = getTestAttribute();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530179 YangPluginConfig pluginConfig = new YangPluginConfig();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530180 String method = getConstructor(testAttr, GENERATE_SERVICE_AND_MANAGER
181 );
182 assertThat(true, is(method.contains(
183 THIS + PERIOD + ATTRIBUTE_NAME + SPACE + EQUAL + SPACE +
184 BUILDER_LOWER_CASE + OBJECT + PERIOD +
185 GET_METHOD_PREFIX + CLASS_NAME + OPEN_PARENTHESIS +
186 CLOSE_PARENTHESIS + SEMI_COLON)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530187 }
188
189 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530190 * Test for constructor start method.
Bharat saraswalc34b9442016-03-28 15:50:13 +0530191 */
192 @Test
193 public void getConstructorStartTest() {
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530194 YangPluginConfig pluginConfig = new YangPluginConfig();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530195 String method = getConstructorStart(CLASS_NAME, false);
196 assertThat(true, is(method.contains(
197 PROTECTED + SPACE + DEFAULT_CAPS + CLASS_NAME +
198 OPEN_PARENTHESIS + CLASS_NAME + BUILDER + SPACE +
199 BUILDER_LOWER_CASE + OBJECT + CLOSE_PARENTHESIS + SPACE +
200 OPEN_CURLY_BRACKET)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530201 }
202
203 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530204 * Test case for equals method.
Bharat saraswalc34b9442016-03-28 15:50:13 +0530205 */
206 @Test
207 public void getEqualsMethodTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530208 JavaAttributeInfo testAttr = getTestAttribute();
209 String method = getEqualsMethod(testAttr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530210 assertThat(true, is(method.contains(
211 SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
212 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530213 }
214
215 /**
216 * Test for to string method.
217 */
218 @Test
219 public void getToStringMethodTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530220 JavaAttributeInfo testAttr = getTestAttribute();
221 String method = getToStringMethod(testAttr);
222 assertThat(true, is(method.equals(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530223 TWELVE_SPACE_INDENTATION + PERIOD + ADD_STRING +
224 OPEN_PARENTHESIS + QUOTES + testAttr.getAttributeName() +
225 QUOTES + COMMA + SPACE + testAttr.getAttributeName() +
226 CLOSE_PARENTHESIS)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530227 }
228
229 /**
230 * Test for getter method of class.
231 */
232 @Test
233 public void getGetterForClassTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530234 JavaAttributeInfo testAttr = getTestAttribute();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530235 String method = getGetterForClass(testAttr, GENERATE_SERVICE_AND_MANAGER);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530236 assertThat(true, is(method.contains(PUBLIC + SPACE + STRING_DATA_TYPE +
237 SPACE + GET_METHOD_PREFIX)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530238 }
239
240 /**
241 * Test for getter of interface.
242 */
243 @Test
244 public void getGetterForInterfaceTest() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530245 String method = getGetterForInterface(CLASS_NAME, STRING_DATA_TYPE, false,
246 GENERATE_SERVICE_AND_MANAGER, null);
247 assertThat(true, is(method.contains(STRING_DATA_TYPE + SPACE +
248 GET_METHOD_PREFIX)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530249 }
250
251 /**
252 * Test case for setter method of class.
253 */
254 @Test
255 public void getSetterForClassTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530256 JavaAttributeInfo testAttr = getTestAttribute();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530257 String method = getSetterForClass(testAttr, CLASS_NAME,
258 GENERATE_SERVICE_AND_MANAGER);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530259 assertThat(true, is(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530260 method.contains(PUBLIC + SPACE + VOID + SPACE + SET_METHOD_PREFIX +
261 CLASS_NAME + OPEN_PARENTHESIS +
262 STRING_DATA_TYPE + SPACE +
263 ATTRIBUTE_NAME)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530264 }
265
266 /**
267 * Test for setter method of interface.
268 */
269 @Test
270 public void getSetterForInterfaceTest() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530271 String method = getSetterForInterface(CLASS_NAME, STRING_DATA_TYPE,
272 CLASS_NAME, false,
273 GENERATE_SERVICE_AND_MANAGER, null);
274 assertThat(true, is(method.contains(VOID + SPACE + SET_METHOD_PREFIX +
275 CLASS_NAME)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530276 }
277
278 /**
279 * Test case for of method.
280 */
281 @Test
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530282 public void getOfMethodTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530283 JavaAttributeInfo testAttr = getTestAttribute();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530284 String method = getOfMethodStringAndJavaDoc(testAttr, CLASS_NAME);
285 assertThat(true, is(method.contains(
286 PUBLIC + SPACE + STATIC + SPACE + CLASS_NAME + SPACE + OF +
287 OPEN_PARENTHESIS + STRING_DATA_TYPE + SPACE + VALUE +
288 CLOSE_PARENTHESIS)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530289 }
290
291 /**
292 * Test case for setter in type def class.
293 */
294 @Test
295 public void getSetterForTypeDefClassTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530296 JavaAttributeInfo testAttr = getTestAttribute();
297 String method = getSetterForTypeDefClass(testAttr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530298 assertThat(true, is(method.contains(PUBLIC + SPACE + VOID + SPACE +
299 SET_METHOD_PREFIX)));
Bharat saraswalc34b9442016-03-28 15:50:13 +0530300 }
301
302 /**
303 * Test case for over ride string.
304 */
305 @Test
306 public void getOverRideStringTest() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530307 String method = getOverRideString();
308 assertThat(true, is(method.contains(OVERRIDE)));
309 }
310
311 /**
312 * Returns java attribute.
313 *
314 * @return java attribute
315 */
316 private JavaAttributeInfo getTestAttribute() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530317 JavaAttributeInfo testAttr = new JavaAttributeInfo(
318 getTestYangType(), ATTRIBUTE_NAME, false, false);
Bharat saraswalc34b9442016-03-28 15:50:13 +0530319 testAttr.setAttributeName(ATTRIBUTE_NAME);
320 testAttr.setAttributeType(getTestYangType());
321 testAttr.setImportInfo(getTestJavaQualifiedTypeInfo());
322 return testAttr;
323 }
324
325 /**
326 * Returns java qualified info.
327 *
328 * @return java qualified info
329 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530330 private JavaQualifiedTypeInfoTranslator getTestJavaQualifiedTypeInfo() {
331 JavaQualifiedTypeInfoTranslator info = new JavaQualifiedTypeInfoTranslator();
Bharat saraswalc34b9442016-03-28 15:50:13 +0530332 info.setPkgInfo(JAVA_LANG);
333 info.setClassInfo(STRING_DATA_TYPE);
334 return info;
335 }
336
337 /**
338 * Returns stub YANG type.
339 *
340 * @return test YANG type
341 */
342 private YangType<?> getTestYangType() {
Bharat saraswalc34b9442016-03-28 15:50:13 +0530343 YangType<?> attrType = new YangType<>();
344 attrType.setDataTypeName(STRING_DATA_TYPE);
345 attrType.setDataType(STRING);
346 return attrType;
347 }
348}