pass force_properties to value's _setitem and remove config's setoption
[tiramisu.git] / test / test_option_type.py
1 # coding: utf-8
2 "frozen and hidden values"
3 import autopath
4 from py.test import raises
5
6 from tiramisu.config import Config
7 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
8     StrOption, OptionDescription
9 from tiramisu.error import PropertiesOptionError
10
11
12 def make_description():
13     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
14     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=(('hidden'),))
15     objspaceoption = ChoiceOption('objspace', 'Object space',
16                                   ('std', 'thunk'), ['std'], multi=True)
17     booloption = BoolOption('bool', 'Test boolean option', default=True)
18     intoption = IntOption('int', 'Test int option', default=0)
19     floatoption = FloatOption('float', 'Test float option', default=2.3)
20     stroption = StrOption('str', 'Test string option', default="abc")
21
22     wantref_option = BoolOption('wantref', 'Test requires', default=False,
23                                 requires=(('gc.name', 'ref', 'hidden'),))
24     wantframework_option = BoolOption('wantframework', 'Test requires',
25                                       default=False,
26                                       requires=(('gc.name', 'framework', 'hidden'),))
27
28     # ____________________________________________________________
29     booloptiontwo = BoolOption('booltwo', 'Test boolean option two', default=False)
30     subgroup = OptionDescription('subgroup', '', [booloptiontwo])
31     # ____________________________________________________________
32
33     gcgroup = OptionDescription('gc', '', [subgroup, gcoption, gcdummy, floatoption])
34     descr = OptionDescription('trs', '', [gcgroup, booloption, objspaceoption,
35                                           wantref_option, stroption,
36                                           wantframework_option,
37                                           intoption])
38     return descr
39
40
41 # ____________________________________________________________
42 def test_is_hidden():
43     descr = make_description()
44     config = Config(descr)
45     setting = config.cfgimpl_get_settings()
46     setting.read_write()
47     dummy = config.unwrap_from_path('gc.dummy')
48     assert not config.cfgimpl_get_settings().has_property('frozen', dummy)
49     # setattr
50     raises(PropertiesOptionError, "config.gc.dummy == False")
51     # getattr
52     raises(PropertiesOptionError, "config.gc.dummy")
53
54
55 def test_group_is_hidden():
56     descr = make_description()
57     config = Config(descr)
58     setting = config.cfgimpl_get_settings()
59     setting.read_write()
60     gc = config.unwrap_from_path('gc')
61     config.unwrap_from_path('gc.dummy')
62     config.cfgimpl_get_settings().add_property('hidden', gc)
63     raises(PropertiesOptionError, "config.gc.dummy")
64     assert config.cfgimpl_get_settings().has_property('hidden', gc)
65     raises(PropertiesOptionError, "config.gc.float")
66     # manually set the subconfigs to "show"
67     config.cfgimpl_get_settings().del_property('hidden', gc)
68     assert not config.cfgimpl_get_settings().has_property('hidden', gc)
69     assert config.gc.float == 2.3
70     #dummy est en hide
71     prop = []
72     try:
73         config.gc.dummy = False
74     except PropertiesOptionError, err:
75         prop = err.proptype
76     assert 'hidden' in prop
77
78
79 def test_group_is_hidden_multi():
80     descr = make_description()
81     config = Config(descr)
82     setting = config.cfgimpl_get_settings()
83     setting.read_write()
84     obj = config.unwrap_from_path('objspace')
85     objspace = config.objspace
86     config.cfgimpl_get_settings().add_property('hidden', obj)
87     raises(PropertiesOptionError, "config.objspace")
88     assert config.cfgimpl_get_settings().has_property('hidden', obj)
89     prop = []
90     try:
91         objspace.append('std')
92     except PropertiesOptionError, err:
93         prop = err.proptype
94     assert 'hidden' in prop
95     config.cfgimpl_get_settings().del_property('hidden', obj)
96     assert not config.cfgimpl_get_settings().has_property('hidden', obj)
97     config.objspace.append('std')
98
99
100 def test_global_show():
101     descr = make_description()
102     config = Config(descr)
103     setting = config.cfgimpl_get_settings()
104     setting.read_write()
105     dummy = config.unwrap_from_path('gc.dummy')
106     config.cfgimpl_get_settings().add_property('hidden', dummy)
107     assert config.cfgimpl_get_settings().has_property('hidden', dummy)
108     raises(PropertiesOptionError, "config.gc.dummy == False")
109
110
111 def test_with_many_subgroups():
112     descr = make_description()
113     config = Config(descr)
114     booltwo = config.unwrap_from_path('gc.subgroup.booltwo')
115     assert not config.cfgimpl_get_settings().has_property('hidden', booltwo)
116     assert config.gc.subgroup.booltwo is False
117     config.cfgimpl_get_settings().add_property('hidden', booltwo)
118     path = 'gc.subgroup.booltwo'
119     homeconfig, name = config.cfgimpl_get_home_by_path(path)
120     assert name == "booltwo"
121     getattr(homeconfig._cfgimpl_descr, name)
122     assert config.cfgimpl_get_settings().has_property('hidden', booltwo)