the value owner is a string now
[tiramisu.git] / test / test_config_api.py
1 "configuration objects global API"
2 import autopath
3 from py.test import raises
4
5 from tiramisu.config import *
6 from tiramisu.option import *
7
8 def make_description():
9     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
10     gcdummy = BoolOption('dummy', 'dummy', default=False)
11     objspaceoption = ChoiceOption('objspace', 'Object space',
12                                 ['std', 'thunk'], 'std')
13     booloption = BoolOption('bool', 'Test boolean option', default=True)
14     intoption = IntOption('int', 'Test int option', default=0)
15     floatoption = FloatOption('float', 'Test float option', default=2.3)
16     stroption = StrOption('str', 'Test string option', default="abc")
17     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
18     wantref_option = BoolOption('wantref', 'Tests', default=False)
19     wantframework_option = BoolOption('wantframework', 'Test', default=False)
20
21     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
22     descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
23                                            wantref_option, stroption,
24                                            wantframework_option,
25                                            intoption, boolop])
26     return descr
27
28
29 def test_compare_configs():
30     "config object comparison"
31     descr = make_description()
32     conf1 = Config(descr)
33     conf2 = Config(descr)
34     conf2.wantref = True
35     assert conf1 != conf2
36     assert hash(conf1) != hash(conf2)
37     assert conf1.getkey() != conf2.getkey()
38     conf1.wantref = True
39     assert conf1 == conf2
40     assert hash(conf1) == hash(conf2)
41     assert conf1.getkey() == conf2.getkey()
42 # ____________________________________________________________
43
44 def test_iter_config():
45     "iteration on config object"
46     s = StrOption("string", "", default="string")
47     s2 = StrOption("string2", "", default="string2")
48     descr = OptionDescription("options", "", [s,s2])
49     config = Config(descr)
50     assert [(name, value) for name, value in config] == \
51     [('string', 'string'), ('string2', 'string2')]
52
53 def test_iter_subconfig():
54     "iteration on config sub object"
55     descr = make_description()
56     conf = Config(descr)
57     for (name, value), (gname, gvalue) in \
58         zip(conf.gc, [("name", "ref"), ("dummy", False)]):
59         assert name == gname
60         assert value == gvalue
61 #____________________________________________________________
62 def test_getpaths():
63     descr = make_description()
64     config = Config(descr)
65
66     assert config.getpaths() == ['gc.name', 'gc.dummy', 'gc.float', 'bool',
67                                  'objspace', 'wantref', 'str', 'wantframework',
68                                  'int', 'boolop']
69     assert config.getpaths() == descr.getpaths()
70     assert config.gc.getpaths() == ['name', 'dummy', 'float']
71     assert config.gc.getpaths() == descr.gc.getpaths()
72     assert config.getpaths(include_groups=True) == [
73         'gc', 'gc.name', 'gc.dummy', 'gc.float',
74         'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
75
76     assert config.getpaths(True) == descr.getpaths(True)
77
78 def test_getpaths_with_hidden():
79     objspaceoption = ChoiceOption('objspace', 'Object space',
80                                 ['std', 'thunk'], 'std')
81     booloption = BoolOption('bool', 'Test boolean option', default=True)
82     booloption.hide()
83     intoption = IntOption('int', 'Test int option', default=0)
84     stroption = StrOption('str', 'Test string option', default="abc")
85     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
86     wantref_option = BoolOption('wantref', 'Test requires', default=False)
87     wantframework_option = BoolOption('wantframework', 'Test requires',
88                                       default=False)
89
90     descr = OptionDescription('tiramisu', '', [booloption, objspaceoption,
91                                            wantref_option, stroption,
92                                            wantframework_option,
93                                            intoption, boolop])
94
95     config = Config(descr)
96     result = ['objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
97     assert config.getpaths() == result
98     r2 = ['bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
99     assert config.getpaths(allpaths=True) == r2
100
101 def test_str():
102     descr = make_description()
103     c = Config(descr)
104     print c # does not crash
105
106 #def test_dir():
107 #    descr = make_description()
108 #    c = Config(descr)
109 #    print dir(c)
110
111 def test_make_dict():
112     "serialization of the whole config to a dict"
113     descr = OptionDescription("opt", "", [
114         OptionDescription("s1", "", [
115             BoolOption("a", "", default=False)]),
116         IntOption("int", "", default=42)])
117     config = Config(descr)
118     d = make_dict(config)
119     assert d == {"s1.a": False, "int": 42}
120     config.int = 43
121     config.s1.a = True
122     d = make_dict(config)
123     assert d == {"s1.a": True, "int": 43}
124     d2 = make_dict(config, flatten=True)
125     assert d2 == {'a': True, 'int': 43}
126
127 #def test_delattr():
128 #    "delattr, means suppression of an option in a config"
129 #    descr = OptionDescription("opt", "", [
130 #    OptionDescription("s1", "", [
131 #        BoolOption("a", "", default=False)]),
132 #    IntOption("int", "", default=42)])
133 #    c = Config(descr)
134 #    c.int = 45
135 #    assert c.int == 45
136 #    del c.int
137 #    assert c.int == 42
138 #    c.int = 45
139 #    assert c.int == 45
140
141 def test_find_in_config():
142     "finds option in config"
143     descr = make_description()
144     conf = Config(descr)
145     assert conf.find(byname='dummy') == [conf.unwrap_from_name('dummy')]
146     assert conf.find_first(byname='dummy') == conf.unwrap_from_name('dummy')
147     assert conf.find(bytype=ChoiceOption) == [conf.unwrap_from_name('name'), conf.unwrap_from_name('objspace')]
148     assert conf.find_first(bytype=ChoiceOption) == conf.unwrap_from_name('name')
149     assert conf.find(byvalue='ref') == [conf.unwrap_from_name('name')]
150     assert conf.find_first(byvalue='ref') == conf.unwrap_from_name('name')
151     # combinaison of filters
152     assert conf.find(bytype=BoolOption, byname='dummy') == [conf.unwrap_from_name('dummy')]
153     assert conf.find_first(bytype=BoolOption, byname='dummy') == conf.unwrap_from_name('dummy')
154     assert conf.find(byvalue=False, byname='dummy') == [conf.unwrap_from_name('dummy')]
155     assert conf.find_first(byvalue=False, byname='dummy') == conf.unwrap_from_name('dummy')
156     # byattrs
157     assert conf.find_first(byattrs= dict(default=2.3)) == conf.unwrap_from_name('float')
158     assert conf.find_first(byvalue=False, byname='dummy', byattrs=dict(default=False)) == conf.unwrap_from_name('dummy')
159
160 #def test_validator():
161 #    "validates the integrity of an option towards a whole configuration"
162 #    def my_validator_1(config):
163 #        assert config is c
164
165 #    def my_validator_2(config):
166 #        assert config is c
167 #        raise ConflictConfigError
168
169 #    descr = OptionDescription("opt", "", [
170 #        BoolOption('booloption1', 'option test1', default=False,
171 #                   validator=my_validator_1),
172 #        BoolOption('booloption2', 'option test2', default=False,
173 #                   validator=my_validator_2),
174 #        BoolOption('booloption4', 'option test4', default=False,
175 #                   ),
176 #        ])
177 #    c = Config(descr)
178 #    c.booloption1 = True
179 ##    raises(ConfigError, "c.booloption2 = True")
180 ##    assert c.booloption2 is False
181 ##    raises(ConfigError, "c.booloption3 = True")
182 #    assert c.booloption2 is False
183 #    c.booloption4 = True
184 #    assert c.booloption2 is False
185 #    c.booloption2 = False
186 #    assert c.booloption2 is False
187 #