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