< prev index next >
test/lib/jdk/test/lib/Utils.java
Print this page
rev 59635 : [mq]: cds_lambda
*** 24,33 ****
--- 24,34 ----
package jdk.test.lib;
import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
+ import java.lang.reflect.Method;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.ServerSocket;
*** 832,856 ****
// Special handling is used for testng tests.
@SuppressWarnings("unchecked")
public static String getTestName() {
String result = null;
// If we are using testng, then we should be able to load the "Test" annotation.
! Class<? extends Annotation> testClassAnnotation;
try {
testClassAnnotation = (Class<? extends Annotation>)Class.forName("org.testng.annotations.Test");
} catch (ClassNotFoundException e) {
testClassAnnotation = null;
}
StackTraceElement[] elms = (new Throwable()).getStackTrace();
for (StackTraceElement n: elms) {
String className = n.getClassName();
// If this is a "main" method, then use its class name, but only
! // if we are not using testng.
! if (testClassAnnotation == null && "main".equals(n.getMethodName())) {
result = className;
break;
}
// If this is a testng test, the test will have no "main" method. We can
--- 833,865 ----
// Special handling is used for testng tests.
@SuppressWarnings("unchecked")
public static String getTestName() {
String result = null;
// If we are using testng, then we should be able to load the "Test" annotation.
! Class<? extends Annotation> testClassAnnotation, junitTestClassAnnotation;
try {
testClassAnnotation = (Class<? extends Annotation>)Class.forName("org.testng.annotations.Test");
} catch (ClassNotFoundException e) {
testClassAnnotation = null;
}
+ // If we are using junit, then we should be able to load the "Test" annotation.
+ try {
+ junitTestClassAnnotation = (Class<? extends Annotation>)Class.forName("org.junit.Test");
+ } catch (ClassNotFoundException e) {
+ junitTestClassAnnotation = null;
+ }
+
StackTraceElement[] elms = (new Throwable()).getStackTrace();
for (StackTraceElement n: elms) {
String className = n.getClassName();
// If this is a "main" method, then use its class name, but only
! // if we are not using testng or junit.
! if (testClassAnnotation == null && junitTestClassAnnotation == null &&
! "main".equals(n.getMethodName())) {
result = className;
break;
}
// If this is a testng test, the test will have no "main" method. We can
*** 865,874 ****
--- 874,903 ----
}
} catch (ClassNotFoundException e) {
throw new RuntimeException("Unexpected exception: " + e, e);
}
}
+
+ // If this is a junit test, the test will have no "main" method. We can
+ // detect a junit test class by going through all the methods and
+ // check if the method has the org.junit.Test annotation. If present,
+ // then use the name of this class.
+ if (junitTestClassAnnotation != null) {
+ try {
+ Class<?> c = Class.forName(className);
+ Method[] methods = c.getMethods();
+ for (Method method : methods) {
+ if (method.getName().equals(n.getMethodName()) &&
+ method.isAnnotationPresent(junitTestClassAnnotation)) {
+ result = className;
+ break;
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("Unexpected exception: " + e, e);
+ }
+ }
}
if (result == null) {
throw new RuntimeException("Couldn't find main test class in stack trace");
}
< prev index next >