irongit

A parser inspired by the django orm.

gparser/tests/test_fields.py
98 lines2.0 KBPython
1import unittest
2import parsers
3import datetime as dt
4
5
6class FieldParser(parsers.Parser):
7 a = parsers.Field()
8
9
10class HourMinuteIntParser(parsers.Parser):
11 a = parsers.HourMinuteIntField()
12
13
14class HourMinuteDeltaParser(parsers.Parser):
15 a = parsers.HourMinuteDeltaField()
16
17
18class PhoneParser(parsers.Parser):
19 a = parsers.PhoneField()
20
21
22class StrParser(parsers.Parser):
23 a = parsers.StrField()
24
25
26class IntParser(parsers.Parser):
27 a = parsers.IntField()
28
29
30class FloatParser(parsers.Parser):
31 a = parsers.FloatField()
32
33
34class BoolParser(parsers.Parser):
35 a = parsers.BooleanField()
36
37
38class TestField(unittest.TestCase):
39 cls = FieldParser
40 good_vals = ['a']
41 bad_vals = []
42 type = str
43
44 def test_good_vals(self):
45 for val in self.good_vals:
46 t = self.cls(a=val)
47 self.assertEqual(type(t.a), self.type)
48
49 def test_bad_vals(self):
50 def func():
51 self.cls(a=val)
52 for val in self.bad_vals:
53 self.assertRaises(Exception, func)
54
55
56class TestHourMinuteDeltaField(TestField):
57 cls = HourMinuteDeltaParser
58 good_vals = ['23421', '23:32', '234:21', '2323'].copy()
59 bad_vals = ['fds', '234', '3:3'].copy()
60 type = dt.timedelta
61
62
63class TestHourMinuteIntField(TestHourMinuteDeltaField):
64 cls = HourMinuteIntParser
65 type = int
66
67
68class TestPhoneField(TestField):
69 cls = PhoneParser
70 good_vals = ['32452345', '232-234-234-']
71 bad_vals = ['asedrfaw']
72
73 def test_foreign(self):
74 t = self.cls(a='011-123-456-789')
75 self.assertEqual(t.a, '+123456789')
76
77 def test_us(self):
78 t = self.cls(a='123456789')
79 self.assertEqual(t.a, '+1123456789')
80
81
82class TestStrField(TestField):
83 cls = StrParser
84 good_vals = ['asdf']
85
86
87class TestIntField(TestField):
88 cls = IntParser
89 good_vals = ['2314', '32']
90 bad_vals = ['adsf']
91 type = int
92
93
94class TestFloatField(TestField):
95 cls = FloatParser
96 good_vals = ['223.23', '23']
97 bad_vals = ['asdf']
98 type = float