bba08458e56e2db7a36bd3f76a3a05993d10abe1
[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_one_option():
65     "freeze an option "
66     descr = make_description_freeze()
67     conf = Config(descr)
68     #freeze only one option
69     conf.gc._cfgimpl_descr.dummy.freeze()
70     assert conf.gc.dummy == False
71     raises(TypeError, "conf.gc.dummy = True")
72
73 def test_frozen_value():
74     "setattr a frozen value at the config level"
75     s = StrOption("string", "", default="string")
76     descr = OptionDescription("options", "", [s])
77     config = Config(descr)
78     settings.freeze()
79     s.freeze()
80     raises(TypeError, 'config.string = "egg"')
81
82 def test_freeze():
83     "freeze a whole configuration object"
84     descr = make_description()
85     conf = Config(descr)
86     settings.freeze()
87     name = conf.unwrap_from_path("gc.name")
88     name.freeze()
89     raises(TypeError, "conf.gc.name = 'framework'")
90 # ____________________________________________________________
91 def test_is_hidden():
92     descr = make_description()
93     config = Config(descr)
94     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
95     # setattr
96     raises(PropertiesOptionError, "config.gc.dummy == False")
97     # getattr
98     raises(PropertiesOptionError, "config.gc.dummy")
99     # I want to access to this option anyway
100     path = 'gc.dummy'
101     homeconfig, name = config._cfgimpl_get_home_by_path(path)
102     assert homeconfig._cfgimpl_values[name] == False
103
104 def test_group_is_hidden():
105     descr = make_description()
106     config = Config(descr)
107     gc = config.unwrap_from_path('gc')
108     dummy = config.unwrap_from_path('gc.dummy')
109     gc.hide()
110     raises(PropertiesOptionError, "config.gc.dummy")
111     assert gc._is_hidden()
112     raises(PropertiesOptionError, "config.gc.float")
113     # manually set the subconfigs to "show"
114     gc.show()
115     assert gc._is_hidden() == False
116     assert config.gc.float == 2.3
117     #dummy est en hide
118     raises(PropertiesOptionError, "config.gc.dummy == False")
119
120 def test_global_show():
121     descr = make_description()
122     config = Config(descr)
123     assert config.gc._cfgimpl_descr.dummy._is_hidden() == True
124     raises(PropertiesOptionError, "config.gc.dummy == False")
125
126 def test_with_many_subgroups():
127     descr = make_description()
128     config = Config(descr)
129     assert config.gc.subgroup._cfgimpl_descr.booltwo._is_hidden() == False
130     assert config.gc.subgroup.booltwo == False
131     config.gc.subgroup._cfgimpl_descr.booltwo.hide()
132     path = 'gc.subgroup.booltwo'
133     homeconfig, name = config._cfgimpl_get_home_by_path(path)
134     assert name == "booltwo"
135     option = getattr(homeconfig._cfgimpl_descr, name)
136     assert option._is_hidden()