252534765e7cacdb5280140da7489599c6b0dc70
[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 from tiramisu.setting import settings
9
10 def make_description():
11     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
12     gcdummy = BoolOption('dummy', 'dummy', default=False)
13     # hidding dummy here
14     gcdummy.hide()
15     objspaceoption = ChoiceOption('objspace', 'Object space',
16                                 ['std', 'thunk'], 'std')
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')])
24     wantframework_option = BoolOption('wantframework', 'Test requires',
25                                       default=False,
26                                       requires=[('gc.name', 'framework')])
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 #freeze
41 def make_description_freeze():
42     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
43     gcdummy = BoolOption('dummy', 'dummy', default=False)
44     objspaceoption = ChoiceOption('objspace', 'Object space',
45                                 ['std', 'thunk'], 'std')
46     booloption = BoolOption('bool', 'Test boolean option', default=True)
47     intoption = IntOption('int', 'Test int option', default=0)
48     floatoption = FloatOption('float', 'Test float option', default=2.3)
49     stroption = StrOption('str', 'Test string option', default="abc")
50     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
51     wantref_option = BoolOption('wantref', 'Test requires', default=False,
52                                     requires=['boolop'])
53     wantframework_option = BoolOption('wantframework', 'Test requires',
54                                       default=False,
55                                       requires=['boolop'])
56
57     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
58     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
59                                            wantref_option, stroption,
60                                            wantframework_option,
61                                            intoption, boolop])
62     return descr
63
64 def test_freeze_whole_config():
65     descr = make_description_freeze()
66     conf = Config(descr)
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.freeze()
89     s.freeze()
90     raises(TypeError, 'config.string = "egg"')
91
92 def test_freeze():
93     "freeze a whole configuration object"
94     descr = make_description()
95     conf = Config(descr)
96     settings.freeze()
97     name = conf.unwrap_from_path("gc.name")
98     name.freeze()
99     raises(TypeError, "conf.gc.name = 'framework'")
100 # ____________________________________________________________
101 def test_is_hidden():
102     descr = make_description()
103     config = Config(descr)
104     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
105     # setattr
106     raises(PropertiesOptionError, "config.gc.dummy == False")
107     # getattr
108     raises(PropertiesOptionError, "config.gc.dummy")
109     # I want to access to this option anyway
110     path = 'gc.dummy'
111     homeconfig, name = config._cfgimpl_get_home_by_path(path)
112     assert homeconfig._cfgimpl_values[name] == False
113
114 def test_group_is_hidden():
115     descr = make_description()
116     config = Config(descr)
117     gc = config.unwrap_from_path('gc')
118     dummy = config.unwrap_from_path('gc.dummy')
119     gc.hide()
120     raises(PropertiesOptionError, "config.gc.dummy")
121     assert gc._is_hidden()
122     raises(PropertiesOptionError, "config.gc.float")
123     # manually set the subconfigs to "show"
124     gc.show()
125     assert gc._is_hidden() == False
126     assert config.gc.float == 2.3
127     #dummy est en hide
128     raises(PropertiesOptionError, "config.gc.dummy == False")
129
130 def test_global_show():
131     descr = make_description()
132     config = Config(descr)
133     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
134     raises(PropertiesOptionError, "config.gc.dummy == False")
135
136 def test_with_many_subgroups():
137     descr = make_description()
138     config = Config(descr)
139     assert config.gc.subgroup._cfgimpl_descr.booltwo._is_hidden() == False
140     assert config.gc.subgroup.booltwo == False
141     config.gc.subgroup._cfgimpl_descr.booltwo.hide()
142     path = 'gc.subgroup.booltwo'
143     homeconfig, name = config._cfgimpl_get_home_by_path(path)
144     assert name == "booltwo"
145     option = getattr(homeconfig._cfgimpl_descr, name)
146     assert option._is_hidden()