comparison test/testparserlib.py @ 284:05184b95fa16

Moved tests to seperate folder
author Windel Bouwman
date Fri, 15 Nov 2013 13:43:22 +0100
parents python/testparserlib.py@62386bcee1ba
children 6753763d3bec
comparison
equal deleted inserted replaced
283:c9781c73e7e2 284:05184b95fa16
1 import unittest
2 from parserlib import OneOrMore, Literal, Or, Sequence, Optional
3
4 class ParserCombinatorTestCase(unittest.TestCase):
5 def test1(self):
6 #p = Parser()
7 # parse and interpret:
8 n40 = Literal('40')
9 plus = Literal('+')
10 n2 = Literal('2')
11 n40.ParseAction = int
12 plus.ParseAction = replaceWith(0)
13 n2.ParseAction = int
14 p = Sequence([n40,plus,n2])
15 p.ParseAction = wordsum
16
17 result = p.parse('40+2')
18 self.assertEqual(42, result[0])
19
20 def replaceWith(s):
21 def _repFunc(*args):
22 return s
23 return _repFunc
24
25 wordsum = lambda t: sum(t)
26
27 class WordToNumTestCase(unittest.TestCase):
28 def setUp(self):
29 numWords = OneOrMore()
30 def makeLit(s, val):
31 ret = Literal(s)
32 ret.ParseAction = replaceWith(val)
33 return ret
34 unitDefs = [('zero', 0), ('three', 3), ('one', 1)]
35 units = Or( [makeLit(s, v) for s, v in unitDefs] )
36 tensDefs = [('twenty', 20)]
37 tens = Or( [makeLit(s, v) for s, v in tensDefs] )
38
39 numPart = Sequence([Optional(tens), units])
40 numPart.ParseAction = wordsum
41 self.p = numPart
42
43 def check(self, i, o):
44 result = self.p.parse(i)[0]
45 self.assertEqual(o, result)
46
47 def test0(self):
48 self.check('zero', 0)
49
50 def test23(self):
51 self.check('twentythree', 23)
52
53 @unittest.skip
54 def test321(self):
55 # TODO
56 self.check('three hundred and twenty one', 321)
57
58
59 if __name__ == '__main__':
60 unittest.main()
61