]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/markdown/MarkdownTests.java
Merged changes from feature/scl to master.
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / markdown / MarkdownTests.java
diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/markdown/MarkdownTests.java b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/markdown/MarkdownTests.java
new file mode 100644 (file)
index 0000000..5c4e120
--- /dev/null
@@ -0,0 +1,102 @@
+package org.simantics.scl.compiler.tests.markdown;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.IOException;\r
+import java.io.InputStreamReader;\r
+import java.io.StringReader;\r
+import java.nio.charset.Charset;\r
+\r
+import org.junit.Test;\r
+import org.simantics.scl.compiler.markdown.internal.MarkdownParser;\r
+import org.simantics.scl.compiler.markdown.nodes.Node;\r
+\r
+public class MarkdownTests {\r
+    \r
+    public static int FAILED = 0;\r
+    public static int SUCCEEDED = 1;\r
+    public static int SKIPPED = 2;\r
+    \r
+    @Test\r
+    public void markdownTests() throws IOException {\r
+        BufferedReader reader = new BufferedReader(\r
+                new InputStreamReader(\r
+                        MarkdownTests.class.getResourceAsStream("spec.txt"),\r
+                        Charset.forName("UTF-8")));\r
+        \r
+        StringBuilder in = new StringBuilder();\r
+        StringBuilder out = new StringBuilder();\r
+        int state = 0;\r
+        int testId = 0;\r
+        int passed = 0;\r
+        int failed = 0;\r
+        int skipped = 0;\r
+        while(true) {\r
+            String line = reader.readLine();\r
+            if(line == null)\r
+                break;\r
+            switch(state) {\r
+            case 0:\r
+                if(line.equals("```````````````````````````````` example"))\r
+                    ++state;\r
+                break;\r
+            case 1:\r
+                if(line.equals("."))\r
+                    ++state;\r
+                else {\r
+                    if(in.length() > 0)\r
+                        in.append('\n');\r
+                    in.append(line);\r
+                }\r
+                break;\r
+            case 2:\r
+                if(line.equals("````````````````````````````````")) {\r
+                    ++testId;\r
+                    int status = test(testId, in.toString(), out.toString());\r
+                    if(status == SUCCEEDED)\r
+                        ++passed;\r
+                    else if(status == FAILED)\r
+                        ++failed;\r
+                    else\r
+                        ++skipped;\r
+                    in = new StringBuilder();\r
+                    out = new StringBuilder();\r
+                    state = 0;\r
+                }\r
+                else {\r
+                    if(out.length() > 0)\r
+                        out.append('\n');\r
+                    out.append(line);\r
+                }\r
+                break;\r
+            }\r
+        }\r
+        \r
+        System.out.println("Passed: " + passed + "/" + testId);\r
+        System.out.println("Failed: " + failed + "/" + testId);\r
+        System.out.println("Skipped: " + skipped + "/" + testId);\r
+    }\r
+\r
+    public static int test(int id, String in, String out) throws IOException {\r
+        MarkdownParser parser = new MarkdownParser();\r
+        Node node = parser.parseDocument(new StringReader(in.replace('\u2192', '\t')));\r
+        \r
+        String result = node.toHtml().replace('\t', '\u2192');\r
+                \r
+        boolean passed = result.equals(out);\r
+        \r
+        if(!passed) {\r
+            System.out.println("Example " + id); // + (passed ? " passed" : " failed"));\r
+            System.out.println("---- in --------------------------------------------------------------------");\r
+            System.out.println(in);\r
+            System.out.println("---- expected --------------------------------------------------------------");\r
+            System.out.println(out);\r
+            System.out.println("---- actual ----------------------------------------------------------------");\r
+            System.out.println(result);\r
+            System.out.println("----------------------------------------------------------------------------");\r
+            System.out.println();\r
+        }\r
+            \r
+        return passed ? SUCCEEDED : FAILED;\r
+    }\r
+    \r
+}\r