package test.failures; import org.testng.Assert; import org.testng.TestNG; import org.testng.reporters.FailedReporter; import test.SimpleBaseTest; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.regex.Pattern; public abstract class BaseFailuresTest extends SimpleBaseTest { protected static TestNG run(TestNG result, Class<?>[] classes, String outputDir) { result.setVerbose(0); result.setOutputDirectory(outputDir); result.setTestClasses(classes); result.run(); return result; } protected static boolean containsRegularExpressions(Path f, String[] strRegexps) { Pattern[] matchers = new Pattern[strRegexps.length]; boolean[] results = new boolean[strRegexps.length]; for (int i = 0; i < strRegexps.length; i++) { matchers[i] = Pattern.compile(".*" + strRegexps[i] + ".*"); results[i] = false; } try (BufferedReader br = Files.newBufferedReader(f, Charset.forName("UTF-8"))) { String line = br.readLine(); while (line != null) { for (int i = 0; i < strRegexps.length; i++) { if (matchers[i].matcher(line).matches()) { results[i] = true; } } line = br.readLine(); } } catch (IOException e) { e.printStackTrace(); return false; } for (int i = 0; i < results.length; i++) { if (!results[i]) { throw new AssertionError("Couldn't find " + strRegexps[i]); } } return true; } protected static void verify(Path outputDir, String suiteName, String[] expected) throws IOException { Path f = outputDir.resolve(suiteName).resolve(FailedReporter.TESTNG_FAILED_XML); Assert.assertTrue(containsRegularExpressions(f, expected)); Files.walkFileTree(outputDir, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { Files.delete(dir); return FileVisitResult.CONTINUE; } }); Files.deleteIfExists(outputDir); } }