3fb80c93ae1bb777a127ca42b91c36f22bc51cbe
[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     gcoption.set_mode("expert")
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     gcgroup.set_mode("expert")
35     descr = OptionDescription('trs', '', [gcgroup, booloption, objspaceoption,
36                                            wantref_option, stroption,
37                                            wantframework_option,
38                                            intoption])
39     return descr
40 #____________________________________________________________
41 #freeze
42 def make_description_freeze():
43     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
44     gcdummy = BoolOption('dummy', 'dummy', default=False)
45     objspaceoption = ChoiceOption('objspace', 'Object space',
46                                 ['std', 'thunk'], 'std')
47     booloption = BoolOption('bool', 'Test boolean option', default=True)
48     intoption = IntOption('int', 'Test int option', default=0)
49     floatoption = FloatOption('float', 'Test float option', default=2.3)
50     stroption = StrOption('str', 'Test string option', default="abc")
51     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
52     wantref_option = BoolOption('wantref', 'Test requires', default=False,
53                                     requires=['boolop'])
54     wantframework_option = BoolOption('wantframework', 'Test requires',
55                                       default=False,
56                                       requires=['boolop'])
57     
58     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
59     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
60                                            wantref_option, stroption,
61                                            wantframework_option,
62                                            intoption, boolop])
63     return descr
64
65 def test_freeze_one_option():
66     "freeze an option "
67     descr = make_description_freeze()
68     conf = Config(descr)
69     #freeze only one option
70     conf.gc._cfgimpl_descr.dummy.freeze()
71     assert conf.gc.dummy == False
72     raises(TypeError, "conf.gc.dummy = True")
73
74 def test_frozen_value():
75     "setattr a frozen value at the config level"
76     s = StrOption("string", "", default="string")
77     descr = OptionDescription("options", "", [s])
78     config = Config(descr)
79     s.freeze()
80     raises(ConfigError, 'config.string = "egg"')
81
82 def test_freeze():
83     "freeze a whole configuration object"
84     descr = make_description()
85     conf = Config(descr)
86     conf.cfgimpl_freeze()
87     raises(ConfigError, "conf.gc.name = 'try to modify'")
88 # ____________________________________________________________
89 def test_is_hidden():
90     descr = make_description()
91     config = Config(descr)
92     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
93     # setattr
94     raises(HiddenOptionError, "config.gc.dummy == False")
95     # getattr
96     raises(HiddenOptionError, "config.gc.dummy")
97     # I want to access to this option anyway
98     path = 'gc.dummy'
99     homeconfig, name = config._cfgimpl_get_home_by_path(path)
100     assert homeconfig._cfgimpl_values[name] == False
101
102 def test_group_is_hidden():
103     descr = make_description()
104     config = Config(descr)
105     gc = config.unwrap_from_path('gc')
106     gc.hide()
107     dummy = config.unwrap_from_path('gc.dummy')
108     raises(HiddenOptionError, "config.gc.dummy")
109     assert gc._is_hidden()
110     raises(HiddenOptionError, "config.gc.float")
111     # manually set the subconfigs to "show"
112     gc.show()
113     assert gc._is_hidden() == False
114     assert config.gc.float == 2.3
115     #dummy est en hide
116     raises(HiddenOptionError, "config.gc.dummy == False")
117     
118 def test_global_show():
119     descr = make_description()
120     config = Config(descr)
121     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
122     raises(HiddenOptionError, "config.gc.dummy == False")
123
124 def test_with_many_subgroups():
125     descr = make_description()
126     config = Config(descr)
127     assert config.gc.subgroup._cfgimpl_descr.booltwo._is_hidden() == False
128     assert config.gc.subgroup.booltwo == False
129     config.gc.subgroup._cfgimpl_descr.booltwo.hide()
130     path = 'gc.subgroup.booltwo'
131     homeconfig, name = config._cfgimpl_get_home_by_path(path)
132     assert name == "booltwo"
133     option = getattr(homeconfig._cfgimpl_descr, name)
134     assert option._is_hidden()
135
136 def test_option_mode():
137     descr = make_description()
138     config = Config(descr)
139     assert config.gc._cfgimpl_descr.name.get_mode() == 'expert'
140     assert config._cfgimpl_descr.gc.get_mode() == 'expert'
141