diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cc294cccfc4bde66d12535f07beb46cca562eca6..0df52baf006a3d3297634f4d11e6e1ec2b531d34 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,8 @@ test: stage: test needs: - build + before_script: + - apt-get update && apt-get -y install graphviz script: - "./gradlew test" artifacts: diff --git a/pages/mkdocs.yml b/pages/mkdocs.yml index 231e4b66ca06eb17c65861d3febf0a07b765cc7d..f489d983d32f03ed63c8b6434c89d139b488dcc8 100644 --- a/pages/mkdocs.yml +++ b/pages/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: Motion Grammar +site_name: Motion Grammar JastAdd Implementation Example repo_url: https://git-st.inf.tu-dresden.de/jastadd/motion-grammar-example site_dir: ../public diff --git a/src/main/java/de/tudresden/inf/st/mg/Main.java b/src/main/java/de/tudresden/inf/st/mg/Main.java index df724f3fce4e3bc939d99c29a645f4b377618f26..3acb2474553f7e87a8239d38327ece9d112d599b 100644 --- a/src/main/java/de/tudresden/inf/st/mg/Main.java +++ b/src/main/java/de/tudresden/inf/st/mg/Main.java @@ -19,6 +19,7 @@ public class Main { World world = World.initialWorld(new Random(1)); WorldParser parser = new WorldParser(world); + parser.setDebugDiagramDir(AST_DIAGRAM_DIR); try { Files.walk(AST_DIAGRAM_DIR) diff --git a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java index 5ff6a0b8c3e0f4a3fdac1fa5478c8cf8a202c8ba..1666e34c3e653142358427a81f07dcad77a74e08 100644 --- a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java @@ -7,18 +7,22 @@ import de.tudresden.inf.st.mg.jastadd.model.Token; import de.tudresden.inf.st.mg.jastadd.model.TokenType; import java.io.IOException; +import java.nio.file.Path; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; -import static de.tudresden.inf.st.mg.Main.AST_DIAGRAM_DIR; - public abstract class MotionGrammarParser { protected final Map<String, ASTNode<?>> context_ = new HashMap<>(); protected ASTNode<T> rootContainer_; - private int timeStep; + private int timeStep_; + protected Path astDiagramDir_; + + public void setDebugDiagramDir(Path p) { + astDiagramDir_ = p; + } /** * Prints the AST and all context models into PlantUML diagrams. Each time this method is called, a counter incremented. @@ -27,6 +31,11 @@ public abstract class MotionGrammarParser { * @param highlightNode a node that is highlighted, to illustrate what happens in the current step; may be null */ protected void printAST(String step, ASTNode<?> highlightNode) { + + if (astDiagramDir_ == null) { + return; + } + final String N_N = "4C78A6"; final String H_N = "DCE9F7"; final String N_T = "A78344"; @@ -37,16 +46,16 @@ public abstract class MotionGrammarParser { for (var contextEntry : context_.entrySet()) { Dumper.read(contextEntry.getValue()) .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName()) - .dumpAsPNG(AST_DIAGRAM_DIR.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep) + "-" + step + ".png")); + .dumpAsPNG(astDiagramDir_.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep_) + "-" + step + ".png")); } // TODO remove this once the issue in relast2uml has been resolved if (rootContainer_.getChild(0) != null) { Dumper.read(rootContainer_.getChild(0)).setBackgroundColorMethod(n -> n == null ? "white" : (n == highlightNode ? (n instanceof Token ? H_T : H_N) : (n instanceof Token ? N_T : N_N))) .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName()) .customPreamble("\nskinparam object {\nBackgroundColor<<null>> white\nBorderColor<<null>> white\nStereotypeFontColor<<null>> white\n}\n") - .dumpAsPNG(AST_DIAGRAM_DIR.resolve("AST-" + String.format("%03d", timeStep) + "-" + step + ".png")); + .dumpAsPNG(astDiagramDir_.resolve("AST-" + String.format("%03d", timeStep_) + "-" + step + ".png")); } - timeStep++; + timeStep_++; } catch (IOException e) { e.printStackTrace(); } diff --git a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java index a50279775b75480581829d0f415d3077ec9c5df2..8a0327e964c523f30050e773cc4dcb2bd6dbe0b0 100644 --- a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java +++ b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java @@ -21,12 +21,15 @@ public class ParserTest { @BeforeAll static void prepareOutputPath() throws IOException { - Files.walk(AST_DIAGRAM_DIR) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); + try { + Files.walk(AST_DIAGRAM_DIR) + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } catch (IOException e) { + // do nothing + } Files.createDirectories(AST_DIAGRAM_DIR); - } @Test @@ -36,6 +39,7 @@ public class ParserTest { World world = World.initialWorld(new Random(1)); WorldParser parser = new WorldParser(world); + parser.setDebugDiagramDir(AST_DIAGRAM_DIR); var result = parser.parseT();