python 3.5 support
[tiramisu.git] / test / test_option_type.py
1 # coding: utf-8
2 "frozen and hidden values"
3 from .autopath import do_autopath
4 do_autopath()
5
6 from py.test import raises
7
8 from tiramisu.config import Config
9 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
10     PasswordOption, StrOption, DateOption, OptionDescription
11 from tiramisu.error import PropertiesOptionError
12
13
14 def make_description():
15     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
16     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=(('hidden'),))
17     objspaceoption = ChoiceOption('objspace', 'Object space',
18                                   ('std', 'thunk'), ['std'], multi=True)
19     booloption = BoolOption('bool', 'Test boolean option', default=True)
20     intoption = IntOption('int', 'Test int option', default=0)
21     floatoption = FloatOption('float', 'Test float option', default=2.3)
22     stroption = StrOption('str', 'Test string option', default="abc")
23
24     wantref_option = BoolOption('wantref', 'Test requires', default=False,
25                                 requires=({'option': gcoption, 'expected': 'ref', 'action': 'hidden'},))
26     wantframework_option = BoolOption('wantframework', 'Test requires',
27                                       default=False,
28                                       requires=({'option': gcoption, 'expected': 'framework', 'action': 'hidden'},))
29
30     # ____________________________________________________________
31     booloptiontwo = BoolOption('booltwo', 'Test boolean option two', default=False)
32     subgroup = OptionDescription('subgroup', '', [booloptiontwo])
33     # ____________________________________________________________
34
35     gcgroup = OptionDescription('gc', '', [subgroup, gcoption, gcdummy, floatoption])
36     descr = OptionDescription('trs', '', [gcgroup, booloption, objspaceoption,
37                                           wantref_option, stroption,
38                                           wantframework_option,
39                                           intoption])
40     return descr
41
42
43 # ____________________________________________________________
44 def test_is_hidden():
45     descr = make_description()
46     config = Config(descr)
47     setting = config.cfgimpl_get_settings()
48     config.read_write()
49     dummy = config.unwrap_from_path('gc.dummy')
50     assert not 'frozen' in setting[dummy]
51     # setattr
52     raises(PropertiesOptionError, "config.gc.dummy == False")
53     # getattr
54     raises(PropertiesOptionError, "config.gc.dummy")
55
56
57 def test_group_is_hidden():
58     descr = make_description()
59     config = Config(descr)
60     setting = config.cfgimpl_get_settings()
61     config.read_write()
62     gc = config.unwrap_from_path('gc')
63     config.unwrap_from_path('gc.dummy')
64     setting[gc].append('hidden')
65     raises(PropertiesOptionError, "config.gc.dummy")
66     assert 'hidden' in setting[gc]
67     raises(PropertiesOptionError, "config.gc.float")
68     # manually set the subconfigs to "show"
69     setting[gc].remove('hidden')
70     assert not 'hidden' in setting[gc]
71     assert config.gc.float == 2.3
72     #dummy est en hide
73     prop = []
74     try:
75         config.gc.dummy = False
76     except PropertiesOptionError as err:
77         prop = err.proptype
78     assert 'hidden' in prop
79
80 def test_extend_properties():
81     descr = make_description()
82     config = Config(descr)
83     setting = config.cfgimpl_get_settings()
84     config.read_write()
85     gc = config.unwrap_from_path('gc')
86     config.unwrap_from_path('gc.dummy')
87     setting[gc].extend(['hidden', 'user_defined_property'])
88     assert 'hidden' in setting[gc]
89     assert 'user_defined_property' in setting[gc]
90
91 def test_group_is_hidden_multi():
92     descr = make_description()
93     config = Config(descr)
94     setting = config.cfgimpl_get_settings()
95     config.read_write()
96     obj = config.unwrap_from_path('objspace')
97     objspace = config.objspace
98     setting[obj].append('hidden')
99     raises(PropertiesOptionError, "config.objspace")
100     assert 'hidden' in setting[obj]
101     prop = []
102     try:
103         objspace.append('std')
104     except PropertiesOptionError as err:
105         prop = err.proptype
106     assert 'hidden' in prop
107     setting[obj].remove('hidden')
108     assert not 'hidden' in setting[obj]
109     config.objspace.append('std')
110
111
112 def test_global_show():
113     descr = make_description()
114     config = Config(descr)
115     setting = config.cfgimpl_get_settings()
116     config.read_write()
117     dummy = config.unwrap_from_path('gc.dummy')
118     setting[dummy].append('hidden')
119     assert 'hidden' in setting[dummy]
120     raises(PropertiesOptionError, "config.gc.dummy == False")
121
122
123 def test_with_many_subgroups():
124     descr = make_description()
125     config = Config(descr)
126     booltwo = config.unwrap_from_path('gc.subgroup.booltwo')
127     setting = config.cfgimpl_get_settings()
128     assert not 'hidden' in setting[booltwo]
129     assert config.gc.subgroup.booltwo is False
130     setting[booltwo].append('hidden')
131     path = 'gc.subgroup.booltwo'
132     homeconfig, name = config.cfgimpl_get_home_by_path(path)
133     assert name == "booltwo"
134     getattr(homeconfig.cfgimpl_get_description(), name)
135     assert 'hidden' in setting[booltwo]
136
137
138 def test_password_option():
139     o = PasswordOption('o', '')
140     d = OptionDescription('d', '', [o])
141     c = Config(d)
142
143     c.o = u'a_valid_password'
144     raises(ValueError, "c.o = 1")
145
146
147 def test_date_option():
148     o = DateOption('o', '')
149     d = OptionDescription('d', '', [o])
150     c = Config(d)
151
152     c.o = u'2017-02-04'
153     c.o = u'2017-2-4'
154     raises(ValueError, "c.o = 1")
155     raises(ValueError, "c.o = u'2017-13-20'")
156     raises(ValueError, "c.o = u'2017-11-31'")
157     raises(ValueError, "c.o = u'2017-12-32'")
158     raises(ValueError, "c.o = u'2017-2-29'")
159     raises(ValueError, "c.o = u'2-2-2017'")
160     raises(ValueError, "c.o = u'2017/2/2'")