2 from py.test import raises
4 from tiramisu.config import Config
5 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
6 StrOption, IPOption, OptionDescription
7 from tiramisu.error import PropertiesOptionError, ConflictError
10 def make_description():
11 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
12 gcdummy = BoolOption('dummy', 'dummy', default=False)
13 objspaceoption = ChoiceOption('objspace', 'Object space',
14 ('std', 'thunk'), 'std')
15 booloption = BoolOption('bool', 'Test boolean option', default=True)
16 intoption = IntOption('int', 'Test int option', default=0)
17 intoption2 = IntOption('int', 'Test int option', default=0)
18 floatoption = FloatOption('float', 'Test float option', default=2.3)
19 stroption = StrOption('str', 'Test string option', default="abc")
20 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
21 wantref_option = BoolOption('wantref', 'Test requires', default=False,
22 requires=((boolop, True, 'hidden'),))
23 wantframework_option = BoolOption('wantframework', 'Test requires',
25 requires=((boolop, True, 'hidden'),))
26 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption, intoption2])
27 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
28 wantref_option, stroption,
34 def make_description_duplicates():
35 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
37 gcdummy = BoolOption('dummy', 'dummy', default=False)
38 objspaceoption = ChoiceOption('objspace', 'Object space',
39 ('std', 'thunk'), 'std')
40 booloption = BoolOption('bool', 'Test boolean option', default=True)
41 intoption = IntOption('int', 'Test int option', default=0)
42 floatoption = FloatOption('float', 'Test float option', default=2.3)
43 stroption = StrOption('str', 'Test string option', default="abc")
44 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
45 wantref_option = BoolOption('wantref', 'Test requires', default=False,
46 requires=((boolop, True, 'hidden'),))
47 wantframework_option = BoolOption('wantframework', 'Test requires',
49 requires=((boolop, True, 'hidden'),))
51 gcdummy2 = BoolOption('dummy', 'dummy2', default=True)
53 gcdummy3 = BoolOption('dummy', 'dummy2', default=True)
54 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, gcdummy2, floatoption])
55 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
56 wantref_option, stroption,
58 intoption, boolop, gcdummy3])
62 def test_identical_paths():
63 """If in the schema (the option description) there is something that
64 have the same name, an exection is raised
66 raises(ConflictError, "make_description_duplicates()")
69 def make_description2():
70 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
71 gcdummy = BoolOption('dummy', 'dummy', default=False)
73 floatoption = FloatOption('float', 'Test float option', default=2.3)
75 objspaceoption = ChoiceOption('objspace', 'Object space',
76 ['std', 'thunk'], 'std')
77 booloption = BoolOption('bool', 'Test boolean option', default=True)
78 intoption = IntOption('int', 'Test int option', default=0)
79 stroption = StrOption('str', 'Test string option', default="abc")
81 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
83 wantref_option = BoolOption('wantref', 'Test requires', default=False,
84 requires=((boolop, True, 'hidden'),))
86 wantframework_option = BoolOption('wantframework', 'Test requires',
88 requires=((boolop, True, 'hidden'),))
89 wantframework_option.enable_multi()
91 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
92 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
93 wantref_option, stroption,
99 # FIXME: il faudra tester les validations sur les multis
100 #def test_multi_constraints():
101 # "a multi in a constraint has to have the same length"
102 # descr = make_description2()
103 # cfg = Config(descr)
104 # cfg.boolop = [True, True, False]
105 # cfg.wantframework = [False, False, True]
107 #def test_multi_raise():
108 # "a multi in a constraint has to have the same length"
109 # # FIXME fusionner les deux tests, MAIS PROBLEME :
110 # # il ne devrait pas etre necessaire de refaire une config
111 # # si la valeur est modifiee une deuxieme fois ->
112 # #raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
113 # # ExceptionFailure: 'DID NOT RAISE'
114 # descr = make_description2()
115 # cfg = Config(descr)
116 # cfg.boolop = [True]
117 # raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
118 # ____________________________________________________________
119 # adding dynamically new options description schema
120 #def test_newoption_add_in_descr():
121 # descr = make_description()
122 # newoption = BoolOption('newoption', 'dummy twoo', default=False)
123 # descr.add_child(newoption)
124 # config = Config(descr)
125 # assert config.newoption == False
127 #def test_newoption_add_in_subdescr():
128 # descr = make_description()
129 # newoption = BoolOption('newoption', 'dummy twoo', default=False)
130 # descr.gc.add_child(newoption)
131 # config = Config(descr)
132 # config.bool = False
133 # assert config.gc.newoption == False
135 #def test_newoption_add_in_config():
136 # descr = make_description()
137 # config = Config(descr)
138 # config.bool = False
139 # newoption = BoolOption('newoption', 'dummy twoo', default=False)
140 # descr.add_child(newoption)
141 # config.cfgimpl_update()
142 # assert config.newoption == False
143 # ____________________________________________________________
146 def make_description_requires():
147 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
148 gcdummy = BoolOption('dummy', 'dummy', default=False)
150 floatoption = FloatOption('float', 'Test float option', default=2.3)
152 objspaceoption = ChoiceOption('objspace', 'Object space',
153 ('std', 'thunk'), 'std')
154 booloption = BoolOption('bool', 'Test boolean option', default=True)
155 intoption = IntOption('int', 'Test int option', default=0)
156 stroption = StrOption('str', 'Test string option', default="abc",
157 requires=((intoption, 1, 'hidden'),))
159 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
160 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
161 stroption, intoption])
165 def test_hidden_if_in():
166 descr = make_description_requires()
168 setting = cfg.cfgimpl_get_settings()
170 stroption = cfg.unwrap_from_path('str')
171 assert not 'hidden' in setting[stroption]
173 raises(PropertiesOptionError, "cfg.str")
174 raises(PropertiesOptionError, 'cfg.str="uvw"')
175 assert 'hidden' in setting[stroption]
178 def test_hidden_if_in_with_group():
179 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
180 gcdummy = BoolOption('dummy', 'dummy', default=False)
182 floatoption = FloatOption('float', 'Test float option', default=2.3)
184 objspaceoption = ChoiceOption('objspace', 'Object space',
185 ('std', 'thunk'), 'std')
186 booloption = BoolOption('bool', 'Test boolean option', default=True)
187 intoption = IntOption('int', 'Test int option', default=0)
188 stroption = StrOption('str', 'Test string option', default="abc")
189 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
190 requires=((intoption, 1, 'hidden'),))
191 descr = OptionDescription('constraints', '', [gcgroup, booloption,
192 objspaceoption, stroption, intoption])
194 setting = cfg.cfgimpl_get_settings()
196 assert not 'hidden' in setting[stroption]
198 raises(PropertiesOptionError, "cfg.gc.name")
201 def test_disabled_with_group():
202 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
203 gcdummy = BoolOption('dummy', 'dummy', default=False)
205 floatoption = FloatOption('float', 'Test float option', default=2.3)
207 objspaceoption = ChoiceOption('objspace', 'Object space',
208 ('std', 'thunk'), 'std')
209 booloption = BoolOption('bool', 'Test boolean option', default=True)
210 intoption = IntOption('int', 'Test int option', default=0)
211 stroption = StrOption('str', 'Test string option', default="abc")
212 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
213 requires=((intoption, 1, 'disabled'),))
214 descr = OptionDescription('constraints', '', [gcgroup, booloption,
215 objspaceoption, stroption, intoption])
220 raises(PropertiesOptionError, "cfg.gc.name")
221 #____________________________________________________________
224 def make_description_callback():
225 gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
226 gcdummy = BoolOption('dummy', 'dummy')
227 objspaceoption = ChoiceOption('objspace', 'Object space',
228 ('std', 'thunk'), 'std')
229 booloption = BoolOption('bool', 'Test boolean option', default=True)
230 intoption = IntOption('int', 'Test int option', default=0)
231 floatoption = FloatOption('float', 'Test float option', default=2.3)
232 stroption = StrOption('str', 'Test string option', default="abc")
233 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
234 wantref_option = BoolOption('wantref', 'Test requires', default=False,
235 requires=((boolop, True, 'hidden'),))
236 wantframework_option = BoolOption('wantframework', 'Test requires',
238 requires=((boolop, True, 'hidden'),))
239 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
240 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
241 wantref_option, stroption,
242 wantframework_option,
247 def test_has_callback():
248 descr = make_description_callback()
249 # here the owner is 'default'
250 config = Config(descr)
251 setting = config.cfgimpl_get_settings()
254 # because dummy has a callback
255 dummy = config.unwrap_from_path('gc.dummy')
256 setting.append('freeze')
257 setting[dummy].append('frozen')
258 raises(PropertiesOptionError, "config.gc.dummy = True")
261 def test_freeze_and_has_callback():
262 descr = make_description_callback()
263 config = Config(descr)
264 setting = config.cfgimpl_get_settings()
267 setting = config.cfgimpl_get_settings()
268 setting.append('freeze')
269 dummy = config.unwrap_from_path('gc.dummy')
270 setting[dummy].append('frozen')
271 raises(PropertiesOptionError, "config.gc.dummy = True")