]> hydra-www.ietfng.org Git - dyna2/commitdiff
dyna doctest runnner.
authorTim Vieira <tim.f.vieira@gmail.com>
Thu, 27 Jun 2013 20:57:10 +0000 (16:57 -0400)
committerTim Vieira <tim.f.vieira@gmail.com>
Thu, 27 Jun 2013 20:57:10 +0000 (16:57 -0400)
dyna-doctest [new file with mode: 0755]
src/Dyna/Backend/Python/dyna-doctest.py [new file with mode: 0755]
test/repl/retract-rule.doctest [new file with mode: 0644]

diff --git a/dyna-doctest b/dyna-doctest
new file mode 100755 (executable)
index 0000000..6d8abd8
--- /dev/null
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+exec python ${DYNAHOME:-.}/src/Dyna/Backend/Python/dyna-doctest.py "$@"
diff --git a/src/Dyna/Backend/Python/dyna-doctest.py b/src/Dyna/Backend/Python/dyna-doctest.py
new file mode 100755 (executable)
index 0000000..0a9caf3
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+import re, sys
+
+sys.path.append('src/Dyna/Backend/Python')
+
+from interpreter import Interpreter
+from repl import REPL
+from cStringIO import StringIO
+
+from utils import red, green
+
+
+def extract(code):
+    for block in re.compile('^:- ', re.MULTILINE).split(code):
+        for cmd, expect in re.findall('(.*?)\n([\w\W]*)$', block):
+            yield cmd, expect
+
+
+def run(code):
+    interp = Interpreter()
+    repl = REPL(interp)
+
+    for cmd, expect in extract(code):
+        print ':-', cmd
+        sys.stdout = x = StringIO()
+        try:
+            repl.onecmd(cmd)
+        finally:
+            sys.stdout = sys.__stdout__
+        got = x.getvalue().strip()
+        expect = expect.strip()
+        if expect != got:
+            print green % expect
+            print red % got
+        else:
+            print x.getvalue().rstrip()
+        print
+
+
+if __name__ == '__main__':
+    for filename in sys.argv[1:]:
+        with file(filename) as f:
+            run(f.read())
diff --git a/test/repl/retract-rule.doctest b/test/repl/retract-rule.doctest
new file mode 100644 (file)
index 0000000..5e3313c
--- /dev/null
@@ -0,0 +1,32 @@
+:- a += 1.
+=============
+a := 1
+
+:- b += 1.
+=============
+b := 1
+
+:- a += 1.
+=============
+a := 2
+
+:- rules
+
+0: a += 1.
+  1: b += 1.
+  2: a += 1.
+
+:- sol
+
+Solution
+========
+a := 2
+b := 1
+
+:- retract_rule 0
+:- retract_rule 1
+:- sol
+
+Solution
+========
+a := 1