package ru.yandex.qatools.allure.testng; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.testng.TestNG; import org.testng.xml.XmlClass; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import ru.yandex.qatools.allure.commons.AllureFileUtils; import ru.yandex.qatools.allure.model.Status; import ru.yandex.qatools.allure.model.TestCaseResult; import ru.yandex.qatools.allure.model.TestSuiteResult; import ru.yandex.qatools.allure.testng.AllureTestListener.ConfigMethodType; import ru.yandex.qatools.allure.testng.testdata.ConfigMethodsTest; import ru.yandex.qatools.allure.utils.AllureResultsUtils; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; /** * Test for various TestNg configuration method skip behavior * * @author Michael Braiman braimanm@gmail.com * Date: 15.06.15 */ public class AllureTestListenerConfigMethodsTest { private static final String ALLURE_RESULTS = "allure-results"; private static Path resultsDir; private static final String SUITE_PREFIX = "SUITE"; @BeforeClass public static void setUp() throws IOException { resultsDir = Files.createTempDirectory(ALLURE_RESULTS); AllureResultsUtils.setResultsDirectory(resultsDir.toFile()); List<XmlSuite> suites = new ArrayList<>(); for (ConfigMethodType type : ConfigMethodType.values()) { suites.add(createSuite(type.getTitle())); } TestNG testNG = new TestNG(); testNG.setXmlSuites(suites); testNG.setUseDefaultListeners(false); testNG.run(); } private static XmlSuite createSuite(String testName) { XmlSuite suite = new XmlSuite(); suite.setName(SUITE_PREFIX + testName); XmlTest test = new XmlTest(suite); test.setName(testName); List<XmlClass> classes = new ArrayList<>(); classes.add(new XmlClass(ConfigMethodsTest.class)); test.setXmlClasses(classes); return suite; } @AfterClass public static void tearDown() throws IOException { AllureResultsUtils.setResultsDirectory(null); AllureTestUtils.deleteNotEmptyDirectory(resultsDir); } @Test public void validateCanceledTest() throws IOException { List<TestSuiteResult> results = AllureFileUtils.unmarshalSuites(resultsDir.toFile()); for (TestSuiteResult result : results) { validateTestSuiteResult(result); } } private void validateTestSuiteResult(TestSuiteResult testSuiteResult) { String brokenMethod = testSuiteResult.getName().replace(SUITE_PREFIX, "config"); for (TestCaseResult result : testSuiteResult.getTestCases()) { String methodName = result.getName(); Status status = result.getStatus(); Status expectedStatus = Status.CANCELED; if (brokenMethod.startsWith(methodName)) { expectedStatus = Status.BROKEN; } if (brokenMethod.contains("After") && methodName.equalsIgnoreCase("test")) { expectedStatus = Status.PASSED; } assertThat(String.format("Wrong status for test <%s>, method <%s>", brokenMethod, methodName), status, equalTo(expectedStatus)); } } }