1
0
forked from GitHub/gf-core
Files
gf-core/contrib/py-bindings/test.py
2010-07-22 14:19:55 +00:00

107 lines
2.5 KiB
Python

#!/usr/bin/env python
# GF Python bindings
# Jordi Saludes 2010
#
import gf
import unittest
samples = [
("Odd (Number 89)",
{'eng': "is 89 odd",
'spa': "89 es impar"}),
("Prime (Number 21)",
{'eng': "is 21 prime",
'spa': "21 es primo"})]
def lang2iso(l):
s = rmprefix(l)
assert(s[:5],"Query")
return s[5:].lower()
import re
hexre = re.compile('0x[0-9a-f]+:[ ]*')
def rmprefix(obj):
return `obj`
# s = `obj`
# m = hexre.match(s)
# return m and s[m.end(0):]
class TestPgfInfo(unittest.TestCase):
def pgf(self, path=None):
path = path or self.path
return gf.read_pgf(path)
def setUp(self):
self.path = 'Query.pgf'
def test_readPgf(self):
pgf = self.pgf()
self.assertNotEqual(pgf,None)
def test_readNonExistent(self):
nopath = 'x' + self.path
self.assertRaises(IOError, self.pgf, nopath)
def test_startcat(self):
pgf = self.pgf()
cat = pgf.startcat()
self.assertEqual(rmprefix(cat),'Question')
def test_categories(self):
pgf = self.pgf()
cats = [`c` for c in pgf.categories()]
self.failUnless('Float' in cats)
self.failUnless('Int' in cats)
self.failUnless('String' in cats)
def test_createLanguage(self):
pgf = self.pgf()
for lang in 'QueryEng QuerySpa'.split():
l = gf.read_language(lang)
self.assertEqual(rmprefix(l),lang)
class TestParsing(unittest.TestCase):
def setUp(self):
self.lexed = samples
self.lang = 'QueryEng'
self.pgf = "Query.pgf"
def test_parse(self):
s = self.lexed[0]
pgf = gf.read_pgf(self.pgf)
l = gf.read_language(self.lang)
for abs,cnc in self.lexed:
ps = pgf.parse(cnc['eng'], l)
self.failUnless(ps)
pt = rmprefix(ps[0])
self.assertEqual(pt,abs)
class TestLinearize(unittest.TestCase):
def setUp(self):
self.samples = samples
self.pgf = gf.read_pgf('Query.pgf')
self.lang = gf.read_language('QueryEng')
def test_Linearize(self):
l = self.lang
for abs,cnc in self.samples:
ts = self.pgf.parse(cnc['eng'], l)
self.assertEqual(cnc['eng'],self.pgf.lin(l,ts[0]))
class TestTranslate(unittest.TestCase):
def setUp(self):
self.samples = samples
self.pgf = gf.read_pgf('Query.pgf')
self.langs = [(lang2iso(l),l) for l in self.pgf.languages()]
def test_translate(self):
for abs,cnc in self.samples:
for i,l in self.langs:
for j,m in self.langs:
if i==j: continue
parsed = self.pgf.parse(cnc[i],l)
assert len(parsed) == 1
lin = self.pgf.lin(m,parsed[0])
self.assertEqual(lin,cnc[j])
if __name__ == '__main__':
unittest.main()