summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/py-bindings/Makefile3
-rw-r--r--contrib/py-bindings/test.py45
2 files changed, 39 insertions, 9 deletions
diff --git a/contrib/py-bindings/Makefile b/contrib/py-bindings/Makefile
index bcf78e572..af627bb2e 100644
--- a/contrib/py-bindings/Makefile
+++ b/contrib/py-bindings/Makefile
@@ -7,6 +7,9 @@ exdir=../../examples/tutorial/embedded
build: gf.so
+test:
+ python test.py
+
gf.so: PyGF.hs gfmodule.c Query.pgf
ghc $(import) --make -fglasgow-exts -O2 -no-hs-main -c $<
ghc -O2 --make -fglasgow-exts -no-hs-main -optl '-shared' \
diff --git a/contrib/py-bindings/test.py b/contrib/py-bindings/test.py
index 69b1f000a..253360a4f 100644
--- a/contrib/py-bindings/test.py
+++ b/contrib/py-bindings/test.py
@@ -9,10 +9,10 @@ import unittest
samples = [
- ("Odd (Number 89)",
+ (['Odd', ['Number', 89]],
{'eng': "is 89 odd",
'spa': "89 es impar"}),
- ("Prime (Number 21)",
+ (['Prime', ['Number', 21]],
{'eng': "is 21 prime",
'spa': "21 es primo"})]
@@ -21,6 +21,22 @@ def lang2iso(l):
assert(s[:5],"Query")
return s[5:].lower()
+def exp2str(e):
+ def e2s(e,n):
+ if type(e) == type([2]):
+ f = e[0]
+ sr = ' '.join([e2s(arg,n+1) for arg in e[1:]])
+ ret =f + ' ' + sr
+ return n and '('+ret+')' or ret
+ elif type(e) == type('2'):
+ return e
+ elif type(e) == type(2):
+ return `e`
+ else:
+ raise ValueError, "Do not know how to render " + `e`
+ return e2s(e,0)
+
+
import re
hexre = re.compile('0x[0-9a-f]+:[ ]*')
def rmprefix(obj):
@@ -68,10 +84,11 @@ class TestParsing(unittest.TestCase):
pgf = gf.read_pgf(self.pgf)
l = gf.read_language(self.lang)
for abs,cnc in self.lexed:
+ rabs = exp2str(abs)
ps = pgf.parse(cnc['eng'], l)
self.failUnless(ps)
pt = rmprefix(ps[0])
- self.assertEqual(pt,abs)
+ self.assertEqual(pt,rabs)
class TestLinearize(unittest.TestCase):
@@ -104,16 +121,26 @@ class TestTranslate(unittest.TestCase):
class TestUnapplyExpr(unittest.TestCase):
def setUp(self):
+ self.samples = samples
self.pgf = gf.read_pgf('Query.pgf')
self.langs = dict([(lang2iso(l),l) for l in self.pgf.languages()])
+ def deep_unapp(self,exp):
+ exp = exp.unapply()
+ if type(exp) == type([2]):
+ f = exp[0]
+ return [`f`] + map(self.deep_unapp,exp[1:])
+ else:
+ return exp
+
+
def test_unapply(self):
- ps = self.pgf.parse('is 23 odd',self.langs['eng'])
- f,es = ps[0].unapply()
- self.assertEqual(`f`,'Odd')
- f,es = es.unapply()
- self.assertEqual(`f`,'Number')
- self.assertEqual(es.unapply(),23)
+ lg = 'eng'
+ lang = self.langs[lg]
+ for abs,cnc in self.samples:
+ parsed = self.pgf.parse(cnc[lg],lang)
+ uparsed = self.deep_unapp(parsed[0])
+ self.assertEqual(abs,uparsed)
if __name__ == '__main__':
unittest.main()