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