blob: 24f4904a97355c870361024c9263d56e6f4c3208 [file] [log] [blame]
b.janani8b8ebdc2016-02-25 12:25:55 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
b.janani8b8ebdc2016-02-25 12:25:55 +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
Gaurav Agrawalc5f63272016-06-16 13:09:53 +053019import java.io.File;
20import java.io.IOException;
b.janani8b8ebdc2016-02-25 12:25:55 +053021import java.lang.reflect.Constructor;
22import java.lang.reflect.InvocationTargetException;
janani bdd1314f2016-05-19 17:39:50 +053023import org.junit.Rule;
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.junit.Test;
janani bdd1314f2016-05-19 17:39:50 +053025import org.junit.rules.ExpectedException;
26import org.onosproject.yangutils.translator.exception.TranslatorException;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053027import org.onosproject.yangutils.utils.io.impl.YangToJavaNamingConflictUtil;
Bharat saraswal2f11f652016-03-25 18:19:46 +053028
Gaurav Agrawalc5f63272016-06-16 13:09:53 +053029import static org.apache.commons.io.FileUtils.deleteDirectory;
Bharat saraswal2f11f652016-03-25 18:19:46 +053030import static org.hamcrest.core.Is.is;
Bharat saraswal6ef0b762016-04-05 12:45:45 +053031import static org.hamcrest.core.IsNot.not;
Bharat saraswal2f11f652016-03-25 18:19:46 +053032import static org.junit.Assert.assertThat;
Gaurav Agrawalc5f63272016-06-16 13:09:53 +053033import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.doesPackageExist;
34import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
35import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
36import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
37import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053038import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
39import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
40import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
41import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053042import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Vinod Kumar S38046502016-03-23 15:30:27 +053043
b.janani8b8ebdc2016-02-25 12:25:55 +053044/**
45 * Unit tests for java identifier syntax.
46 */
47public final class JavaIdentifierSyntaxTest {
48
janani bdd1314f2016-05-19 17:39:50 +053049 @Rule
50 public ExpectedException thrown = ExpectedException.none();
51
Bharat saraswal2f11f652016-03-25 18:19:46 +053052 private static final String PARENT_PACKAGE = "test5/test6/test7";
53 private static final String CHILD_PACKAGE = "test1:test2:test3";
54 private static final String DATE1 = "2000-1-5";
55 private static final String DATE2 = "1992-01-25";
56 private static final String PARENT_WITH_PERIOD = "test5.test6.test7";
57 private static final String CHILD_WITH_PERIOD = "test1.test2.test3";
58 private static final String DATE_WITH_REV1 = "rev20000105";
59 private static final String DATE_WITH_REV2 = "rev19920125";
60 private static final String VERSION_NUMBER = "v1";
janani bdd1314f2016-05-19 17:39:50 +053061 private static final String VALID_PREFIX = "123add-prefix";
62 private static final String INVALID_PREFIX = "-*()&^&#$%";
63 private static final String INVALID_PREFIX1 = "abc~!@#$%^&*()_+}{:<>?`1234567890-=[]''|,./SS";
64 private static final String INVALID_NAME_SPACE_FOR_INVALID_PREFIX = "try:#test3:9case3";
Bharat saraswal2f11f652016-03-25 18:19:46 +053065 private static final String INVALID_NAME_SPACE1 = "byte:#test2:9test3";
66 private static final String INVALID_NAME_SPACE2 = "const:#test2://9test3";
janani bdd1314f2016-05-19 17:39:50 +053067 private static final String INVALID_NAME_SPACE3 = "CONST:TRY://9test3";
68 private static final String VALID_NAME_SPACE1 = "123addprefixbyte.test2.123addprefix9test3";
janani bde4ffab2016-04-15 16:18:30 +053069 private static final String VALID_NAME_SPACE2 = "yangautoprefixconst.test2.yangautoprefix9test3";
janani bdd1314f2016-05-19 17:39:50 +053070 private static final String VALID_NAME_SPACE3 = "abc1234567890ssconst.test2.abc1234567890ss9test3";
71 private static final String VALID_NAME_SPACE4 = "yangautoprefixconst.yangautoprefixtry.yangautoprefix9test3";
Bharat saraswal2f11f652016-03-25 18:19:46 +053072 private static final String WITHOUT_CAMEL_CASE = "test-camel-case-identifier";
73 private static final String WITH_CAMEL_CASE = "testCamelCaseIdentifier";
janani bde4ffab2016-04-15 16:18:30 +053074 private static final String WITHOUT_CAMEL_CASE1 = ".-_try-._-.123";
75 private static final String WITH_CAMEL_CASE1 = "try123";
76 private static final String WITHOUT_CAMEL_CASE2 = "_try";
77 private static final String WITH_CAMEL_CASE2 = "yangAutoPrefixTry";
78 private static final String WITHOUT_CAMEL_CASE3 = "-1-123g-123ga-a";
79 private static final String WITH_CAMEL_CASE3 = "yangAutoPrefix1123G123Gaa";
80 private static final String WITHOUT_CAMEL_CASE4 = "a-b-c-d-e-f-g-h";
81 private static final String WITH_CAMEL_CASE4 = "aBcDeFgh";
janani b4a6711a2016-05-17 13:12:22 +053082 private static final String WITHOUT_CAMEL_CASE5 = "TestName";
83 private static final String WITH_CAMEL_CASE5 = "testName";
84 private static final String WITHOUT_CAMEL_CASE6 = "TEST-NAME";
85 private static final String WITH_CAMEL_CASE6 = "testName";
86 private static final String WITHOUT_CAMEL_CASE7 = "TESTNAME";
87 private static final String WITH_CAMEL_CASE7 = "testname";
88 private static final String WITHOUT_CAMEL_CASE8 = "TE-ST-NA-ME";
89 private static final String WITH_CAMEL_CASE8 = "teStNaMe";
90 private static final String WITHOUT_CAMEL_CASE9 = "TEST3NAME";
91 private static final String WITH_CAMEL_CASE9 = "test3Name";
92 private static final String WITHOUT_CAMEL_CASE10 = "TEST3";
93 private static final String WITH_CAMEL_CASE10 = "test3";
94 private static final String WITHOUT_CAMEL_CASE11 = "TEST3nAMe";
95 private static final String WITH_CAMEL_CASE11 = "test3Name";
96 private static final String WITHOUT_CAMEL_CASE12 = "TEST3name";
97 private static final String WITH_CAMEL_CASE12 = "test3Name";
janani bdd1314f2016-05-19 17:39:50 +053098 private static final String WITHOUT_CAMEL_CASE13 = "t-RY";
99 private static final String WITH_CAMEL_CASE13 = "tRy";
100 private static final String WITHOUT_CAMEL_CASE14 = "TRY";
101 private static final String WITH_CAMEL_CASE14 = "yangAutoPrefixTry";
Bharat saraswal2f11f652016-03-25 18:19:46 +0530102 private static final String WITHOUT_CAPITAL = "test_this";
103 private static final String WITH_CAPITAL = "Test_this";
104 private static final String WITH_SMALL = "test_this";
janani bdd1314f2016-05-19 17:39:50 +0530105 private static final String WITH_CAMEL_CASE_WITH_PREFIX = "123addPrefixTry";
106 private static final String WITH_CAMEL_CASE_WITH_PREFIX1 = "abc1234567890Ss1123G123Gaa";
107 private static YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
Gaurav Agrawalc5f63272016-06-16 13:09:53 +0530108 private static final String BASE_DIR_PKG = "target.UnitTestCase.";
109 private static final String DIR_PATH = "exist1.exist2.exist3";
110 private static final String PKG_INFO = "package-info.java";
111 private static final String BASE_PKG = "target/UnitTestCase";
112 private static final String TEST_DATA_1 = "This is to append a text to the file first1\n";
b.janani1fef2732016-03-04 12:29:05 +0530113
b.janani8b8ebdc2016-02-25 12:25:55 +0530114 /**
115 * Unit test for private constructor.
116 *
Gaurav Agrawalc5f63272016-06-16 13:09:53 +0530117 * @throws SecurityException if any security violation is observed.
118 * @throws NoSuchMethodException if when the method is not found.
119 * @throws IllegalArgumentException if there is illegal argument found.
120 * @throws InstantiationException if instantiation is provoked for the
121 * private constructor.
122 * @throws IllegalAccessException if instance is provoked or a method is
123 * provoked.
Vinod Kumar S38046502016-03-23 15:30:27 +0530124 * @throws InvocationTargetException when an exception occurs by the method
Gaurav Agrawalc5f63272016-06-16 13:09:53 +0530125 * or constructor.
b.janani8b8ebdc2016-02-25 12:25:55 +0530126 */
b.janani1fef2732016-03-04 12:29:05 +0530127 @Test
b.janani8b8ebdc2016-02-25 12:25:55 +0530128 public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
Vinod Kumar S38046502016-03-23 15:30:27 +0530129 InstantiationException, IllegalAccessException, InvocationTargetException {
Bharat saraswal2f11f652016-03-25 18:19:46 +0530130
Gaurav Agrawalc5f63272016-06-16 13:09:53 +0530131 Class<?>[] classesToConstruct = {JavaIdentifierSyntax.class};
b.janani8b8ebdc2016-02-25 12:25:55 +0530132 for (Class<?> clazz : classesToConstruct) {
133 Constructor<?> constructor = clazz.getDeclaredConstructor();
134 constructor.setAccessible(true);
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530135 assertThat(null, not(constructor.newInstance()));
b.janani8b8ebdc2016-02-25 12:25:55 +0530136 }
137 }
138
139 /**
b.janani8b8ebdc2016-02-25 12:25:55 +0530140 * Unit test for root package generation with revision complexity.
141 */
142 @Test
143 public void getRootPackageTest() {
janani bdd1314f2016-05-19 17:39:50 +0530144 conflictResolver.setPrefixForIdentifier(null);
145 String rootPackage = getRootPackage((byte) 1, CHILD_PACKAGE, DATE1, conflictResolver);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530146 assertThat(rootPackage.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
147 + PERIOD + CHILD_WITH_PERIOD + PERIOD + DATE_WITH_REV1), is(true));
b.janani8b8ebdc2016-02-25 12:25:55 +0530148 }
149
150 /**
janani bdd1314f2016-05-19 17:39:50 +0530151 * Unit test for root package generation with invalid prefix.
152 */
153 @Test
154 public void getRootPackageWithInvalidPrefix() throws TranslatorException {
155 thrown.expect(TranslatorException.class);
156 thrown.expectMessage("The given prefix in pom.xml is invalid.");
157 conflictResolver.setPrefixForIdentifier(INVALID_PREFIX);
158 String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE_FOR_INVALID_PREFIX, DATE1, conflictResolver);
159 }
160
161 /**
b.janani1fef2732016-03-04 12:29:05 +0530162 * Unit test for root package generation with special characters presence.
163 */
164 @Test
165 public void getRootPackageWithSpecialCharactersTest() {
janani bdd1314f2016-05-19 17:39:50 +0530166 conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
167 String rootPackage = getRootPackage((byte) 1, INVALID_NAME_SPACE1, DATE1, conflictResolver);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530168 assertThat(rootPackage.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
169 + PERIOD + VALID_NAME_SPACE1 + PERIOD + DATE_WITH_REV1), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530170 conflictResolver.setPrefixForIdentifier(null);
171 String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, DATE1, conflictResolver);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530172 assertThat(rootPackage1.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
173 + PERIOD + VALID_NAME_SPACE2 + PERIOD + DATE_WITH_REV1), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530174 String rootPackage2 = getRootPackage((byte) 1, INVALID_NAME_SPACE3, DATE1, conflictResolver);
175 assertThat(rootPackage2.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
176 + PERIOD + VALID_NAME_SPACE4 + PERIOD + DATE_WITH_REV1), is(true));
177 conflictResolver.setPrefixForIdentifier(INVALID_PREFIX1);
178 String rootPackage3 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, DATE1, conflictResolver);
179 assertThat(rootPackage3.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
180 + PERIOD + VALID_NAME_SPACE3 + PERIOD + DATE_WITH_REV1), is(true));
181
b.janani1fef2732016-03-04 12:29:05 +0530182 }
183
184 /**
185 * Unit test for root package generation without complexity in revision.
b.janani8b8ebdc2016-02-25 12:25:55 +0530186 */
187 @Test
188 public void getRootPackageWithRevTest() {
janani bdd1314f2016-05-19 17:39:50 +0530189 String rootPkgWithRev = getRootPackage((byte) 1, CHILD_PACKAGE, DATE2, null);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530190 assertThat(rootPkgWithRev.equals(
191 DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER + PERIOD + CHILD_WITH_PERIOD + PERIOD + DATE_WITH_REV2),
b.janani1fef2732016-03-04 12:29:05 +0530192 is(true));
b.janani8b8ebdc2016-02-25 12:25:55 +0530193 }
194
195 /**
196 * Unit test for capitalizing the incoming string.
197 */
198 @Test
199 public void getCapitalCaseTest() {
janani b4a6711a2016-05-17 13:12:22 +0530200 String capitalCase = getCapitalCase(WITHOUT_CAPITAL);
b.janani1fef2732016-03-04 12:29:05 +0530201 assertThat(capitalCase.equals(WITH_CAPITAL), is(true));
b.janani8b8ebdc2016-02-25 12:25:55 +0530202 }
203
204 /**
205 * Unit test for getting the camel case for the received string.
206 */
207 @Test
208 public void getCamelCaseTest() {
janani bdd1314f2016-05-19 17:39:50 +0530209 conflictResolver.setPrefixForIdentifier(null);
210 String camelCase = getCamelCase(WITHOUT_CAMEL_CASE, conflictResolver);
b.janani1fef2732016-03-04 12:29:05 +0530211 assertThat(camelCase.equals(WITH_CAMEL_CASE), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530212 String camelCase1 = getCamelCase(WITHOUT_CAMEL_CASE1, conflictResolver);
janani bde4ffab2016-04-15 16:18:30 +0530213 assertThat(camelCase1.equals(WITH_CAMEL_CASE1), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530214 String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
janani bde4ffab2016-04-15 16:18:30 +0530215 assertThat(camelCase2.equals(WITH_CAMEL_CASE2), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530216 String camelCase3 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
janani bde4ffab2016-04-15 16:18:30 +0530217 assertThat(camelCase3.equals(WITH_CAMEL_CASE3), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530218 String camelCase4 = getCamelCase(WITHOUT_CAMEL_CASE4, conflictResolver);
janani bde4ffab2016-04-15 16:18:30 +0530219 assertThat(camelCase4.equals(WITH_CAMEL_CASE4), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530220 String camelCase5 = getCamelCase(WITHOUT_CAMEL_CASE5, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530221 assertThat(camelCase5.equals(WITH_CAMEL_CASE5), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530222 String camelCase6 = getCamelCase(WITHOUT_CAMEL_CASE6, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530223 assertThat(camelCase6.equals(WITH_CAMEL_CASE6), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530224 String camelCase7 = getCamelCase(WITHOUT_CAMEL_CASE7, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530225 assertThat(camelCase7.equals(WITH_CAMEL_CASE7), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530226 String camelCase8 = getCamelCase(WITHOUT_CAMEL_CASE8, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530227 assertThat(camelCase8.equals(WITH_CAMEL_CASE8), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530228 String camelCase9 = getCamelCase(WITHOUT_CAMEL_CASE9, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530229 assertThat(camelCase9.equals(WITH_CAMEL_CASE9), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530230 String camelCase10 = getCamelCase(WITHOUT_CAMEL_CASE10, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530231 assertThat(camelCase10.equals(WITH_CAMEL_CASE10), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530232 String camelCase11 = getCamelCase(WITHOUT_CAMEL_CASE11, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530233 assertThat(camelCase11.equals(WITH_CAMEL_CASE11), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530234 String camelCase12 = getCamelCase(WITHOUT_CAMEL_CASE12, conflictResolver);
janani b4a6711a2016-05-17 13:12:22 +0530235 assertThat(camelCase12.equals(WITH_CAMEL_CASE12), is(true));
janani bdd1314f2016-05-19 17:39:50 +0530236 String camelCase13 = getCamelCase(WITHOUT_CAMEL_CASE13, conflictResolver);
237 assertThat(camelCase13.equals(WITH_CAMEL_CASE13), is(true));
238 String camelCase14 = getCamelCase(WITHOUT_CAMEL_CASE14, conflictResolver);
239 assertThat(camelCase14.equals(WITH_CAMEL_CASE14), is(true));
240 }
241
242 /**
243 * Unit test for getting the camel case along with the prefix provided.
244 */
245 @Test
246 public void getCamelCaseWithPrefixTest() {
247
248 conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
249 String camelCase = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
250 assertThat(camelCase.equals(WITH_CAMEL_CASE_WITH_PREFIX), is(true));
251 conflictResolver.setPrefixForIdentifier(INVALID_PREFIX1);
252 String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
253 assertThat(camelCase2.equals(WITH_CAMEL_CASE_WITH_PREFIX1), is(true));
254 }
255
256 /**
257 * Unit test for getting the camel case along with the invalid prefix provided.
258 */
259 @Test
260 public void getCamelCaseWithInvalidPrefixTest() throws TranslatorException {
261
262 thrown.expect(TranslatorException.class);
263 thrown.expectMessage("The given prefix in pom.xml is invalid.");
264 conflictResolver.setPrefixForIdentifier(INVALID_PREFIX);
265 String camelCase = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
b.janani8b8ebdc2016-02-25 12:25:55 +0530266 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530267
268 /**
269 * Unit test for getting the camel case for the received string.
270 */
271 @Test
272 public void getSmallCaseTest() {
Bharat saraswal2f11f652016-03-25 18:19:46 +0530273 String smallCase = getSmallCase(WITHOUT_CAPITAL);
274 assertThat(smallCase.equals(WITH_SMALL), is(true));
275 }
276
277 /**
278 * Unit test for getting the camel case for the received string.
279 */
280 @Test
281 public void getPackageFromPathTest() {
Bharat saraswal2f11f652016-03-25 18:19:46 +0530282 String pkg = getJavaPackageFromPackagePath(PARENT_PACKAGE);
283 assertThat(pkg.equals(PARENT_WITH_PERIOD), is(true));
284 }
285
286 /**
287 * Unit test for getting the camel case for the received string.
288 */
289 @Test
290 public void getPathFromPackageTest() {
Bharat saraswal2f11f652016-03-25 18:19:46 +0530291 String path = getPackageDirPathFromJavaJPackage(PARENT_WITH_PERIOD);
292 assertThat(path.equals(PARENT_PACKAGE), is(true));
293 }
Gaurav Agrawalc5f63272016-06-16 13:09:53 +0530294
295
296 /**
297 * This test case checks whether the package is existing.
298 *
299 * @throws IOException when failed to create a test file
300 */
301 @Test
302 public void packageExistTest() throws IOException {
303
304 String strPath = BASE_DIR_PKG + DIR_PATH;
305 File createDir = new File(strPath.replace(PERIOD, SLASH));
306 createDir.mkdirs();
307 File createFile = new File(createDir + SLASH + PKG_INFO);
308 createFile.createNewFile();
309 assertThat(true, is(doesPackageExist(strPath)));
310 createDir.delete();
311 deleteDirectory(createDir);
312 }
b.janani8b8ebdc2016-02-25 12:25:55 +0530313}