package test.failedreporter; import org.testng.Assert; import org.testng.TestNG; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.testng.collections.Lists; import org.testng.xml.XmlGroups; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.SimpleBaseTest; import test.failedreporter.issue1297.groups.GroupsPassSample; import test.failedreporter.issue1297.groups.GroupsSampleBase; import test.failedreporter.issue1297.inheritance.InheritanceFailureSample; import test.failedreporter.issue1297.inheritance.InheritancePassSample; import test.failedreporter.issue1297.straightforward.AllPassSample; import test.failedreporter.issue1297.straightforward.FailureSample; import java.io.File; import java.io.IOException; import java.util.List; public class FailedReporterTest extends SimpleBaseTest { private File mTempDirectory; @BeforeMethod public void setUp() { mTempDirectory = createDirInTempDir("testng-tmp-" + System.currentTimeMillis() % 1000); } @AfterMethod public void tearDown() { deleteDir(mTempDirectory); } @Test public void failedAndSkippedMethodsShouldBeIncluded() throws IOException { testFailedReporter(new String[] { "f1", "f2" }, "<include name=\"%s\"/>", FailedReporterSampleTest.class); } @Test public void failedMethodWithDataProviderShouldHaveInvocationNumbers() throws IOException { testFailedReporter(new String[] { "f1" }, "<include name=\"%s\" invocation-numbers=\"1\"/>", FailedReporter2SampleTest.class); } @Test(description = "github-1297") public void testExclusionOfPassedConfigs() { triggerTest(AllPassSample.class, FailureSample.class); String[] substitutions = new String[] {AllPassSample.class.getName()}; runAssertions(mTempDirectory, substitutions, "<class name=\"%s\">",0); substitutions = new String[] {"newTest2", "beforeClassFailureSample","afterClassFailureSample"}; runAssertions(mTempDirectory, substitutions, "<include name=\"%s\"/>",1); } @Test(description = "github-1297") public void testExclusionOfPassedConfigsAmidstInheritance() { triggerTest(InheritanceFailureSample.class, InheritancePassSample.class); String[] substitutions = new String[] {InheritancePassSample.class.getName()}; runAssertions(mTempDirectory, substitutions, "<class name=\"%s\">", 0); substitutions = new String[] {"newTest2", "baseBeforeTest","baseAfterClass","baseBeforeClass","baseBeforeMethod"}; runAssertions(mTempDirectory, substitutions, "<include name=\"%s\"/>",1); } @Test(description = "github-1297") public void testExclusionOfPassedConfigsInvolvingGroupsAtTestLevel() { triggerTest(GroupsSampleBase.class.getPackage().getName(),true); String[] substitutions = new String[] {GroupsPassSample.class.getName()}; runAssertions(mTempDirectory, substitutions, "<class name=\"%s\">",0); substitutions = new String[] {"baseBeforeTest", "baseBeforeClassAlwaysRun","newTest2"}; runAssertions(mTempDirectory, substitutions, "<include name=\"%s\"/>",1); } @Test(description = "github-1297") public void testExclusionOfPassedConfigsInvolvingGroupsAtSuiteLevel() { triggerTest(GroupsSampleBase.class.getPackage().getName(),false); String[] substitutions = new String[] {GroupsPassSample.class.getName()}; runAssertions(mTempDirectory, substitutions, "<class name=\"%s\">",0); substitutions = new String[] {"baseBeforeTest", "baseBeforeClassAlwaysRun","newTest2"}; runAssertions(mTempDirectory, substitutions, "<include name=\"%s\"/>",1); } private void triggerTest(String packageName, boolean applyGroupSelectionAtTest) { final XmlSuite suite = createXmlSuite("1297_suite"); final XmlTest xmlTest = createXmlTestWithPackages(suite, "1297_test", packageName); if (applyGroupSelectionAtTest) { createXmlGroups(xmlTest, "run"); } else { createXmlGroups(suite, "run"); } TestNG tng = create(mTempDirectory.toPath(), suite); tng.setUseDefaultListeners(true); tng.run(); } private void testFailedReporter(String[] expectedMethods, String expectedLine, Class<?>... cls) { triggerTest(cls); runAssertions(mTempDirectory,expectedMethods,expectedLine); } private void triggerTest(Class<?>... cls) { TestNG tng = create(mTempDirectory.toPath(), cls); tng.setUseDefaultListeners(true); tng.run(); } static void runAssertions(File outputDir, String[] expectedMethods, String expectedLine) { runAssertions(outputDir, expectedMethods, expectedLine, 1); } private static void runAssertions(File outputDir, String[] expectedMethods, String expectedLine, int expected) { File failed = new File(outputDir, "testng-failed.xml"); for (String s : expectedMethods) { List<String> resultLines = Lists.newArrayList(); grep(failed, String.format(expectedLine, s), resultLines); Assert.assertEquals(resultLines.size(),expected ); } } }