3 from py.test import raises
5 from tiramisu.setting import owners
6 from tiramisu.config import Config, GroupConfig, MetaConfig
7 from tiramisu.option import IntOption, OptionDescription
8 from tiramisu.error import ConfigError, PropertiesOptionError
10 owners.addowner('meta')
13 def make_description():
14 i1 = IntOption('i1', '')
15 i2 = IntOption('i2', '', default=1)
16 i3 = IntOption('i3', '')
17 i4 = IntOption('i4', '', default=2)
18 i5 = IntOption('i5', '', default=[2], multi=True)
19 i6 = IntOption('i6', '', properties=('disabled',))
20 od1 = OptionDescription('od1', '', [i1, i2, i3, i4, i5, i6])
21 od2 = OptionDescription('od2', '', [od1])
26 meta = MetaConfig([conf1, conf2])
27 meta.cfgimpl_get_settings().setowner(owners.meta)
31 #FIXME ne pas mettre 2 meta dans une config
32 #FIXME ne pas mettre 2 OD differents dans un meta
35 meta = make_description()
36 conf1, conf2 = meta.cfgimpl_get_children()
37 assert conf1.od1.i3 is conf2.od1.i3 is None
38 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.default
40 assert conf1.od1.i3 == conf2.od1.i3 == 3
41 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.meta
44 assert conf1.od1.i3 == 2
45 assert conf2.od1.i3 == 3
46 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is owners.user
47 assert conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.meta
49 assert conf1.od1.i3 == 2
50 assert conf2.od1.i3 == 4
51 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is owners.user
52 assert conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.meta
54 assert conf1.od1.i3 == 2
55 assert conf2.od1.i3 is None
56 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is owners.user
57 assert conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.default
59 assert conf1.od1.i3 is conf2.od1.i3 is None
60 assert conf1.getowner(conf1.unwrap_from_path('od1.i3')) is conf2.getowner(conf2.unwrap_from_path('od1.i3')) is owners.default
64 meta = make_description()
65 conf1, conf2 = meta.cfgimpl_get_children()
66 assert conf1.od1.i2 == conf2.od1.i2 == 1
67 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
69 assert conf1.od1.i2 == conf2.od1.i2 == 3
70 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
73 assert conf1.od1.i2 == 2
74 assert conf2.od1.i2 == 3
75 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
76 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
78 assert conf1.od1.i2 == 2
79 assert conf2.od1.i2 == 4
80 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
81 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
83 assert conf1.od1.i2 == 2
84 assert conf2.od1.i2 == 1
85 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
86 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
88 assert conf1.od1.i2 == conf2.od1.i2 == 1
89 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
93 meta = make_description()
94 conf1, conf2 = meta.cfgimpl_get_children()
95 assert conf1.od1.i2 == conf2.od1.i2 == 1
96 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
97 meta.setattrs('od1.i2', 6)
98 assert meta.od1.i2 == 1
99 assert conf1.od1.i2 == conf2.od1.i2 == 6
100 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.user
104 meta = make_description()
105 i2 = meta.unwrap_from_path('od1.i2')
106 assert [i2] == meta.find(byname='i2')
107 assert i2 == meta.find_first(byname='i2')
108 assert meta.make_dict() == {'od1.i4': 2, 'od1.i1': None, 'od1.i3': None,
109 'od1.i2': 1, 'od1.i5': [2], 'od1.i6': None}
112 def test_meta_meta():
113 meta1 = make_description()
114 meta2 = MetaConfig([meta1])
115 meta2.cfgimpl_get_settings().setowner(owners.meta)
116 conf1, conf2 = meta1.cfgimpl_get_children()
117 assert conf1.od1.i2 == conf2.od1.i2 == 1
118 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
120 assert conf1.od1.i2 == conf2.od1.i2 == 3
121 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
124 assert conf1.od1.i2 == 2
125 assert conf2.od1.i2 == 3
126 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
127 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
129 assert conf1.od1.i2 == 2
130 assert conf2.od1.i2 == 4
131 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
132 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
134 assert conf1.od1.i2 == 2
135 assert conf2.od1.i2 == 1
136 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is owners.user
137 assert conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
139 assert conf1.od1.i2 == conf2.od1.i2 == 1
140 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.default
142 assert conf1.od1.i2 == conf2.od1.i2 == 6
143 assert conf1.getowner(conf1.unwrap_from_path('od1.i2')) is conf2.getowner(conf2.unwrap_from_path('od1.i2')) is owners.meta
146 def test_meta_meta_set():
147 meta1 = make_description()
148 meta2 = MetaConfig([meta1])
149 meta2.cfgimpl_get_settings().setowner(owners.meta)
150 conf1, conf2 = meta1.cfgimpl_get_children()
151 meta2.setattrs('od1.i1', 7)
152 #PropertiesOptionError
153 meta2.setattrs('od1.i6', 7)
154 assert conf1.od1.i1 == conf2.od1.i1 == 7
155 assert conf1.getowner(conf1.unwrap_from_path('od1.i1')) is conf2.getowner(conf2.unwrap_from_path('od1.i1')) is owners.user
156 assert [conf1, conf2] == meta2.find_firsts(byname='i1', byvalue=7)
158 assert [conf1, conf2] == meta2.find_firsts(byname='i1')
159 assert [conf2] == meta2.find_firsts(byname='i1', byvalue=7)
160 assert [conf1] == meta2.find_firsts(byname='i1', byvalue=8)
161 assert [conf1, conf2] == meta2.find_firsts(byname='i5', byvalue=2)
162 raises(AttributeError, "meta2.find_firsts(byname='i1', byvalue=10)")
163 raises(AttributeError, "meta2.find_firsts(byname='not', byvalue=10)")
164 raises(AttributeError, "meta2.find_firsts(byname='i6')")
168 i1 = IntOption('i1', '')
169 od1 = OptionDescription('od1', '', [i1])
170 od2 = OptionDescription('od2', '', [od1])
173 raises(ValueError, "GroupConfig(conf1)")
174 meta = GroupConfig([conf1, conf2])
175 raises(ConfigError, 'meta.od1.i1')
176 conf1, conf2 = meta.cfgimpl_get_children()
177 meta.setattrs('od1.i1', 7)
178 assert conf1.od1.i1 == conf2.od1.i1 == 7
179 assert conf1.getowner(conf1.unwrap_from_path('od1.i1')) is conf2.getowner(conf2.unwrap_from_path('od1.i1')) is owners.user
182 def test_meta_path():
183 meta = make_description()
184 assert meta._impl_path is None
185 assert meta.od1._impl_path == 'od1'
188 def test_meta_unconsistent():
189 i1 = IntOption('i1', '')
190 i2 = IntOption('i2', '', default=1)
191 i3 = IntOption('i3', '')
192 i4 = IntOption('i4', '', default=2)
193 od1 = OptionDescription('od1', '', [i1, i2, i3, i4])
194 od2 = OptionDescription('od2', '', [od1])
199 meta = MetaConfig([conf1, conf2])
200 meta.cfgimpl_get_settings().setowner(owners.meta)
201 raises(TypeError, 'MetaConfig("string")')
202 raises(ValueError, "MetaConfig([conf1, conf3])")
203 raises(ValueError, "MetaConfig([conf3, conf4])")