getowner need now an option
[tiramisu.git] / test / test_freeze.py
1 # coding: utf-8
2 "frozen and hidden values"
3 import autopath
4
5 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
6     StrOption, OptionDescription
7 from tiramisu.config import Config
8 from tiramisu.error import PropertiesOptionError
9
10
11 #____________________________________________________________
12 #freeze
13 def make_description_freeze():
14     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
15     gcdummy = BoolOption('dummy', 'dummy', default=False)
16     objspaceoption = ChoiceOption('objspace', 'Object space',
17                                   ('std', 'thunk'), 'std')
18     booloption = BoolOption('bool', 'Test boolean option', default=True)
19     intoption = IntOption('int', 'Test int option', default=0)
20     floatoption = FloatOption('float', 'Test float option', default=2.3)
21     stroption = StrOption('str', 'Test string option', default="abc")
22     boolop = BoolOption('boolop', 'Test boolean option op', default=[True], multi=True)
23     wantref_option = BoolOption('wantref', 'Test requires', default=False, properties=('force_store_value',),
24                                 requires=({'option': booloption, 'expected': True, 'action': 'hidden'},))
25     wantframework_option = BoolOption('wantframework', 'Test requires',
26                                       default=False,
27                                       requires=({'option': booloption, 'expected': True, 'action': 'hidden'},))
28
29     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
30     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
31                               wantref_option, stroption,
32                               wantframework_option,
33                               intoption, boolop])
34     return descr
35
36
37 def test_freeze_whole_config():
38     descr = make_description_freeze()
39     conf = Config(descr)
40     setting = conf.cfgimpl_get_settings()
41     conf.read_write()
42     setting.append('everything_frozen')
43     assert conf.gc.dummy is False
44     prop = []
45     try:
46         conf.gc.dummy = True
47     except PropertiesOptionError, err:
48         prop = err.proptype
49     assert 'frozen' in prop
50     setting.remove('everything_frozen')
51     conf.gc.dummy = True
52     assert conf.gc.dummy is True
53
54
55 def test_freeze_one_option():
56     "freeze an option "
57     descr = make_description_freeze()
58     conf = Config(descr)
59     setting = conf.cfgimpl_get_settings()
60     conf.read_write()
61     #freeze only one option
62     dummy = conf.unwrap_from_path('gc.dummy')
63     setting[dummy].append('frozen')
64     assert conf.gc.dummy is False
65     prop = []
66     try:
67         conf.gc.dummy = True
68     except PropertiesOptionError, err:
69         prop = err.proptype
70     assert 'frozen' in prop
71
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     setting = config.cfgimpl_get_settings()
79     config.read_write()
80     setting.append('frozen')
81     setting[s].append('frozen')
82     prop = []
83     try:
84         config.string = "egg"
85     except PropertiesOptionError, err:
86         prop = err.proptype
87     assert 'frozen' in prop
88
89
90 def test_freeze():
91     "freeze a whole configuration object"
92     descr = make_description_freeze()
93     conf = Config(descr)
94     setting = conf.cfgimpl_get_settings()
95     conf.read_write()
96     setting.append('frozen')
97     name = conf.unwrap_from_path("gc.name")
98     setting[name].append('frozen')
99     prop = []
100     try:
101         conf.gc.name = 'framework'
102     except PropertiesOptionError, err:
103         prop = err.proptype
104     assert 'frozen' in prop
105
106
107 def test_freeze_multi():
108     descr = make_description_freeze()
109     conf = Config(descr)
110     setting = conf.cfgimpl_get_settings()
111     conf.read_write()
112     setting.append('frozen')
113     obj = conf.unwrap_from_path('boolop')
114     setting[obj].append('frozen')
115     prop = []
116     try:
117         conf.boolop = [True]
118     except PropertiesOptionError, err:
119         prop = err.proptype
120     assert 'frozen' in prop
121
122
123 def test_freeze_get_multi():
124     descr = make_description_freeze()
125     conf = Config(descr)
126     setting = conf.cfgimpl_get_settings()
127     conf.read_write()
128     setting.append('frozen')
129     valmulti = conf.boolop
130     valmulti.append(False)
131     obj = conf.unwrap_from_path('boolop')
132     setting[obj].append('frozen')
133     prop = []
134     try:
135         valmulti.append(False)
136     except PropertiesOptionError, err:
137         prop = err.proptype
138     assert 'frozen' in prop
139
140
141 def test_force_store_value():
142     descr = make_description_freeze()
143     conf = Config(descr)
144     assert conf.getowner(conf.unwrap_from_path('wantref')) == 'default'
145     conf.wantref
146     assert conf.getowner(conf.unwrap_from_path('wantref')) == 'user'
147
148
149 def test_force_store_value_ro():
150     descr = make_description_freeze()
151     conf = Config(descr)
152     conf.read_only()
153     assert conf.getowner(conf.unwrap_from_path('wantref')) == 'default'
154     conf.wantref
155     assert conf.getowner(conf.unwrap_from_path('wantref')) == 'user'