2 from py.test import raises
4 from tiramisu.config import *
5 from tiramisu.option import *
7 def make_description():
8 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
9 gcdummy = BoolOption('dummy', 'dummy', default=False)
10 objspaceoption = ChoiceOption('objspace', 'Object space',
11 ['std', 'thunk'], 'std')
12 booloption = BoolOption('bool', 'Test boolean option', default=True)
13 intoption = IntOption('int', 'Test int option', default=0)
14 floatoption = FloatOption('float', 'Test float option', default=2.3)
15 stroption = StrOption('str', 'Test string option', default="abc")
16 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
17 wantref_option = BoolOption('wantref', 'Test requires', default=False,
19 wantframework_option = BoolOption('wantframework', 'Test requires',
22 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
23 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
24 wantref_option, stroption,
29 def make_description_duplicates():
30 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
32 gcdummy = BoolOption('dummy', 'dummy', default=False)
33 objspaceoption = ChoiceOption('objspace', 'Object space',
34 ['std', 'thunk'], 'std')
35 booloption = BoolOption('bool', 'Test boolean option', default=True)
36 intoption = IntOption('int', 'Test int option', default=0)
37 floatoption = FloatOption('float', 'Test float option', default=2.3)
38 stroption = StrOption('str', 'Test string option', default="abc")
39 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
40 wantref_option = BoolOption('wantref', 'Test requires', default=False,
42 wantframework_option = BoolOption('wantframework', 'Test requires',
46 gcdummy2 = BoolOption('dummy', 'dummy2', default=True)
48 gcdummy3 = BoolOption('dummy', 'dummy2', default=True)
49 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, gcdummy2, floatoption])
50 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
51 wantref_option, stroption,
53 intoption, boolop, gcdummy3])
56 def test_identical_paths():
57 """If in the schema (the option description) there is something that
58 have the same name, an exection is raised
60 descr = make_description_duplicates()
61 raises(ConflictConfigError, "cfg = Config(descr)")
63 def make_description2():
64 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
65 gcdummy = BoolOption('dummy', 'dummy', default=False)
67 floatoption = FloatOption('float', 'Test float option', default=2.3)
69 objspaceoption = ChoiceOption('objspace', 'Object space',
70 ['std', 'thunk'], 'std')
71 booloption = BoolOption('bool', 'Test boolean option', default=True)
72 intoption = IntOption('int', 'Test int option', default=0)
73 stroption = StrOption('str', 'Test string option', default="abc")
75 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
77 wantref_option = BoolOption('wantref', 'Test requires', default=False,
80 wantframework_option = BoolOption('wantframework', 'Test requires',
83 wantframework_option.enable_multi()
85 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
86 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
87 wantref_option, stroption,
92 # FIXME: il faudra tester les validations sur les multis
93 #def test_multi_constraints():
94 # "a multi in a constraint has to have the same length"
95 # descr = make_description2()
97 # cfg.boolop = [True, True, False]
98 # cfg.wantframework = [False, False, True]
100 #def test_multi_raise():
101 # "a multi in a constraint has to have the same length"
102 # # FIXME fusionner les deux tests, MAIS PROBLEME :
103 # # il ne devrait pas etre necessaire de refaire une config
104 # # si la valeur est modifiee une deuxieme fois ->
105 # #raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
106 # # ExceptionFailure: 'DID NOT RAISE'
107 # descr = make_description2()
108 # cfg = Config(descr)
109 # cfg.boolop = [True]
110 # raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
111 # ____________________________________________________________
112 # adding dynamically new options description schema
113 def test_newoption_add_in_descr():
114 descr = make_description()
115 newoption = BoolOption('newoption', 'dummy twoo', default=False)
116 descr.add_child(newoption)
117 config = Config(descr)
118 assert config.newoption == False
120 def test_newoption_add_in_subdescr():
121 descr = make_description()
122 newoption = BoolOption('newoption', 'dummy twoo', default=False)
123 descr.gc.add_child(newoption)
124 config = Config(descr)
126 assert config.gc.newoption == False
128 #def test_newoption_add_in_config():
129 # descr = make_description()
130 # config = Config(descr)
131 # config.bool = False
132 # newoption = BoolOption('newoption', 'dummy twoo', default=False)
133 # descr.add_child(newoption)
134 # config.cfgimpl_update()
135 # assert config.newoption == False
136 # ____________________________________________________________
137 def make_description_requires():
138 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
139 gcdummy = BoolOption('dummy', 'dummy', default=False)
141 floatoption = FloatOption('float', 'Test float option', default=2.3)
143 objspaceoption = ChoiceOption('objspace', 'Object space',
144 ['std', 'thunk'], 'std')
145 booloption = BoolOption('bool', 'Test boolean option', default=True)
146 intoption = IntOption('int', 'Test int option', default=0)
147 stroption = StrOption('str', 'Test string option', default="abc",
148 requires=[('int', 1, 'hide')])
150 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
151 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
152 stroption, intoption])
155 def test_hidden_if_in():
156 descr = make_description_requires()
158 intoption = cfg.unwrap_from_path('int')
159 stroption = cfg.unwrap_from_path('str')
160 assert not stroption._is_hidden()
162 raises(PropertiesOptionError, "cfg.str")
163 raises(PropertiesOptionError, 'cfg.str= "uvw"')
164 assert stroption._is_hidden()
166 def test_hidden_if_in_with_group():
167 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
168 gcdummy = BoolOption('dummy', 'dummy', default=False)
170 floatoption = FloatOption('float', 'Test float option', default=2.3)
172 objspaceoption = ChoiceOption('objspace', 'Object space',
173 ['std', 'thunk'], 'std')
174 booloption = BoolOption('bool', 'Test boolean option', default=True)
175 intoption = IntOption('int', 'Test int option', default=0)
176 stroption = StrOption('str', 'Test string option', default="abc")
177 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
178 requires=[('int', 1, 'hide')])
179 descr = OptionDescription('constraints', '', [gcgroup, booloption,
180 objspaceoption, stroption, intoption])
182 assert not gcgroup._is_hidden()
184 raises(PropertiesOptionError, "cfg.gc.name")
185 assert gcgroup._is_hidden()
187 def test_disabled_with_group():
188 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
189 gcdummy = BoolOption('dummy', 'dummy', default=False)
191 floatoption = FloatOption('float', 'Test float option', default=2.3)
193 objspaceoption = ChoiceOption('objspace', 'Object space',
194 ['std', 'thunk'], 'std')
195 booloption = BoolOption('bool', 'Test boolean option', default=True)
196 intoption = IntOption('int', 'Test int option', default=0)
197 stroption = StrOption('str', 'Test string option', default="abc")
198 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
199 requires=[('int', 1, 'disable')])
200 descr = OptionDescription('constraints', '', [gcgroup, booloption,
201 objspaceoption, stroption, intoption])
203 assert not gcgroup._is_disabled()
205 raises(PropertiesOptionError, "cfg.gc.name")
206 assert gcgroup._is_disabled()
207 #____________________________________________________________
209 def make_description_callback():
210 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
211 gcdummy = BoolOption('dummy', 'dummy', callback="toto")
212 objspaceoption = ChoiceOption('objspace', 'Object space',
213 ['std', 'thunk'], 'std')
214 booloption = BoolOption('bool', 'Test boolean option', default=True)
215 intoption = IntOption('int', 'Test int option', default=0)
216 floatoption = FloatOption('float', 'Test float option', default=2.3)
217 stroption = StrOption('str', 'Test string option', default="abc")
218 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
219 wantref_option = BoolOption('wantref', 'Test requires', default=False,
221 wantframework_option = BoolOption('wantframework', 'Test requires',
224 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
225 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
226 wantref_option, stroption,
227 wantframework_option,
231 def test_has_callback():
232 descr = make_description_callback()
233 # here the owner is 'default'
234 config = Config(descr)
236 # because dummy has a callback
237 dummy = config.unwrap_from_path('gc.dummy')
238 settings = config.cfgimpl_get_settings()
241 raises(TypeError, "config.gc.dummy = True")
243 def test_freeze_and_has_callback_with_setoption():
244 descr = make_description_callback()
245 config = Config(descr)
247 settings = config.cfgimpl_get_settings()
249 dummy = config.unwrap_from_path('gc.dummy')
251 raises(TypeError, "config.gc.setoption('dummy', True, 'gen_config')")
252 #____________________________________________________________