package test.invocationcount;
import org.testng.ITestNGListener;
import org.testng.TestNG;
import org.testng.annotations.Test;
import java.util.List;
import test.InvokedMethodNameListener;
import test.SimpleBaseTest;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Test various combination of @BeforeMethod(firstTimeOnly = true/false) and
* @AfterMethod(lastTimeOnly = true/false) with invocation counts and data
* providers.
*/
public class FirstAndLastTimeTest extends SimpleBaseTest {
@Test
public void verifyDataProviderFalseFalse() {
List<String> invokedMethodNames = run(DataProviderFalseFalseTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f(0)", "afterMethod",
"beforeMethod", "f(1)", "afterMethod",
"beforeMethod", "f(2)", "afterMethod",
"beforeMethod", "f2(0)", "afterMethod",
"beforeMethod", "f2(1)", "afterMethod",
"beforeMethod", "f2(2)", "afterMethod"
);
}
@Test
public void verifyDataProviderTrueFalse() {
List<String> invokedMethodNames = run(DataProviderTrueFalseTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f(0)", "afterMethod",
"f(1)", "afterMethod",
"f(2)", "afterMethod",
"beforeMethod", "f2(0)", "afterMethod",
"f2(1)", "afterMethod",
"f2(2)", "afterMethod"
);
}
@Test
public void verifyDataProviderFalseTrue() {
List<String> invokedMethodNames = run(DataProviderFalseTrueTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f(0)",
"beforeMethod", "f(1)",
"beforeMethod", "f(2)", "afterMethod",
"beforeMethod", "f2(0)",
"beforeMethod", "f2(1)",
"beforeMethod", "f2(2)", "afterMethod"
);
}
@Test
public void verifyDataProviderTrueTrue() {
List<String> invokedMethodNames = run(DataProviderTrueTrueTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f(0)",
"f(1)",
"f(2)", "afterMethod",
"beforeMethod", "f2(0)",
"f2(1)",
"f2(2)", "afterMethod"
);
}
@Test
public void verifyInvocationCountFalseFalse() {
List<String> invokedMethodNames = run(InvocationCountFalseFalseTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f", "afterMethod",
"beforeMethod", "f", "afterMethod",
"beforeMethod", "f", "afterMethod"
);
}
@Test
public void verifyInvocationCountTrueFalse() {
List<String> invokedMethodNames = run(InvocationCountTrueFalseTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f", "afterMethod",
"f", "afterMethod",
"f", "afterMethod"
);
}
@Test
public void verifyInvocationCountFalseTrue() {
List<String> invokedMethodNames = run(InvocationCountFalseTrueTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f",
"beforeMethod", "f",
"beforeMethod", "f", "afterMethod"
);
}
@Test
public void verifyInvocationCountTrueTrue() {
List<String> invokedMethodNames = run(InvocationCountTrueTrueTest.class);
assertThat(invokedMethodNames).containsExactly(
"beforeMethod", "f",
"f",
"f", "afterMethod"
);
}
private static List<String> run(Class<?> cls) {
TestNG tng = create(cls);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
return listener.getInvokedMethodNames();
}
}