JUnit 3.7 introduces TestCase.getName() and subsequent versions
of JUnit remove the old name() method. This method provides
access to the name of a TestCase via reflection that is
supposed to work with version before and after JUnit 3.7.
since Ant 1.5.1 this method will invoke "public
String getName()
" on any implementation of Test if
it exists.
Since Ant 1.7 also checks for JUnit4TestCaseFacade explicitly.
This is used by junit.framework.JUnit4TestAdapter.
try {
testCaseName = TestCase.class.getMethod("getName", new Class[0]);
} catch (NoSuchMethodException e) {
// pre JUnit 3.7
try {
testCaseName = TestCase.class.getMethod("name", new Class[0]);
} catch (NoSuchMethodException e2) {
// ignore
}
}
if (t != null && t.getClass().getName().equals("junit.framework.JUnit4TestCaseFacade")) {
// Self-describing as of JUnit 4 (#38811). But trim "(ClassName)".
String name = t.toString();
if (name.endsWith(")")) {
int paren = name.lastIndexOf('(");
return name.substring(0, paren);
} else {
return name;
}
}
if (t instanceof TestCase && testCaseName != null) {
try {
return (String) testCaseName.invoke(t, new Object[0]);
} catch (Throwable e) {
// ignore
}
} else {
try {
Method getNameMethod = null;
try {
getNameMethod =
t.getClass().getMethod("getName", new Class [0]);
} catch (NoSuchMethodException e) {
getNameMethod = t.getClass().getMethod("name",
new Class [0]);
}
if (getNameMethod != null
&& getNameMethod.getReturnType() == String.class) {
return (String) getNameMethod.invoke(t, new Object[0]);
}
} catch (Throwable e) {
// ignore
}
}
return "unknown";