review exception
[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 *
7 from tiramisu.option import *
8
9 def make_description():
10     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
11     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=(('hidden'),))
12     objspaceoption = ChoiceOption('objspace', 'Object space',
13                                 ('std', 'thunk'), 'std')
14     booloption = BoolOption('bool', 'Test boolean option', default=True)
15     intoption = IntOption('int', 'Test int option', default=0)
16     floatoption = FloatOption('float', 'Test float option', default=2.3)
17     stroption = StrOption('str', 'Test string option', default="abc")
18
19     wantref_option = BoolOption('wantref', 'Test requires', default=False,
20                                     requires=(('gc.name', 'ref', 'hidden'),))
21     wantframework_option = BoolOption('wantframework', 'Test requires',
22                                       default=False,
23                                       requires=(('gc.name', 'framework', 'hidden'),))
24
25     # ____________________________________________________________
26     booloptiontwo = BoolOption('booltwo', 'Test boolean option two', default=False)
27     subgroup = OptionDescription('subgroup', '', [booloptiontwo])
28     # ____________________________________________________________
29
30     gcgroup = OptionDescription('gc', '', [subgroup, gcoption, gcdummy, floatoption])
31     descr = OptionDescription('trs', '', [gcgroup, booloption, objspaceoption,
32                                            wantref_option, stroption,
33                                            wantframework_option,
34                                            intoption])
35     return descr
36 #____________________________________________________________
37 #freeze
38 def make_description_freeze():
39     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
40     gcdummy = BoolOption('dummy', 'dummy', default=False)
41     objspaceoption = ChoiceOption('objspace', 'Object space',
42                                 ('std', 'thunk'), 'std')
43     booloption = BoolOption('bool', 'Test boolean option', default=True)
44     intoption = IntOption('int', 'Test int option', default=0)
45     floatoption = FloatOption('float', 'Test float option', default=2.3)
46     stroption = StrOption('str', 'Test string option', default="abc")
47     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
48     wantref_option = BoolOption('wantref', 'Test requires', default=False,
49                                     requires=(('boolop', True, 'hidden'),))
50     wantframework_option = BoolOption('wantframework', 'Test requires',
51                                       default=False,
52                                       requires=(('boolop', True, 'hidden'),))
53
54     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
55     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
56                                            wantref_option, stroption,
57                                            wantframework_option,
58                                            intoption, boolop])
59     return descr
60
61 def test_freeze_whole_config():
62     descr = make_description_freeze()
63     conf = Config(descr)
64     settings = conf.cfgimpl_get_settings()
65     settings.enable_property('everything_frozen')
66     assert conf.gc.dummy == False
67     raises(ConfigError, "conf.gc.dummy = True")
68     settings.disable_property('everything_frozen')
69     conf.gc.dummy = True
70     assert conf.gc.dummy == True
71
72 def test_freeze_one_option():
73     "freeze an option "
74     descr = make_description_freeze()
75     conf = Config(descr)
76     setting = conf.cfgimpl_get_settings()
77     setting.read_write()
78     #freeze only one option
79     dummy = conf.unwrap_from_path('gc.dummy')
80     conf.gc.cfgimpl_get_settings().add_property('frozen', dummy)
81     assert conf.gc.dummy == False
82     raises(ConfigError, "conf.gc.dummy = True")
83
84 def test_frozen_value():
85     "setattr a frozen value at the config level"
86     s = StrOption("string", "", default="string")
87     descr = OptionDescription("options", "", [s])
88     config = Config(descr)
89     settings = config.cfgimpl_get_settings().enable_property('frozen')
90     config.cfgimpl_get_settings().add_property('frozen', s)
91     raises(ConfigError, 'config.string = "egg"')
92
93 def test_freeze():
94     "freeze a whole configuration object"
95     descr = make_description()
96     conf = Config(descr)
97     settings = conf.cfgimpl_get_settings().enable_property('frozen')
98     name = conf.unwrap_from_path("gc.name")
99     conf.cfgimpl_get_settings().add_property('frozen', name)
100     raises(ConfigError, "conf.gc.name = 'framework'")
101 # ____________________________________________________________
102 def test_is_hidden():
103     descr = make_description()
104     config = Config(descr)
105     setting = config.cfgimpl_get_settings()
106     setting.read_write()
107     dummy = config.unwrap_from_path('gc.dummy')
108     assert not config.cfgimpl_get_settings().has_property('frozen', dummy)
109     # setattr
110     raises(PropertiesOptionError, "config.gc.dummy == False")
111     # getattr
112     raises(PropertiesOptionError, "config.gc.dummy")
113     # I want to access to this option anyway
114     opt = config.unwrap_from_path("gc.dummy")
115     assert config.cfgimpl_get_values()[opt] == False
116
117 def test_group_is_hidden():
118     descr = make_description()
119     config = Config(descr)
120     setting = config.cfgimpl_get_settings()
121     setting.read_write()
122     gc = config.unwrap_from_path('gc')
123     dummy = config.unwrap_from_path('gc.dummy')
124     config.cfgimpl_get_settings().add_property('hidden', gc)
125     raises(PropertiesOptionError, "config.gc.dummy")
126     assert config.cfgimpl_get_settings().has_property('hidden', gc)
127     raises(PropertiesOptionError, "config.gc.float")
128     # manually set the subconfigs to "show"
129     config.cfgimpl_get_settings().del_property('hidden', gc)
130     assert not config.cfgimpl_get_settings().has_property('hidden', gc)
131     assert config.gc.float == 2.3
132     #dummy est en hide
133     raises(PropertiesOptionError, "config.gc.dummy == False")
134
135 def test_global_show():
136     descr = make_description()
137     config = Config(descr)
138     setting = config.cfgimpl_get_settings()
139     setting.read_write()
140     dummy = config.unwrap_from_path('gc.dummy')
141     config.cfgimpl_get_settings().add_property('hidden', dummy)
142     assert config.cfgimpl_get_settings().has_property('hidden', dummy)
143     raises(PropertiesOptionError, "config.gc.dummy == False")
144
145 def test_with_many_subgroups():
146     descr = make_description()
147     config = Config(descr)
148     booltwo = config.unwrap_from_path('gc.subgroup.booltwo')
149     assert not config.cfgimpl_get_settings().has_property('hidden', booltwo)
150     assert config.gc.subgroup.booltwo == False
151     config.cfgimpl_get_settings().add_property('hidden', booltwo)
152     path = 'gc.subgroup.booltwo'
153     homeconfig, name = config.cfgimpl_get_home_by_path(path)
154     assert name == "booltwo"
155     option = getattr(homeconfig._cfgimpl_descr, name)
156     assert config.cfgimpl_get_settings().has_property('hidden', booltwo)