f7b483f92b4d7b965f83a610dcd45946ef3063ce
[tiramisu.git] / test / test_option_default.py
1 "test all types of option default values for options, add new option in a descr"
2 import autopath
3 from py.test import raises
4
5 from tiramisu.config import Config
6 from tiramisu.setting import owners
7 from tiramisu.error import PropertiesOptionError, ConfigError
8 from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \
9     BoolOption, OptionDescription
10
11
12 def make_description():
13     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
14     gcdummy = BoolOption('dummy', 'dummy', default=False)
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     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
22     wantref_option = BoolOption('wantref', 'Test requires', default=False,
23                                 requires=['boolop'])
24     wantframework_option = BoolOption('wantframework', 'Test requires',
25                                       default=False,
26                                       requires=['boolop'])
27
28     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
29     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
30                                                wantref_option, stroption,
31                                                wantframework_option,
32                                                intoption, boolop])
33     return descr
34
35
36 #____________________________________________________________
37 # default values
38 def test_default_is_none():
39     """
40     Most constructors take a ``default`` argument that specifies the default
41     value of the option. If this argument is not supplied the default value is
42     assumed to be ``None``.
43     """
44     dummy1 = BoolOption('dummy1', 'doc dummy')
45     dummy2 = BoolOption('dummy2', 'doc dummy')
46     group = OptionDescription('group', '', [dummy1, dummy2])
47     config = Config(group)
48     # so when the default value is not set, there is actually a default value
49     assert config.dummy1 is None
50     assert config.dummy2 is None
51
52
53 def test_set_defaut_value_from_option_object():
54     """Options have an available default setting and can give it back"""
55     b = BoolOption("boolean", "", default=False)
56     assert b.impl_getdefault() is False
57
58
59 def test_force_default_on_freeze():
60     "a frozen option wich is forced returns his default"
61     dummy1 = BoolOption('dummy1', 'doc dummy', default=False, properties=('force_default_on_freeze',))
62     dummy2 = BoolOption('dummy2', 'doc dummy', default=True)
63     group = OptionDescription('group', '', [dummy1, dummy2])
64     config = Config(group)
65     config.read_write()
66     owners.addowner("frozen")
67     config.dummy1 = True
68     config.dummy2 = False
69     assert config.getowner(dummy1) == owners.user
70     assert config.getowner(dummy2) == owners.user
71     setting = config.cfgimpl_get_settings()
72     setting[dummy1].append('frozen')
73     setting[dummy2].append('frozen')
74     assert config.dummy1 is False
75     assert config.dummy2 is False
76     assert config.getowner(dummy1) == owners.default
77     assert config.getowner(dummy2) == owners.user
78     raises(ConfigError, "config.cfgimpl_get_values().setowner(dummy1, owners.frozen)")
79     raises(PropertiesOptionError, "config.cfgimpl_get_values().setowner(dummy2, owners.frozen)")
80     raises(PropertiesOptionError, "del(config.dummy1)")
81     setting[dummy1].remove('frozen')
82     del(config.dummy1)
83     setting[dummy1].append('frozen')
84     raises(ConfigError, "config.cfgimpl_get_values().setowner(dummy1, owners.frozen)")
85
86
87 def test_force_default_on_freeze_multi():
88     dummy1 = BoolOption('dummy1', 'doc dummy', default=[False], properties=('force_default_on_freeze',), multi=True)
89     dummy2 = BoolOption('dummy2', 'doc dummy', default=[True], multi=True)
90     group = OptionDescription('group', '', [dummy1, dummy2])
91     config = Config(group)
92     config.read_write()
93     owners.addowner("frozenmulti")
94     config.dummy1.append(True)
95     config.dummy2.append(False)
96     assert config.getowner(dummy1) == owners.user
97     assert config.getowner(dummy2) == owners.user
98     setting = config.cfgimpl_get_settings()
99     setting[dummy1].append('frozen')
100     setting[dummy2].append('frozen')
101     assert config.dummy1 == [False]
102     assert config.dummy2 == [True, False]
103     assert config.getowner(dummy1) == owners.default
104     assert config.getowner(dummy2) == owners.user
105     raises(ConfigError, "config.cfgimpl_get_values().setowner(dummy1, owners.frozenmulti)")
106     raises(PropertiesOptionError, "config.cfgimpl_get_values().setowner(dummy2, owners.frozenmulti)")
107     raises(PropertiesOptionError, "del(config.dummy1)")
108     setting[dummy1].remove('frozen')
109     del(config.dummy1)
110     setting[dummy1].append('frozen')
111     raises(ConfigError, "config.cfgimpl_get_values().setowner(dummy1, owners.frozenmulti)")
112
113
114 def test_overrides_changes_option_value():
115     "with config.override(), the default is changed and the value is changed"
116     descr = OptionDescription("test", "", [
117         BoolOption("b", "", default=False)])
118     config = Config(descr)
119     config.b = True
120
121
122 def test_choice_with_no_default():
123     descr = OptionDescription("test", "", [
124         ChoiceOption("backend", "", ("c", "cli"))])
125     config = Config(descr)
126     assert config.backend is None
127     config.backend = "c"
128
129
130 def test_choice_with_default():
131     descr = OptionDescription("test", "", [
132         ChoiceOption("backend", "", ("c", "cli"), default="cli")])
133     config = Config(descr)
134     assert config.backend == "cli"