python 3.5 support
[tiramisu.git] / test / test_option_setting.py
1 "config.set() or config.setoption() or option.setoption()"
2 from .autopath import do_autopath
3 do_autopath()
4
5 from py.test import raises
6
7 from tiramisu.i18n import _
8 from tiramisu.error import display_list
9 from tiramisu.setting import owners, groups
10 from tiramisu.config import Config
11 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
12     StrOption, OptionDescription
13 from tiramisu.error import PropertiesOptionError
14
15
16 def make_description():
17     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
18     gcdummy = BoolOption('dummy', 'dummy', default=False)
19     objspaceoption = ChoiceOption('objspace', 'Object space',
20                                   ('std', 'thunk'), 'std')
21     booloption = BoolOption('bool', 'Test boolean option', default=True)
22     intoption = IntOption('int', 'Test int option', default=0)
23     floatoption = FloatOption('float', 'Test float option', default=2.3)
24     stroption = StrOption('str', 'Test string option', default="abc")
25     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
26     wantref_option = BoolOption('wantref', 'Test requires', default=False)
27     wantframework_option = BoolOption('wantframework', 'Test requires',
28                                       default=False)
29     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
30     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
31                                                wantref_option, stroption,
32                                                wantframework_option,
33                                                intoption, boolop])
34     return descr
35
36
37 #____________________________________________________________
38 # change with __setattr__
39 def test_attribute_access():
40     "Once set, option values can't be changed again by attribute access"
41     s = StrOption("string", "", default="string")
42     descr = OptionDescription("options", "", [s])
43     config = Config(descr)
44     # let's try to change it again
45     config.string = "foo"
46     assert config.string == "foo"
47
48
49 def test_setitem():
50     s = StrOption("string", "", default=["string", "sdfsdf"], default_multi="prout", multi=True)
51     descr = OptionDescription("options", "", [s])
52     config = Config(descr)
53     config.string[1] = "titi"
54
55
56 def test_reset():
57     "if value is None, resets to default owner"
58     s = StrOption("string", "", default="string")
59     descr = OptionDescription("options", "", [s])
60     config = Config(descr)
61     config.string = "foo"
62     assert config.string == "foo"
63     assert config.getowner(s) == owners.user
64     del(config.string)
65     assert config.string == 'string'
66     assert config.getowner(s) == owners.default
67
68
69 def test_reset_with_multi():
70     s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
71     descr = OptionDescription("options", "", [s])
72     config = Config(descr)
73 #    config.string = []
74     del(config.string)
75     assert config.string == ["string"]
76     assert config.getowner(s) == 'default'
77     config.string = ["eggs", "spam", "foo"]
78     assert config.getowner(s) == 'user'
79     config.string = []
80     del(config.string)
81 #    assert config.string == ["string"]
82     assert config.getowner(s) == 'default'
83     raises(ValueError, "config.string = None")
84
85
86 def test_default_with_multi():
87     "default with multi is a list"
88     s = StrOption("string", "", default=[], default_multi="string", multi=True)
89     descr = OptionDescription("options", "", [s])
90     config = Config(descr)
91     assert config.string == []
92     s = StrOption("string", "", default=None, default_multi="string", multi=True)
93     descr = OptionDescription("options", "", [s])
94     config = Config(descr)
95     assert config.string == []
96
97
98 def test_idontexist():
99     descr = make_description()
100     cfg = Config(descr)
101     cfg
102     raises(AttributeError, "cfg.idontexist")
103
104
105 # ____________________________________________________________
106 def test_attribute_access_with_multi():
107     s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
108     descr = OptionDescription("options", "", [s])
109     config = Config(descr)
110     config.string = ["foo", "bar"]
111     assert config.string == ["foo", "bar"]
112
113
114 def test_item_access_with_multi():
115     s = StrOption("string", "", default=["string"], multi=True)
116     descr = OptionDescription("options", "", [s])
117     config = Config(descr)
118     config.string = ["foo", "bar"]
119     assert config.string == ["foo", "bar"]
120     assert config.string[0] == "foo"
121     config.string[0] = 'changetest'
122     assert config.string[0] == 'changetest'
123
124
125 def test_access_with_multi_default():
126     s = StrOption("string", "", default=["string"], multi=True)
127     descr = OptionDescription("options", "", [s])
128     config = Config(descr)
129     assert config.getowner(s) == 'default'
130     config.string = ["foo", "bar"]
131     assert config.string == ["foo", "bar"]
132     assert config.getowner(s) == 'user'
133
134
135 def test_multi_with_requires():
136     s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
137     intoption = IntOption('int', 'Test int option', default=0)
138     stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
139                           requires=[{'option': intoption, 'expected': 1, 'action': 'hidden'}], multi=True)
140     descr = OptionDescription("options", "", [s, intoption, stroption])
141     config = Config(descr)
142     setting = config.cfgimpl_get_settings()
143     config.read_write()
144     assert not 'hidden' in setting[stroption]
145     config.int = 1
146     raises(PropertiesOptionError, "config.str = ['a', 'b']")
147     assert 'hidden' in setting[stroption]
148
149
150 def test__requires_with_inverted():
151     s = StrOption("string", "", default=["string"], multi=True)
152     intoption = IntOption('int', 'Test int option', default=0)
153     stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
154                           requires=[{'option': intoption, 'expected': 1, 'action': 'hide', 'inverse': True}], multi=True)
155     descr = OptionDescription("options", "", [s, intoption, stroption])
156     config = Config(descr)
157     setting = config.cfgimpl_get_settings()
158     assert not 'hidden' in setting[stroption]
159     config.int = 1
160     assert not 'hidden' in setting[stroption]
161
162
163 def test_multi_with_requires_in_another_group():
164     s = StrOption("string", "", default=["string"], multi=True)
165     intoption = IntOption('int', 'Test int option', default=0)
166     stroption = StrOption('str', 'Test string option', default=["abc"],
167                           requires=[{'option': intoption, 'expected': 1, 'action': 'hidden'}], multi=True)
168     descr = OptionDescription("opt", "", [stroption])
169     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
170     config = Config(descr2)
171     setting = config.cfgimpl_get_settings()
172     config.read_write()
173     assert not 'hidden' in setting[stroption]
174     config.int = 1
175     raises(PropertiesOptionError,  "config.opt.str = ['a', 'b']")
176     assert 'hidden' in setting[stroption]
177
178
179 def test_multi_with_requires_in_another_group_inverse():
180     s = StrOption("string", "", default=["string"], multi=True)
181     intoption = IntOption('int', 'Test int option', default=0)
182     stroption = StrOption('str', 'Test string option', default=["abc"],
183             requires=[{'option': intoption, 'expected': 0, 'action': 'hidden', 'inverse': True}], multi=True)
184     descr = OptionDescription("opt", "", [stroption])
185     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
186     config = Config(descr2)
187     setting = config.cfgimpl_get_settings()
188     config.read_write()
189     assert not 'hidden' in setting[stroption]
190     config.int = 1
191     raises(PropertiesOptionError,  "config.opt.str = ['a', 'b']")
192     assert 'hidden' in setting[stroption]
193
194
195 def test_apply_requires_from_config():
196     s = StrOption("string", "", default=["string"], multi=True)
197     intoption = IntOption('int', 'Test int option', default=0)
198     stroption = StrOption('str', 'Test string option', default=["abc"],
199                           requires=[{'option': intoption, 'expected': 1, 'action': 'hidden'}], multi=True)
200     descr = OptionDescription("opt", "", [stroption])
201     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
202     config = Config(descr2)
203     setting = config.cfgimpl_get_settings()
204     config.read_write()
205     assert not 'hidden' in setting[stroption]
206     config.int = 1
207     raises(PropertiesOptionError, 'config.opt.str')
208     assert 'hidden' in setting[stroption]
209
210
211 def test_apply_requires_with_disabled():
212     s = StrOption("string", "", default=["string"], multi=True)
213     intoption = IntOption('int', 'Test int option', default=0)
214     stroption = StrOption('str', 'Test string option', default=["abc"],
215                           requires=[{'option': intoption, 'expected': 1, 'action': 'disabled'}], multi=True)
216     descr = OptionDescription("opt", "", [stroption])
217     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
218     config = Config(descr2)
219     setting = config.cfgimpl_get_settings()
220     config.read_write()
221     assert not 'disabled' in setting[stroption]
222     config.int = 1
223     raises(PropertiesOptionError, 'config.opt.str')
224     assert 'disabled' in setting[stroption]
225
226
227 def test_multi_with_requires_with_disabled_in_another_group():
228     s = StrOption("string", "", default=["string"], multi=True)
229     intoption = IntOption('int', 'Test int option', default=0)
230     stroption = StrOption('str', 'Test string option', default=["abc"],
231                           requires=[{'option': intoption, 'expected': 1, 'action': 'disabled'}], multi=True)
232     descr = OptionDescription("opt", "", [stroption])
233     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
234     config = Config(descr2)
235     setting = config.cfgimpl_get_settings()
236     config.read_write()
237     assert not 'disabled' in setting[stroption]
238     config.int = 1
239     raises(PropertiesOptionError,  "config.opt.str = ['a', 'b']")
240     assert 'disabled' in setting[stroption]
241
242
243 def test_multi_with_requires_that_is_multi():
244     b = IntOption('int', 'Test int option', default=[0], multi=True)
245     c = StrOption('str', 'Test string option', default=['abc'], requires=[{'option': b, 'expected': 1, 'action': 'hidden'}], multi=True)
246     descr = OptionDescription("opt", "", [b, c])
247     descr
248     raises(ValueError, "Config(descr)")
249
250
251 def test_multi_with_requires_that_is_multi_inverse():
252     b = IntOption('int', 'Test int option', default=[0], multi=True)
253     c = StrOption('str', 'Test string option', default=['abc'], requires=[{'option': b, 'expected': 0, 'action': 'hidden', 'inverse': True}], multi=True)
254     descr = OptionDescription("opt", "", [b, c])
255     descr
256     raises(ValueError, "Config(descr)")
257
258
259 def test_multi_with_requires_that_is_masterslave():
260     b = IntOption('int', 'Test int option', default=[0], multi=True)
261     c = StrOption('str', 'Test string option', requires=[{'option': b, 'expected': 1, 'action': 'hidden'}], multi=True)
262     descr = OptionDescription("int", "", [b, c])
263     descr.impl_set_group_type(groups.master)
264     Config(descr)
265
266
267 def test_multi_with_requires_that_is_masterslave_master():
268     b = IntOption('int', 'Test int option', multi=True)
269     c = StrOption('str', 'Test string option', requires=[{'option': b, 'expected': 1, 'action': 'hidden'}], multi=True)
270     descr = OptionDescription("str", "", [c, b])
271     descr.impl_set_group_type(groups.master)
272     raises(ValueError, "Config(descr)")
273
274
275 def test_multi_with_requires_that_is_masterslave_slave():
276     b = IntOption('int', 'Test int option', default=[0], multi=True)
277     c = StrOption('str', 'Test string option', multi=True)
278     d = StrOption('str1', 'Test string option', requires=[{'option': c, 'expected': '1', 'action': 'hidden'}], multi=True)
279     descr = OptionDescription("int", "", [b, c, d])
280     descr.impl_set_group_type(groups.master)
281     config = Config(descr)
282     config.read_write()
283     assert config.int == [0]
284     assert config.str == [None]
285     assert config.str1 == [None]
286     config.int = [0, 1]
287     assert config.int == [0, 1]
288     assert config.str == [None, None]
289     assert config.str1 == [None, None]
290     config.str = [None, '1']
291     config.read_only()
292     assert config.str1 == [None, None]
293     config.read_write()
294     assert config.str1[0] is None
295     raises(PropertiesOptionError, 'config.str1[1]')
296
297
298 def test_multi_with_requires_that_is_masterslave_slave_inverse():
299     b = IntOption('int', 'Test int option', default=[0], multi=True)
300     c = StrOption('str', 'Test string option', multi=True)
301     d = StrOption('str1', 'Test string option', requires=[{'option': c, 'expected': None, 'action': 'hidden', 'inverse': True}], multi=True)
302     descr = OptionDescription("int", "", [b, c, d])
303     descr.impl_set_group_type(groups.master)
304     config = Config(descr)
305     config.read_write()
306     assert config.int == [0]
307     assert config.str == [None]
308     assert config.str1 == [None]
309     config.int = [0, 1]
310     assert config.int == [0, 1]
311     assert config.str == [None, None]
312     assert config.str1 == [None, None]
313     config.str = [None, '1']
314     config.read_only()
315     assert config.str1 == [None, None]
316     config.read_write()
317     assert config.str1[0] is None
318     raises(PropertiesOptionError, 'config.str1[1]')
319
320
321 def test_multi_with_requires_that_is_not_same_masterslave():
322     b = IntOption('int', 'Test int option', default=[0], multi=True)
323     c = StrOption('str', 'Test string option', requires=[{'option': b, 'expected': 1, 'action': 'hidden'}], multi=True)
324     descr1 = OptionDescription("int", "", [b, c])
325     descr1.impl_set_group_type(groups.master)
326     d = IntOption('int1', 'Test int option', default=[0], multi=True)
327     e = StrOption('str', 'Test string option', requires=[{'option': b, 'expected': 1, 'action': 'hidden'}], multi=True)
328     descr2 = OptionDescription("int1", "", [d, e])
329     descr2.impl_set_group_type(groups.master)
330     descr3 = OptionDescription('val', '', [descr1, descr2])
331     descr3
332     raises(ValueError, "Config(descr3)")
333
334
335 def test_multi_with_bool():
336     s = BoolOption("bool", "", default=[False], multi=True)
337     descr = OptionDescription("options", "", [s])
338     config = Config(descr)
339     assert descr.bool.impl_is_multi() is True
340     config.bool = [True, False]
341     assert config.cfgimpl_get_values()[s] == [True, False]
342     assert config.bool == [True, False]
343
344
345 def test_multi_with_bool_two():
346     s = BoolOption("bool", "", default=[False], multi=True)
347     descr = OptionDescription("options", "", [s])
348     config = Config(descr)
349     config
350     assert descr.bool.impl_is_multi() is True
351     raises(ValueError, "config.bool = True")
352
353
354 def test_choice_access_with_multi():
355     ch = ChoiceOption("t1", "", ("a", "b"), default=["a"], multi=True)
356     descr = OptionDescription("options", "", [ch])
357     config = Config(descr)
358     config.t1 = ["a", "b", "a", "b"]
359     assert config.t1 == ["a", "b", "a", "b"]
360
361
362 #____________________________________________________________
363 def test_accepts_multiple_changes_from_option():
364     s = StrOption("string", "", default="string")
365     descr = OptionDescription("options", "", [s])
366     config = Config(descr)
367     config.string = "egg"
368     assert s.impl_getdefault() == "string"
369     assert config.string == "egg"
370     config.string = 'blah'
371     assert s.impl_getdefault() == "string"
372     assert config.string == "blah"
373     config.string = 'bol'
374     assert config.string == 'bol'
375
376
377 def test_allow_multiple_changes_from_config():
378     """
379     a `setoption` from the config object is much like the attribute access,
380     except the fact that value owner can bet set
381     """
382     s = StrOption("string", "", default="string")
383     s2 = StrOption("string2", "", default="string")
384     suboption = OptionDescription("bip", "", [s2])
385     descr = OptionDescription("options", "", [s, suboption])
386     config = Config(descr)
387     config.string = "oh"
388     assert config.string == "oh"
389     config.string = "blah"
390     assert config.string == "blah"
391
392
393 # ____________________________________________________________
394 # accessing a value by the get method
395 def test_access_by_get():
396     descr = make_description()
397     cfg = Config(descr)
398     raises(AttributeError, "cfg.find(byname='idontexist')")
399     assert cfg.find_first(byname='wantref', type_='value') is False
400     assert cfg.gc.dummy is False
401     assert cfg.find_first(byname='dummy', type_='value') is False
402
403
404 def test_access_by_get_whith_hide():
405     b1 = BoolOption("b1", "", properties=(('hidden'),))
406     descr = OptionDescription("opt", "",
407                               [OptionDescription("sub", "",
408                                                  [b1, ChoiceOption("c1", "", ('a', 'b', 'c'), 'a'),
409                                                   BoolOption("d1", "")]),
410                                BoolOption("b2", ""),
411                                BoolOption("d1", "")])
412     c = Config(descr)
413     c.read_write()
414     raises(AttributeError, "c.find(byname='b1')")
415
416
417 def test_extend_config_properties():
418     descr = make_description()
419     cfg = Config(descr)
420     setting = cfg.cfgimpl_get_settings()
421     assert set(eval(str(setting))) == set(['cache', 'expire', 'validator', 'warnings'])
422     setting.extend(['test', 'test2'])
423     assert set(eval(str(setting))) == set(['test', 'cache', 'test2', 'expire', 'validator', 'warnings'])
424
425
426 def test_append_properties():
427     descr = make_description()
428     cfg = Config(descr)
429     setting = cfg.cfgimpl_get_settings()
430     option = cfg.cfgimpl_get_description().gc.dummy
431     assert tuple(option._properties) == tuple()
432     assert not 'test' in setting[option]
433     setting[option].append('test')
434     assert tuple(option._properties) == tuple()
435     assert 'test' in setting[option]
436
437
438 def test_reset_properties():
439     descr = make_description()
440     cfg = Config(descr)
441     setting = cfg.cfgimpl_get_settings()
442     option = cfg.cfgimpl_get_description().gc.dummy
443     assert setting._p_.get_modified_properties() == {}
444     setting.append('frozen')
445     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'cache', 'validator', 'warnings'))}
446     setting.reset()
447     assert setting._p_.get_modified_properties() == {}
448     setting[option].append('test')
449     assert setting._p_.get_modified_properties() == {'gc.dummy': set(('test',))}
450     setting.reset()
451     assert setting._p_.get_modified_properties() == {'gc.dummy': set(('test',))}
452     setting.append('frozen')
453     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings')), 'gc.dummy': set(('test',))}
454     setting.reset(option)
455     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings'))}
456     setting[option].append('test')
457     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings')), 'gc.dummy': set(('test',))}
458     setting.reset(all_properties=True)
459     assert setting._p_.get_modified_properties() == {}
460     raises(ValueError, 'setting.reset(all_properties=True, opt=option)')
461     a = descr.wantref
462     setting[a].append('test')
463     setting[a].reset()
464
465
466 def test_reset_multiple():
467     descr = make_description()
468     cfg = Config(descr)
469     setting = cfg.cfgimpl_get_settings()
470     option = cfg.cfgimpl_get_description().gc.dummy
471     setting.append('frozen')
472     setting[option].append('test')
473     setting.reset()
474     setting.reset()
475     setting.append('frozen')
476     setting[option].append('test')
477     setting.reset(option)
478     setting.reset(option)
479     setting.append('frozen')
480     setting[option].append('test')
481     setting.reset(all_properties=True)
482     setting.reset(all_properties=True)
483
484
485 def test_properties_cached():
486     b1 = BoolOption("b1", "", properties=('test',))
487     descr = OptionDescription("opt", "", [OptionDescription("sub", "", [b1])])
488     c = Config(descr)
489     c.read_write()
490     setting = c.cfgimpl_get_settings()
491     option = c.cfgimpl_get_description().sub.b1
492     option
493     c._setattr('sub.b1', True, force_permissive=True)
494     assert str(setting[b1]) in ["['test']", "[u'test']"]
495
496
497
498 def test_append_properties_force_store_value():
499     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
500     gcgroup = OptionDescription('gc', '', [gcdummy])
501     descr = OptionDescription('tiramisu', '', [gcgroup])
502     cfg = Config(descr)
503     setting = cfg.cfgimpl_get_settings()
504     option = cfg.cfgimpl_get_description().gc.dummy
505     assert tuple(option._properties) == tuple(['force_store_value'])
506     assert not 'test' in setting[option]
507     setting[option].append('test')
508     assert tuple(option._properties) == tuple(['force_store_value'])
509     assert 'test' in setting[option]
510
511
512 def test_reset_properties_force_store_value():
513     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
514     gcgroup = OptionDescription('gc', '', [gcdummy])
515     descr = OptionDescription('tiramisu', '', [gcgroup])
516     cfg = Config(descr)
517     setting = cfg.cfgimpl_get_settings()
518     option = cfg.cfgimpl_get_description().gc.dummy
519     assert setting._p_.get_modified_properties() == {}
520     setting.append('frozen')
521     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'cache', 'validator', 'warnings'))}
522     setting.reset()
523     assert setting._p_.get_modified_properties() == {}
524     setting[option].append('test')
525     assert setting._p_.get_modified_properties() == {'gc.dummy': set(('test', 'force_store_value'))}
526     setting.reset()
527     assert setting._p_.get_modified_properties() == {'gc.dummy': set(('test', 'force_store_value'))}
528     setting.append('frozen')
529     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings')), 'gc.dummy': set(('test', 'force_store_value'))}
530     setting.reset(option)
531     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings'))}
532     setting[option].append('test')
533     assert setting._p_.get_modified_properties() == {None: set(('frozen', 'expire', 'validator', 'cache', 'warnings')), 'gc.dummy': set(('test', 'force_store_value'))}
534     setting.reset(all_properties=True)
535     assert setting._p_.get_modified_properties() == {}
536     raises(ValueError, 'setting.reset(all_properties=True, opt=option)')
537
538
539 def test_pprint():
540     msg_error = _("cannot access to {0} \"{1}\" because has {2} {3}")
541     msg_is = _('the value of "{0}" is "{1}"')
542     msg_is_not = _('the value of "{0}" is not "{1}"')
543     properties = _('properties')
544     prop = _('property')
545
546     s = StrOption("string", "", default=["string"], default_multi="string", multi=True, properties=('hidden', 'disabled'))
547     s2 = StrOption("string2", "", default="string")
548     s3 = StrOption("string3", "", default=["string"], default_multi="string", multi=True, properties=('hidden',))
549     intoption = IntOption('int', 'Test int option', default=0)
550     stroption = StrOption('str', 'Test string option', default="abc",
551                           requires=[{'option': intoption, 'expected': 2, 'action': 'hidden', 'inverse': True},
552                     {'option': intoption, 'expected': 3, 'action': 'hidden', 'inverse': True},
553                     {'option': intoption, 'expected': 4, 'action': 'hidden', 'inverse': True},
554                     {'option': intoption, 'expected': 1, 'action': 'disabled'},
555                     {'option': s2, 'expected': 'string', 'action': 'disabled'}])
556
557     val2 = StrOption('val2', "")
558     descr2 = OptionDescription("options", "", [val2], requires=[{'option': intoption, 'expected': 1, 'action': 'hidden'}])
559
560     val3 = StrOption('val3', "", requires=[{'option': stroption, 'expected': '2', 'action': 'hidden', 'inverse': True}])
561
562     descr = OptionDescription("options", "", [s, s2, s3, intoption, stroption, descr2, val3])
563     config = Config(descr)
564     setting = config.cfgimpl_get_settings()
565     config.read_write()
566     config.int = 1
567     err = None
568     try:
569         config.str
570     except Exception as error:
571         err = error
572
573     list_disabled_1 = 'disabled (' + display_list([msg_is.format('string2', 'string'), msg_is.format('Test int option', '1')]) + ')'
574     list_disabled_2 = 'disabled (' + display_list([msg_is.format('Test int option', '1'), msg_is.format('string2', 'string')]) + ')'
575     list_hidden = 'hidden (' + msg_is_not.format('Test int option', display_list([2, 3, 4], 'or')) + ')'
576     comp1 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled_1, list_hidden])))
577     comp2 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled_2, list_hidden])))
578     comp3 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_hidden, list_disabled_1])))
579     comp4 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_hidden, list_disabled_2])))
580     assert comp1 or comp2 or comp3 or comp4
581
582     err = None
583     try:
584         config.options.val2
585     except Exception as error:
586         err = error
587
588     assert str(err) == msg_error.format('optiondescription', 'options', prop, 'hidden (' + msg_is.format('Test int option', 1) + ')')
589
590     err = None
591     try:
592         config.val3
593     except Exception as error:
594         err = error
595
596     msg_1 = msg_is.format('string2', 'string')
597     msg_2 = msg_is.format('Test int option', 1)
598     msg_3 = msg_is_not.format('Test int option', display_list([2, 3, 4], 'or'))
599
600     list_hidden = 'hidden (' + display_list([msg_1, msg_2, msg_3]) + ')'
601     comp1 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
602     list_hidden = 'hidden (' + display_list([msg_1, msg_3, msg_2]) + ')'
603     comp2 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
604     list_hidden = 'hidden (' + display_list([msg_2, msg_1, msg_3]) + ')'
605     comp3 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
606     list_hidden = 'hidden (' + display_list([msg_2, msg_3, msg_1]) + ')'
607     comp4 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
608     list_hidden = 'hidden (' + display_list([msg_3, msg_1, msg_2]) + ')'
609     comp5 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
610     list_hidden = 'hidden (' + display_list([msg_3, msg_2, msg_1]) + ')'
611     comp6 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
612     assert comp1 or comp2 or comp3 or comp4 or comp5 or comp6
613
614     err = None
615     try:
616         config.string
617     except Exception as error:
618         err = error
619
620     assert str(err) == msg_error.format('option', 'string', properties, display_list(['disabled', 'hidden']))
621
622     err = None
623     try:
624         config.string3
625     except Exception as error:
626         err = error
627
628     assert str(err) == msg_error.format('option', 'string3', prop, 'hidden')