package test.methodinterceptors;
import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import java.util.ArrayList;
import java.util.List;
/**
* An interceptor that removes the method called "two".
*/
public class RemoveAMethodInterceptor implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
List<IMethodInstance> result = new ArrayList<>();
for (IMethodInstance method : methods) {
String name = method.getMethod().getMethodName();
if (!name.equals("two")) {
result.add(method);
}
}
log(this, methods, result);
return result;
}
public static void log(IMethodInterceptor listener, List<IMethodInstance> input,
List<IMethodInstance> output) {
StringBuilder msg = new StringBuilder().append(listener.getClass().getName())
.append(" - Input:").append(getMethodNames(input)).append(" ").append(input.size())
.append(" methods.").append(" Output:").append(getMethodNames(output)).append(" ")
.append(output.size()).append(" methods");
log(msg.toString());
}
public static List<String> getMethodNames(List<IMethodInstance> methods) {
List<String> names = new ArrayList<>();
for (IMethodInstance m : methods) {
names.add(m.getMethod().getMethodName());
}
return names;
}
private static void log(String s) {
// System.out.println("[MI2] " + s);
}
}