package test.timeout; import org.testng.annotations.Test; import org.testng.xml.SuiteXmlParser; import org.testng.xml.XmlClass; import org.testng.xml.XmlInclude; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.BaseTest; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TimeOutFromXmlTest extends BaseTest { private void timeOutTest(boolean onSuite) { addClass(TestTimeOutSampleTest.class); if (onSuite) { setSuiteTimeOut(1_000); } else { setTestTimeOut(1_000); } run(); verifyPassedTests(); verifyFailedTests("timeoutTest"); } @Test public void timeOutOnSuiteTag() { timeOutTest(true /* on suite */); } @Test public void timeOutOnTestTag() { timeOutTest(false /* on test */); } @Test public void noTimeOut() { addClass(TestTimeOutSampleTest.class); run(); verifyPassedTests("timeoutTest"); verifyFailedTests(); } @Test public void twoDifferentTests() { XmlSuite result = new XmlSuite(); result.setName("Suite"); createXmlTest(result, "WithoutTimeOut"); createXmlTest(result, "WithTimeOut").setTimeOut(1_000); setSuite(result); run(); verifyPassedTests("timeoutTest"); verifyFailedTests("timeoutTest"); } private XmlTest createXmlTest(XmlSuite suite, String name) { XmlTest result = new XmlTest(suite); result.setName(name); List<XmlClass> classes = new ArrayList<>(); XmlClass cls = new XmlClass(TestTimeOutSampleTest.class); cls.setIncludedMethods( Collections.singletonList(new XmlInclude("timeoutTest"))); classes.add(cls); result.setXmlClasses(classes); return result; } @Test public void timeOutInParallelTestsFromXml() throws IOException { String file = "src/test/java/test/timeout/issue575.xml"; try (FileInputStream stream = new FileInputStream(file)) { SuiteXmlParser suiteParser = new SuiteXmlParser(); XmlSuite suite = suiteParser.parse(file, stream, true); setSuite(suite); run(); verifyPassedTests("timeoutShouldPass"); verifyFailedTests("timeoutShouldFailByException", "timeoutShouldFailByTimeOut"); } } }