blob: 1767b62b4a049691a1c0825303d23241a5de7ad0 [file] [log] [blame]
package org.testng.reporters.util;
import org.testng.ITestNGMethod;
/**
* Functionality to allow tools to analyse and subdivide stack traces.
*
* @author Paul Mendelson
* @since 5.3
* @version $Revision: 173 $
*/
public class StackTraceTools {
// ~ Methods --------------------------------------------------------------
/** Finds topmost position of the test method in the stack, or top of stack if <code>method</code> is not in it. */
public static int getTestRoot(StackTraceElement[] stack,ITestNGMethod method) {
if(stack!=null) {
String cname = method.getTestClass().getName();
for(int x=stack.length-1; x>=0; x--) {
if(cname.equals(stack[x].getClassName())
&& method.getMethodName().equals(stack[x].getMethodName())) {
return x;
}
}
return stack.length-1;
} else {
return -1;
}
}
/** Finds topmost position of the test method in the stack, or top of stack if <code>method</code> is not in it. */
public static StackTraceElement[] getTestNGInstrastructure(StackTraceElement[] stack,ITestNGMethod method) {
int slot=StackTraceTools.getTestRoot(stack, method);
if(slot>=0) {
StackTraceElement[] r=new StackTraceElement[stack.length-slot];
for(int x=0; x<r.length; x++) {
r[x]=stack[x+slot];
}
return r;
} else {
return new StackTraceElement[0];
}
}
}