* config herite from BaseInformation class
[tiramisu.git] / test / test_metaconfig.py
1 #this test is much more to test that **it's there** and answers attribute access
2 import autopath
3
4 from py.test import raises
5
6 from tiramisu.setting import owners
7 from tiramisu.config import Config, MetaConfig
8 from tiramisu.option import IntOption, OptionDescription
9 from tiramisu.error import ConfigError
10
11 owners.add_owner('meta')
12
13
14 def make_description():
15     i1 = IntOption('i1', '')
16     i2 = IntOption('i2', '', default=1)
17     i3 = IntOption('i3', '')
18     i4 = IntOption('i4', '', default=2)
19     od1 = OptionDescription('od1', '', [i1, i2, i3, i4])
20     od2 = OptionDescription('od2', '', [od1])
21     conf1 = Config(od2)
22     conf2 = Config(od2)
23     meta = MetaConfig([conf1, conf2])
24     meta.cfgimpl_get_settings().setowner(owners.meta)
25     return meta
26
27
28 #FIXME ne pas mettre 2 meta dans une config
29 #FIXME ne pas mettre 2 OD differents dans un meta
30 def test_none():
31     meta = make_description()
32     conf1, conf2 = meta._impl_children
33     assert conf1.od1.i3 is conf2.od1.i3 is None
34     assert conf1.getowner('od1.i3') is conf2.getowner('od1.i3') is owners.default
35     meta.od1.i3 = 3
36     assert conf1.od1.i3 == conf2.od1.i3 == 3
37     assert conf1.getowner('od1.i3') is conf2.getowner('od1.i3') is owners.meta
38     meta.od1.i3 = 3
39     conf1.od1.i3 = 2
40     assert conf1.od1.i3 == 2
41     assert conf2.od1.i3 == 3
42     assert conf1.getowner('od1.i3') is owners.user
43     assert conf2.getowner('od1.i3') is owners.meta
44     meta.od1.i3 = 4
45     assert conf1.od1.i3 == 2
46     assert conf2.od1.i3 == 4
47     assert conf1.getowner('od1.i3') is owners.user
48     assert conf2.getowner('od1.i3') is owners.meta
49     del(meta.od1.i3)
50     assert conf1.od1.i3 == 2
51     assert conf2.od1.i3 is None
52     assert conf1.getowner('od1.i3') is owners.user
53     assert conf2.getowner('od1.i3') is owners.default
54     del(conf1.od1.i3)
55     assert conf1.od1.i3 is conf2.od1.i3 is None
56     assert conf1.getowner('od1.i3') is conf2.getowner('od1.i3') is owners.default
57
58
59 def test_default():
60     meta = make_description()
61     conf1, conf2 = meta._impl_children
62     assert conf1.od1.i2 == conf2.od1.i2 == 1
63     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.default
64     meta.od1.i2 = 3
65     assert conf1.od1.i2 == conf2.od1.i2 == 3
66     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.meta
67     meta.od1.i2 = 3
68     conf1.od1.i2 = 2
69     assert conf1.od1.i2 == 2
70     assert conf2.od1.i2 == 3
71     assert conf1.getowner('od1.i2') is owners.user
72     assert conf2.getowner('od1.i2') is owners.meta
73     meta.od1.i2 = 4
74     assert conf1.od1.i2 == 2
75     assert conf2.od1.i2 == 4
76     assert conf1.getowner('od1.i2') is owners.user
77     assert conf2.getowner('od1.i2') is owners.meta
78     del(meta.od1.i2)
79     assert conf1.od1.i2 == 2
80     assert conf2.od1.i2 == 1
81     assert conf1.getowner('od1.i2') is owners.user
82     assert conf2.getowner('od1.i2') is owners.default
83     del(conf1.od1.i2)
84     assert conf1.od1.i2 == conf2.od1.i2 == 1
85     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.default
86
87
88 def test_contexts():
89     meta = make_description()
90     conf1, conf2 = meta._impl_children
91     assert conf1.od1.i2 == conf2.od1.i2 == 1
92     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.default
93     meta.set_contexts('od1.i2', 6)
94     assert meta.od1.i2 == 1
95     assert conf1.od1.i2 == conf2.od1.i2 == 6
96     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.user
97
98
99 def test_find():
100     meta = make_description()
101     i2 = meta.unwrap_from_path('od1.i2')
102     assert [i2] == meta.find(byname='i2')
103     assert i2 == meta.find_first(byname='i2')
104     assert meta.make_dict() == {'od1.i4': 2, 'od1.i1': None, 'od1.i3': None, 'od1.i2': 1}
105
106
107 def test_meta_meta():
108     meta1 = make_description()
109     meta2 = MetaConfig([meta1])
110     meta2.cfgimpl_get_settings().setowner(owners.meta)
111     conf1, conf2 = meta1._impl_children
112     assert conf1.od1.i2 == conf2.od1.i2 == 1
113     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.default
114     meta2.od1.i2 = 3
115     assert conf1.od1.i2 == conf2.od1.i2 == 3
116     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.meta
117     meta2.od1.i2 = 3
118     conf1.od1.i2 = 2
119     assert conf1.od1.i2 == 2
120     assert conf2.od1.i2 == 3
121     assert conf1.getowner('od1.i2') is owners.user
122     assert conf2.getowner('od1.i2') is owners.meta
123     meta2.od1.i2 = 4
124     assert conf1.od1.i2 == 2
125     assert conf2.od1.i2 == 4
126     assert conf1.getowner('od1.i2') is owners.user
127     assert conf2.getowner('od1.i2') is owners.meta
128     del(meta2.od1.i2)
129     assert conf1.od1.i2 == 2
130     assert conf2.od1.i2 == 1
131     assert conf1.getowner('od1.i2') is owners.user
132     assert conf2.getowner('od1.i2') is owners.default
133     del(conf1.od1.i2)
134     assert conf1.od1.i2 == conf2.od1.i2 == 1
135     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.default
136     meta1.od1.i2 = 6
137     assert conf1.od1.i2 == conf2.od1.i2 == 6
138     assert conf1.getowner('od1.i2') is conf2.getowner('od1.i2') is owners.meta
139
140
141 def test_meta_meta_set():
142     meta1 = make_description()
143     meta2 = MetaConfig([meta1])
144     meta2.cfgimpl_get_settings().setowner(owners.meta)
145     conf1, conf2 = meta1._impl_children
146     meta2.set_contexts('od1.i1', 7)
147     assert conf1.od1.i1 == conf2.od1.i1 == 7
148     assert conf1.getowner('od1.i1') is conf2.getowner('od1.i1') is owners.user
149     assert [conf1, conf2] == meta2.find_first_contexts(byname='i1', byvalue=7)
150     conf1.od1.i1 = 8
151     assert [conf2] == meta2.find_first_contexts(byname='i1', byvalue=7)
152     assert [conf1] == meta2.find_first_contexts(byname='i1', byvalue=8)
153
154
155 def test_not_meta():
156     i1 = IntOption('i1', '')
157     od1 = OptionDescription('od1', '', [i1])
158     od2 = OptionDescription('od2', '', [od1])
159     conf1 = Config(od2)
160     conf2 = Config(od2)
161     meta = MetaConfig([conf1, conf2], False)
162     raises(ConfigError, 'meta.od1.i1')
163     conf1, conf2 = meta._impl_children
164     meta.set_contexts('od1.i1', 7)
165     assert conf1.od1.i1 == conf2.od1.i1 == 7
166     assert conf1.getowner('od1.i1') is conf2.getowner('od1.i1') is owners.user