58a8454dcfd0bb3a3c4da801e56caffd7122adf8
[tiramisu.git] / test / test_mandatory.py
1 import autopath
2
3 #from py.test import raises
4 from tiramisu.config import Config, mandatory_warnings
5 from tiramisu.option import StrOption, OptionDescription, UnicodeOption
6 from tiramisu.error import PropertiesOptionError
7
8
9 def make_description():
10     stroption = StrOption('str', 'Test string option', default="abc",
11                           properties=('mandatory', ))
12     stroption1 = StrOption('str1', 'Test string option',
13                            properties=('mandatory', ))
14     stroption2 = UnicodeOption('unicode2', 'Test string option',
15                                properties=('mandatory', ))
16     stroption3 = StrOption('str3', 'Test string option', multi=True,
17                            properties=('mandatory', ))
18     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3])
19     return descr
20
21
22 def test_mandatory_ro():
23     descr = make_description()
24     config = Config(descr)
25     config.read_only()
26     prop = []
27     try:
28         config.str1
29     except PropertiesOptionError, err:
30         prop = err.proptype
31     assert 'mandatory' in prop
32     config.read_write()
33     config.str1 = 'yes'
34     config.read_only()
35     assert config.str1 == 'yes'
36
37
38 def test_mandatory_rw():
39     descr = make_description()
40     config = Config(descr)
41     config.read_write()
42     #not mandatory in rw
43     config.str1
44     config.str1 = 'yes'
45     assert config.str1 == 'yes'
46
47
48 def test_mandatory_default():
49     descr = make_description()
50     config = Config(descr)
51     config.read_only()
52     #not mandatory in rw
53     config.str
54     config.read_write()
55     config.str = 'yes'
56     config.read_only()
57     config.str
58     config.read_write()
59     config.str = None
60     config.read_only()
61     prop = []
62     try:
63         config.str
64     except PropertiesOptionError, err:
65         prop = err.proptype
66     assert 'mandatory' in prop
67
68
69 #valeur vide : None, '', u'', ...
70 def test_mandatory_none():
71     descr = make_description()
72     config = Config(descr)
73     config.str1 = None
74     assert config.getowner('str1') == 'user'
75     config.read_only()
76     prop = []
77     try:
78         config.str1
79     except PropertiesOptionError, err:
80         prop = err.proptype
81     assert 'mandatory' in prop
82
83
84 def test_mandatory_empty():
85     descr = make_description()
86     config = Config(descr)
87     config.str1 = ''
88     assert config.getowner('str1') == 'user'
89     config.read_only()
90     prop = []
91     try:
92         config.str1
93     except PropertiesOptionError, err:
94         prop = err.proptype
95     assert 'mandatory' in prop
96
97
98 def test_mandatory_multi_none():
99     descr = make_description()
100     config = Config(descr)
101     config.str3 = [None]
102     config.read_only()
103     assert config.getowner('str3') == 'user'
104     prop = []
105     try:
106         config.str3
107     except PropertiesOptionError, err:
108         prop = err.proptype
109     assert 'mandatory' in prop
110     config.read_write()
111     config.str3 = ['yes', None]
112     config.read_only()
113     assert config.getowner('str3') == 'user'
114     prop = []
115     try:
116         config.str3
117     except PropertiesOptionError, err:
118         prop = err.proptype
119     assert 'mandatory' in prop
120
121
122 def test_mandatory_multi_empty():
123     descr = make_description()
124     config = Config(descr)
125     config.str3 = ['']
126     config.read_only()
127     assert config.getowner('str3') == 'user'
128     prop = []
129     try:
130         config.str3
131     except PropertiesOptionError, err:
132         prop = err.proptype
133     assert 'mandatory' in prop
134     config.read_write()
135     config.str3 = ['yes', '']
136     config.read_only()
137     assert config.getowner('str3') == 'user'
138     prop = []
139     try:
140         config.str3
141     except PropertiesOptionError, err:
142         prop = err.proptype
143     assert 'mandatory' in prop
144
145
146 def test_mandatory_multi_append():
147     descr = make_description()
148     config = Config(descr)
149     config.str3 = ['yes']
150     config.read_write()
151     config.str3.append(None)
152
153
154 def test_mandatory_disabled():
155     descr = make_description()
156     config = Config(descr)
157     setting = config.cfgimpl_get_settings()
158     config.str1
159     config.read_only()
160     prop = []
161     try:
162         config.str1
163     except PropertiesOptionError, err:
164         prop = err.proptype
165     assert prop == ['mandatory']
166     setting[descr.str1].append('disabled')
167     prop = []
168     try:
169         config.str1
170     except PropertiesOptionError, err:
171         prop = err.proptype
172     assert prop == ['disabled', 'mandatory']
173
174
175 def test_mandatory_unicode():
176     descr = make_description()
177     config = Config(descr)
178     config.unicode2
179     config.read_only()
180     prop = []
181     try:
182         config.unicode2
183     except PropertiesOptionError, err:
184         prop = err.proptype
185     assert prop == ['mandatory']
186     config.read_write()
187     config.unicode2 = u''
188     config.read_only()
189     prop = []
190     try:
191         config.unicode2
192     except PropertiesOptionError, err:
193         prop = err.proptype
194     assert prop == ['mandatory']
195
196
197 def test_mandatory_warnings_ro():
198     descr = make_description()
199     config = Config(descr)
200     config.str = ''
201     config.read_only()
202     proc = []
203     try:
204         config.str
205     except PropertiesOptionError, err:
206         proc = err.proptype
207     assert proc == ['mandatory']
208     assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']
209     config.read_write()
210     config.str = 'a'
211     config.read_only()
212     assert list(mandatory_warnings(config)) == ['str1', 'unicode2', 'str3']
213
214
215 def test_mandatory_warnings_rw():
216     descr = make_description()
217     config = Config(descr)
218     config.str = ''
219     config.read_write()
220     config.str
221     assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']
222     config.str = 'a'
223     assert list(mandatory_warnings(config)) == ['str1', 'unicode2', 'str3']
224
225
226 def test_mandatory_warnings_disabled():
227     descr = make_description()
228     config = Config(descr)
229     config.str = ''
230     setting = config.cfgimpl_get_settings()
231     config.read_write()
232     config.str
233     assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']
234     setting[descr.str].append('disabled')
235     assert list(mandatory_warnings(config)) == ['str1', 'unicode2', 'str3']
236
237
238 def test_mandatory_warnings_frozen():
239     descr = make_description()
240     config = Config(descr)
241     config.str = ''
242     setting = config.cfgimpl_get_settings()
243     config.read_write()
244     config.str
245     assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']
246     setting[descr.str].append('frozen')
247     config.read_only()
248     assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']