checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / RegressionTests.java
index 67152b6..943c611 100644 (file)
@@ -73,12 +73,10 @@ public class RegressionTests {
         public final String input;
         public final String[] output;
         public final Union grammar;
-        public TestCase(String input, String[] output, Union grammar, boolean tib) {
+        public TestCase(String input, String[] output, Union grammar, boolean tib) throws IOException {
             this.inp = tib
-                ? new CharToken.Stream(new StringReader(input), input.indexOf('\n')==-1?"\""+input+"\": ":"")
-                /*: new TibCharToken.Stream(new StringReader(input))*/
-                : new CharToken.Stream(new StringReader(input), input.indexOf('\n')==-1?"\""+input+"\": ":"")
-                ;
+                ? new Tib(input)
+                : new CharToken.Stream(new StringReader(input), input.indexOf('\n')==-1?"\""+input+"\": ":"");
             this.input = input;
             this.output = output;
             this.grammar = grammar;
@@ -125,15 +123,21 @@ public class RegressionTests {
     }
 
     public static class TestCaseBuilder extends MetaGrammar {
-        public TestCase[] ts(Object o1, TestCase[] ts, Object o2) { return ts; }
-        public TestCase[] ts(TestCase[] ts) { return ts; }
-        public TestCase testcase(String input, String[] output, Union grammar) { return new TestCase(input, output,        grammar, false); }
-        public TestCase testcase(String input,                  Union grammar) { return new TestCase(input, new String[0], grammar, false); }
-        public TestCase  tibcase(String input,                  Union grammar) { return new TestCase(input, new String[0], grammar, false); }
-        public MetaGrammar grammar(Object[] o) { return this; }
-        public Object walk(String tag, Object[] args) {
-            if ("grammar".equals(tag)) return done("s");
-            else return super.walk(tag, args);
+        public Object walk(Tree<String> tree) {
+            try {
+                if ("grammar".equals(tree.head())) { walkChildren(tree); return done("s"); }
+                else if ("output".equals(tree.head())) return string(tree.children());
+                else if ("input".equals(tree.head())) return string(tree.children());
+                else if ("tibcase".equals(tree.head()) || "testcase".equals(tree.head())) {
+                    String input = string(tree.child(0));
+                    String[] output = tree.numChildren()>2 ? ((String[])walk(tree, 1)) : new String[0];
+                    Union grammar = (Union)walk(tree, tree.numChildren()-1);
+                    return new TestCase(input, output, grammar, "tibcase".equals(tree.head()));
+                } else if ("ts".equals(tree.head())) return walk(tree, 0);
+                else return super.walk(tree);
+            } catch (Exception e) {
+                throw new Error(e);
+            }
         }
     }