package test.dependent;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import org.testng.Assert;
import org.testng.ITestNGListener;
import org.testng.TestNG;
import org.testng.annotations.DataProvider;
import org.testng.annotations.ExpectedExceptions;
import org.testng.annotations.Test;
import org.testng.xml.XmlSuite.ParallelMode;
import test.BaseTest;
import test.InvokedMethodNameListener;
import test.SimpleBaseTest;
import test.dependent.github1156.ASample;
import test.dependent.github1156.BSample;
import test.dependent.github1380.GitHub1380Sample;
import test.dependent.github1380.GitHub1380Sample2;
import test.dependent.github1380.GitHub1380Sample3;
import test.dependent.github1380.GitHub1380Sample4;
public class DependentTest extends BaseTest {
@Test
public void simpleSkip() {
addClass(SampleDependent1.class.getName());
run();
String[] passed = {};
String[] failed = {"fail"};
String[] skipped = {"shouldBeSkipped"};
verifyTests("Passed", passed, getPassedTests());
verifyTests("Failed", failed, getFailedTests());
verifyTests("Skipped", skipped, getSkippedTests());
}
@Test
public void dependentMethods() {
addClass(SampleDependentMethods.class.getName());
run();
String[] passed = {"oneA", "oneB", "secondA", "thirdA", "canBeRunAnytime"};
String[] failed = {};
String[] skipped = {};
verifyTests("Passed", passed, getPassedTests());
verifyTests("Failed", failed, getFailedTests());
verifyTests("Skipped", skipped, getSkippedTests());
}
@Test
public void dependentMethodsWithSkip() {
addClass(SampleDependentMethods4.class.getName());
run();
String[] passed = {"step1",};
String[] failed = {"step2",};
String[] skipped = {"step3"};
verifyTests("Passed", passed, getPassedTests());
verifyTests("Failed", failed, getFailedTests());
verifyTests("Skipped", skipped, getSkippedTests());
}
@Test
@ExpectedExceptions({org.testng.TestNGException.class})
public void dependentMethodsWithNonExistentMethod() {
addClass(SampleDependentMethods5.class.getName());
run();
String[] passed = {"step1", "step2"};
String[] failed = {};
String[] skipped = {};
verifyTests("Passed", passed, getPassedTests());
verifyTests("Failed", failed, getFailedTests());
verifyTests("Skipped", skipped, getSkippedTests());
}
@Test(expectedExceptions = org.testng.TestNGException.class)
public void dependentMethodsWithCycle() {
addClass(SampleDependentMethods6.class.getName());
run();
}
@Test(expectedExceptions = org.testng.TestNGException.class)
public void dependentGroupsWithCycle() {
addClass("test.dependent.SampleDependentMethods7");
run();
}
@Test
public void multipleSkips() {
addClass(MultipleDependentSampleTest.class.getName());
run();
String[] passed = {"init",};
String[] failed = {"fail",};
String[] skipped = {"skip1", "skip2"};
verifyTests("Passed", passed, getPassedTests());
verifyTests("Failed", failed, getFailedTests());
verifyTests("Skipped", skipped, getSkippedTests());
}
@Test
public void instanceDependencies() {
addClass(InstanceSkipSampleTest.class.getName());
run();
verifyInstanceNames("Passed", getPassedTests(),
new String[]{"f#1", "f#3", "g#1", "g#3"});
verifyInstanceNames("Failed", getFailedTests(),
new String[]{"f#2"});
verifyInstanceNames("Skipped", getSkippedTests(),
new String[]{"g#"});
}
@Test
public void dependentWithDataProvider() {
TestNG tng = SimpleBaseTest.create(DependentWithDataProviderSampleTest.class);
tng.setGroupByInstances(true);
List<String> log = DependentWithDataProviderSampleTest.m_log;
log.clear();
tng.run();
for (int i = 0; i < 12; i += 4) {
String[] s = log.get(i).split("#");
String instance = s[1];
Assert.assertEquals(log.get(i), "prepare#" + instance);
Assert.assertEquals(log.get(i + 1), "test1#" + instance);
Assert.assertEquals(log.get(i + 2), "test2#" + instance);
Assert.assertEquals(log.get(i + 3), "clean#" + instance);
}
}
@DataProvider
public static Object[][] dp() {
return new Object[][]{
{new Class[]{ASample.class, BSample.class}, true},
{new Class[]{ASample.class, BSample.class}, false},
{new Class[]{BSample.class, ASample.class}, true},
{new Class[]{BSample.class, ASample.class}, false}
};
}
@Test(dataProvider = "dp", description = "GITHUB-1156")
public void methodDependencyBetweenClassesShouldWork(Class[] classes, boolean preserveOrder) {
TestNG tng = SimpleBaseTest.create(classes);
tng.setPreserveOrder(preserveOrder);
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getSucceedMethodNames()).containsExactly("testB", "testA");
}
@DataProvider
public static Object[][] dp1380() {
return new Object[][]{
{GitHub1380Sample.class, new String[]{"testMethodA", "testMethodB", "testMethodC"}, false},
{GitHub1380Sample2.class, new String[]{"testMethodC", "testMethodB", "testMethodA"}, false},
{GitHub1380Sample3.class, new String[]{"testMethodA", "testMethodB", "testMethodC"}, false},
{GitHub1380Sample4.class, new String[]{"testMethodB", "testMethodA", "testMethodC"}, false},
{GitHub1380Sample.class, new String[]{"testMethodA", "testMethodB", "testMethodC"}, true},
{GitHub1380Sample2.class, new String[]{"testMethodC", "testMethodB", "testMethodA"}, true},
{GitHub1380Sample3.class, new String[]{"testMethodA", "testMethodB", "testMethodC"}, true},
{GitHub1380Sample4.class, new String[]{"testMethodB", "testMethodA", "testMethodC"}, true}
};
}
@Test(dataProvider = "dp1380", description = "GITHUB-1380")
public void simpleCyclingDependencyShouldWork(Class<?> testClass, String[] runMethods, boolean isParallel) {
TestNG tng = SimpleBaseTest.create(testClass);
if (isParallel) {
tng.setParallel(ParallelMode.METHODS);
}
InvokedMethodNameListener listener = new InvokedMethodNameListener();
tng.addListener((ITestNGListener) listener);
tng.run();
assertThat(listener.getSucceedMethodNames()).containsExactly(runMethods);
}
}