diff --git a/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java b/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java index 1cd91257d917426386a804f94279d58008f54136..250295942024ec2badc3a87d538ef60177b80348 100644 --- a/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java +++ b/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java @@ -8,14 +8,13 @@ import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.TrueFileFilter; import org.assertj.core.util.Files; import org.jastadd.relast.tests.config.Configuration; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DynamicTest; -import org.junit.jupiter.api.TestFactory; +import org.junit.jupiter.api.*; import java.io.*; import java.nio.charset.Charset; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; import java.util.stream.Stream; public class RelAstProcessorTestBase { @@ -77,41 +76,51 @@ public class RelAstProcessorTestBase { return runProcess(workingDirectory, command, outStringBuider, errStringBuilder); } - protected void directoryTest(Class<?> mainClass, Path dir) throws IOException, InterruptedException { + protected Iterator<DynamicNode> directoryTest(Class<?> mainClass, Path dir) { dir = dir.toAbsolutePath(); Path configFile = dir.resolve("config.yaml"); ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - List<Configuration> configs = mapper.readValue(configFile.toFile(), new TypeReference<List<Configuration>>() { - }); + List<Configuration> configs = null; + try { + configs = mapper.readValue(configFile.toFile(), new TypeReference<List<Configuration>>() { + }); + } catch (IOException e) { + e.printStackTrace(System.err); + return Collections.emptyIterator(); + } - for (Configuration config : configs) { + Path finalDir = dir; - FileUtils.forceMkdir(dir.resolve(config.getOut()).toFile()); - FileUtils.cleanDirectory(dir.resolve(config.getOut()).toFile()); + return configs.stream().map(config -> + (DynamicNode) DynamicTest.dynamicTest(config.getName(), () -> { - StringBuilder outBuilder = new StringBuilder(); - StringBuilder errBuilder = new StringBuilder(); - int returnValue = runJavaProcess(mainClass, dir.toFile(), Arrays.asList(config.getArgs()), outBuilder, errBuilder); - String out = outBuilder.toString(); - String err = errBuilder.toString(); + FileUtils.forceMkdir(finalDir.resolve(config.getOut()).toFile()); + FileUtils.cleanDirectory(finalDir.resolve(config.getOut()).toFile()); - System.out.println(out); - System.err.println(err); + StringBuilder outBuilder = new StringBuilder(); + StringBuilder errBuilder = new StringBuilder(); + int returnValue = runJavaProcess(mainClass, finalDir.toFile(), Arrays.asList(config.getArgs()), outBuilder, errBuilder); + String out = outBuilder.toString(); + String err = errBuilder.toString(); - if (config.shouldFail()) { - Assertions.assertNotEquals(0, returnValue, config.getName() + ": Zero return value of preprocessor for negative test."); - } else { - Assertions.assertEquals(0, returnValue, config.getName() + ": Non-Zero return value of preprocessor for positive test."); - } + System.out.println(out); + System.err.println(err); - checkOutput(config, out, err); + if (config.shouldFail()) { + Assertions.assertNotEquals(0, returnValue, config.getName() + ": Zero return value of preprocessor for negative test."); + } else { + Assertions.assertEquals(0, returnValue, config.getName() + ": Non-Zero return value of preprocessor for positive test."); + } - if (config.shouldCompare()) { - Path outPath = dir.resolve(config.getOut()); - Path expectedPath = dir.resolve(config.getExpected()); - comparePaths(outPath, expectedPath); - } - } + checkOutput(config, out, err); + + if (config.shouldCompare()) { + Path outPath = finalDir.resolve(config.getOut()); + Path expectedPath = finalDir.resolve(config.getExpected()); + comparePaths(outPath, expectedPath); + } + + })).iterator(); } private void checkOutput(Configuration config, String out, String err) { @@ -162,7 +171,7 @@ public class RelAstProcessorTestBase { } @TestFactory - Stream<DynamicTest> testAll() { + Stream<DynamicContainer> testAll() { File baseDir = new File("src/test/resources/"); Assertions.assertTrue(baseDir.exists()); @@ -173,7 +182,7 @@ public class RelAstProcessorTestBase { // TODO consider also supporting "config.yml" .filter(f -> Objects.requireNonNull(f.listFiles(x -> x.getName().matches("config\\.yaml"))).length == 1) .map(File::toPath) - .map(f -> DynamicTest.dynamicTest(f.getFileName().toString(), () -> directoryTest(mainClass, f))); + .map(f -> DynamicContainer.dynamicContainer(f.getFileName().toString(), () -> directoryTest(mainClass, f))); } }