/*
This file is part of EasyTest CodeGen, a project to generate
JUnit test cases from source code in EasyTest Template format and helping to keep them in sync
during refactoring.
EasyTest CodeGen, a tool provided by
EaseTech Organization Under Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
*/
package org.easetech.easytest.codegen;
/**
* An implementation of INamingStrategy
*
* @author Ravi Polampelli
*
*/
public class NamingStrategy extends ConfigurableStrategy implements INamingStrategy, JUnitDocletProperties {
/**
* Default test case extension
*/
private String TEST_CASE_EXT = "Test";
/**
* default test suite extension
*/
private String TEST_SUITE_EXT = "Suite";
/**
* test method prefix constant
*/
private static final String TEST_METHOD_PREFIX = "test";
private String cachedDefaultTestSuiteName = null;
private String subPackage = null;
public String getTEST_CASE_EXT() {
return TEST_CASE_EXT;
}
public void setTEST_CASE_EXT(String tEST_CASE_EXT) {
TEST_CASE_EXT = tEST_CASE_EXT;
}
public String getTEST_SUITE_EXT() {
return TEST_SUITE_EXT;
}
public void setTEST_SUITE_EXT(String tEST_SUITE_EXT) {
TEST_SUITE_EXT = tEST_SUITE_EXT;
}
public boolean isTestInTest() {
return isTestInTest;
}
public void setTestInTest(boolean testInTest) {
isTestInTest = testInTest;
}
private boolean isTestInTest = false;
public void init() {
super.init();
cachedDefaultTestSuiteName = null;
setSubPackage(null);
setTestInTest(false);
}
public String getSubPackage() {
return subPackage;
}
public void setSubPackage(String subPackage) {
this.subPackage = subPackage;
}
/**
* Checks if the package name is same as the package name
* explicitly provided by user for processing with option -subpackage
* String packageName
*/
public boolean isTestPackageName(String packageName) {
boolean returnValue = false;
String subName;
subName = getSubPackage();
if (subName != null) {
returnValue = (packageName != null);
returnValue = returnValue && (packageName.endsWith(subName));
}
return returnValue;
}
/**
* Checks if the class name is present in the package that is
* explicitly provided by the user for processing with option -subpackage
* String packageName
*/
public boolean isTestClassName(String fullClassName) {
boolean returnValue = true;
String subName;
subName = getSubPackage();
if (fullClassName != null) {
// check option -subpackage
if (subName != null) {
// in general all classes in subpackage are considered to be tests
returnValue &= isTestClassNameInSubpackage(fullClassName, subName);
// is not considered a test with option -testintest and name does not sound like one
returnValue &= !isTestInTest() || endsLikeTestClassName(fullClassName);
} else {
// check class name ending
returnValue &= endsLikeTestClassName(fullClassName);
}
} else {
returnValue = false;
}
return returnValue;
}
/**
* Checks if package name of the class is same as the sub package name.
* @param fullClassName
* @param subName sub package name.
* @return
*/
private boolean isTestClassNameInSubpackage(String fullClassName, String subName) {
return ((fullClassName.indexOf("." + subName + ".") != -1) || fullClassName.startsWith(subName + "."));
}
private boolean endsLikeTestClassName(String fullClassName) {
return ((fullClassName.endsWith(TEST_SUITE_EXT)) || (fullClassName.endsWith(TEST_CASE_EXT)));
}
/**
* removes package name from the full class name
* @param className full class name
*/
public String stripParentPackage(String className) {
String returnValue = null;
int index;
char ch;
index = className.lastIndexOf(".");
if (index > 0) {
returnValue = className.substring(index + 1);
} else {
returnValue = className;
}
return returnValue;
}
/**
* strips the package name from class name and appends test case extension
*
* @param fullClassName
*/
public String getTestCaseName(String fullClassName) {
String returnValue = null;
returnValue = stripParentPackage(fullClassName);
returnValue = returnValue + TEST_CASE_EXT;
return returnValue;
}
public String getTestSuiteName(String packageName) {
String returnValue = null;
if (cachedDefaultTestSuiteName == null) {
cachedDefaultTestSuiteName = (String) getProperties().getProperty(TESTSUITE_CLASS_NAME, "");
}
if (cachedDefaultTestSuiteName.length()>0) {
returnValue = cachedDefaultTestSuiteName;
} else {
returnValue = stripParentPackage(packageName);
returnValue = StringHelper.firstToUpper(returnValue);
returnValue = returnValue + TEST_SUITE_EXT;
}
return returnValue;
}
public String getPackageName(String fullClassName) {
String returnValue = null;
int index;
index = fullClassName.lastIndexOf(".");
if (index > 0) {
returnValue = fullClassName.substring(0, index);
} else {
returnValue = "";
}
return returnValue;
}
public String getTestPackageName(String packageName) {
String returnValue = null;
if (getSubPackage() != null) {
returnValue = packageName+"."+getSubPackage();
} else {
returnValue = packageName;
}
return returnValue;
}
public String getFullTestCaseName(String fullClassName) {
String testPackageName;
String testCaseName;
testPackageName = getTestPackageName(getPackageName(fullClassName));
testCaseName = getTestCaseName(stripParentPackage(fullClassName));
return combinePackageClass(testPackageName, testCaseName);
}
public String getFullTestSuiteName(String packageName) {
String testPackageName;
String testSuiteName;
testPackageName = getTestPackageName(packageName);
testSuiteName = getTestSuiteName(packageName);
return combinePackageClass(testPackageName, testSuiteName);
}
/**
* Combines package name and class name.
*
* @param packageName
* @param className
* @return
*/
public String combinePackageClass(String packageName, String className) {
String returnValue;
if ((packageName != null) && (packageName.length()>0)) {
returnValue= packageName+"."+className;
} else {
returnValue = className;
}
return returnValue;
}
/**
* prefixes test to method name
* @param methodName
*/
public String getTestMethodName(String methodName) {
StringBuffer sb;
String first;
sb = new StringBuffer(methodName);
first = sb.substring(0, 1);
sb.replace(0, 1, first.toUpperCase());
sb.insert(0, TEST_METHOD_PREFIX);
return sb.toString();
}
public String getTestAccessorName(String prefixSet, String prefixGet, String accessorName) {
StringBuffer sb;
String first;
sb = new StringBuffer(accessorName);
first = sb.substring(0, 1);
sb.replace(0, 1, first.toUpperCase());
// insert "get" or "is" as "Get" or "Is"
sb.insert(0, prefixGet);
first = sb.substring(0, 1);
sb.replace(0, 1, first.toUpperCase());
// insert "set" as "Set"
sb.insert(0, prefixSet);
first = sb.substring(0, 1);
sb.replace(0, 1, first.toUpperCase());
sb.insert(0, TEST_METHOD_PREFIX);
return sb.toString();
}
}