1 """
2 Test normans.
3 """
4
5 from __future__ import with_statement
6
7 import datetime
8 from nose.tools import assert_raises
9 from grassyknoll.lib import Norman
10
12 pants = Norman.ObjectNorman()
13 pants.sale_date = Norman.DateNorman()
14 pants.size = Norman.IntegerNorman(optional=True)
15 pants.color = Norman.UnicodeNorman()
16 pants.constant = Norman.FunctionNorman(lambda x: u"CONSTANT", prohibited=True, filled=True)
17 input = dict(sale_date='April 1, 2007', size='32', color='blue')
18 bluejeans = pants(input)
19 assert isinstance(bluejeans, dict) and bluejeans != input
20 assert bluejeans['size'] == 32
21 assert bluejeans['color'] == u'blue'
22 assert bluejeans['sale_date'] == datetime.date(2007, 4, 1)
23 assert bluejeans['constant'] == u'CONSTANT'
24
26 assert issubclass(Norman.NormanError, ValueError)
27
28 norm = Norman.NoneNorman()
29 assert norm(None) is norm('null') is None
30 assert_raises(Norman.NormanError, norm, 0)
31
32 norm = Norman.BoolNorman()
33 assert norm('yes') and norm(True)
34 assert not norm(0) and isinstance(norm('no'), bool)
35 assert_raises(Norman.NormanError, norm, None)
36
37 norm = Norman.FloatNorman()
38 assert norm('1.0') == 1.0 and isinstance(norm(0), float)
39 assert_raises(Norman.NormanError, norm, '0x1')
40
41 norm = Norman.StrNorman()
42 assert norm('abc') == 'abc' and isinstance(norm(u''), str)
43 assert_raises(Norman.NormanError, norm, [])
44
45 norm = Norman.DateTimeNorman()
46 assert norm('2008-1-1 12:00:00') == datetime.datetime(2008, 1, 1, 12)
47 assert isinstance(norm(0.0), datetime.datetime)
48 assert_raises(Norman.NormanError, norm, 'Yesterday')
49