trimming options's callbacks
[tiramisu.git] / test / test_option_owner.py
1 import autopath
2
3 from py.test import raises
4 from tiramisu.config import *
5 from tiramisu.option import *
6
7 def make_description():
8     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
9     gcdummy = BoolOption('dummy', 'dummy', callback="toto")
10     objspaceoption = ChoiceOption('objspace', 'Object space',
11                                 ['std', 'thunk'], 'std')
12     booloption = BoolOption('bool', 'Test boolean option', default=True)
13     intoption = IntOption('int', 'Test int option', default=0)
14     floatoption = FloatOption('float', 'Test float option', default=2.3)
15     stroption = StrOption('str', 'Test string option', default="abc")
16     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
17     wantref_option = BoolOption('wantref', 'Test requires', default=False,
18                                     requires=['boolop'])
19     wantframework_option = BoolOption('wantframework', 'Test requires',
20                                       default=False,
21                                       requires=['boolop'])
22     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
23     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
24                                            wantref_option, stroption,
25                                            wantframework_option,
26                                            intoption, boolop])
27     return descr
28
29 def make_description2():
30     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
31     gcdummy = BoolOption('dummy', 'dummy', default=False)
32     objspaceoption = ChoiceOption('objspace', 'Object space',
33                                 ['std', 'thunk'], 'std')
34     booloption = BoolOption('bool', 'Test boolean option', default=True)
35     intoption = IntOption('int', 'Test int option', default=0)
36     floatoption = FloatOption('float', 'Test float option', default=2.3)
37     stroption = StrOption('str', 'Test string option', default="abc")
38     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
39     wantref_option = BoolOption('wantref', 'Test requires', default=False,
40                                     requires=['boolop'])
41     wantframework_option = BoolOption('wantframework', 'Test requires',
42                                       default=False,
43                                       requires=['boolop'])
44     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
45     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
46                                            wantref_option, stroption,
47                                            wantframework_option,
48                                            intoption, boolop])
49     return descr
50
51 def test_override_are_default_owner():
52     "config.override() implies that the owner is 'default' again"
53     descr = make_description2()
54     config = Config(descr, bool=False)
55     # default
56     assert config.gc._cfgimpl_value_owners['dummy'] == 'default'
57     # user
58     config.gc.dummy = True
59     assert config.gc._cfgimpl_value_owners['dummy'] == 'user'
60     assert config._cfgimpl_values['gc']._cfgimpl_value_owners['dummy'] == 'user'
61     #Options have an available default setting and can give it back
62     assert config._cfgimpl_descr._children[0]._children[1].getdefault() == False
63     config.override({'gc.dummy':True})
64     assert config.gc._cfgimpl_value_owners['dummy'] == 'default'
65     # user again
66     config.gc.dummy = False
67     assert config.gc._cfgimpl_value_owners['dummy'] == 'user'
68
69 def test_has_callback():
70     descr = make_description()
71     # here the owner is 'default'
72     config = Config(descr, bool=False)
73     # because dummy has a callback
74     dummy = config.unwrap_from_path('gc.dummy')
75     config.cfgimpl_freeze()
76     dummy.freeze()
77     raises(TypeError, "config.gc.dummy = True")
78
79 #____________________________________________________________
80 def test_freeze_and_has_callback_with_setoption():
81     descr = make_description()
82     config = Config(descr, bool=False)
83     config.cfgimpl_freeze()
84     dummy = config.unwrap_from_path('gc.dummy')
85     dummy.freeze()
86     raises(TypeError, "config.gc.setoption('dummy', True, 'gen_config')")
87
88 #def test_cannot_override():
89 #    descr = make_description()
90 #    config = Config(descr, bool=False)
91 #    raises(TypeError, "config.override({'gc.dummy': True})")