From f00da960ae05cfee60e7e04df09fbbf81b02dc80 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Tue, 26 Oct 2021 08:35:06 +0200
Subject: [PATCH] add individual tests

---
 .../relast/tests/RelAstProcessorTestBase.java | 69 +++++++++++--------
 1 file changed, 39 insertions(+), 30 deletions(-)

diff --git a/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java b/src/testFixtures/java/org/jastadd/relast/tests/RelAstProcessorTestBase.java
index 1cd9125..2502959 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)));
   }
 
 }
-- 
GitLab