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]; } } }