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