package test.parameters;
import org.testng.ITestNGListener;
import org.testng.TestNG;
import org.testng.TestNGException;
import org.testng.annotations.Test;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import test.InvokedMethodNameListener;
import test.SimpleBaseTest;
import static org.assertj.core.api.Assertions.assertThat;
public class ParameterTest extends SimpleBaseTest {
@Test
public void stringSingle() {
XmlSuite suite = createXmlSuite("stringSingle");
XmlTest test = createXmlTest(suite, "Before with parameter sample", ParameterSample.class);
test.addParameter("first-name", "Cedric");
TestNG tng = create(suite);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getFailedMethodNames()).isEmpty();
assertThat(listener.getSkippedMethodNames()).isEmpty();
assertThat(listener.getSucceedMethodNames()).containsExactly(
"beforeTest(Cedric)", "testNonExistentParameter(null)",
"beforeTest(Cedric)", "testSingleString(Cedric)"
);
}
@Test
public void beforeMethodWithParameters() {
XmlSuite suite = createXmlSuite("beforeMethodWithParameters");
XmlTest test = createXmlTest(suite, "Before with parameter sample", BeforeWithParameterSample.class);
test.addParameter("parameter", "parameter value");
TestNG tng = create(suite);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getFailedMethodNames()).isEmpty();
assertThat(listener.getSkippedMethodNames()).isEmpty();
assertThat(listener.getSucceedMethodNames()).containsExactly(
"beforeMethod(parameter value)", "testExample(abc,def)"
);
}
@Test
public void enumParameters() {
XmlSuite suite = createXmlSuite("enumParameters");
XmlTest test = createXmlTest(suite, "Enum parameter sample", EnumParameterSample.class);
test.addParameter("parameter", "VALUE_1");
TestNG tng = create(suite);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getFailedMethodNames()).isEmpty();
assertThat(listener.getSkippedMethodNames()).isEmpty();
assertThat(listener.getSucceedMethodNames()).containsExactly("testMethod(VALUE_1)");
}
@Test(description = "GITHUB-1105: Test skipped instead failed if incorrect enum value")
public void invalidEnumParameters() {
XmlSuite suite = createXmlSuite("enumParameters");
XmlTest test = createXmlTest(suite, "Enum parameter sample", EnumParameterSample.class);
test.addParameter("parameter", "INVALID_VALUE");
TestNG tng = create(suite);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getSucceedMethodNames()).isEmpty();
assertThat(listener.getSkippedMethodNames()).isEmpty();
assertThat(listener.getFailedBeforeInvocationMethodNames()).containsExactly("testMethod");
Throwable exception = listener.getResult("testMethod").getThrowable();
assertThat(exception).isInstanceOf(TestNGException.class).hasCauseInstanceOf(IllegalArgumentException.class);
}
}