package test.methodinterceptors;
import org.testng.*;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.List;
import test.InvokedMethodNameListener;
import test.SimpleBaseTest;
import static org.assertj.core.api.Assertions.assertThat;
public class Issue521Test extends SimpleBaseTest {
@Test(description = "test for https://github.com/cbeust/testng/issues/521")
public void BeforeClass_method_should_be_fired_when_IMethodInterceptor_removes_test_methods() {
TestNG tng = create(Issue521.class);
tng.setMethodInterceptor(new IMethodInterceptor() {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
List<IMethodInstance> instances = new ArrayList<>();
for (IMethodInstance instance : methods) {
if (!instance.getMethod().getMethodName().equals("test1")) {
instances.add(instance);
}
}
return instances;
}
});
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getInvokedMethodNames()).containsExactly("beforeClass", "test2");
}
}