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