python 3.5 support
[tiramisu.git] / test / test_permissive.py
1 # coding: utf-8
2 from .autopath import do_autopath
3 do_autopath()
4
5 from py.test import raises
6
7 from tiramisu.option import IntOption, UnicodeOption, OptionDescription
8 from tiramisu.config import Config
9 from tiramisu.error import PropertiesOptionError
10
11
12 def make_description():
13     u1 = IntOption('u1', '', properties=('frozen', 'mandatory', 'disabled', ))
14     u2 = IntOption('u2', '', properties=('frozen', 'mandatory', 'disabled', ))
15     return OptionDescription('od1', '', [u1, u2])
16
17
18 def test_permissive():
19     descr = make_description()
20     config = Config(descr)
21     setting = config.cfgimpl_get_settings()
22     config.read_write()
23     props = []
24     try:
25         config.u1
26     except PropertiesOptionError as err:
27         props = err.proptype
28     assert props == ['disabled']
29     setting.setpermissive(('disabled',))
30     props = []
31     try:
32         config.u1
33     except PropertiesOptionError as err:
34         props = err.proptype
35     assert props == ['disabled']
36     setting.append('permissive')
37     config.u1
38     setting.remove('permissive')
39     props = []
40     try:
41         config.u1
42     except PropertiesOptionError as err:
43         props = err.proptype
44     assert props == ['disabled']
45
46
47 def test_permissive_mandatory():
48     descr = make_description()
49     config = Config(descr)
50     setting = config.cfgimpl_get_settings()
51     config.read_only()
52     props = []
53     try:
54         config.u1
55     except PropertiesOptionError as err:
56         props = err.proptype
57     assert set(props) == set(['disabled', 'mandatory'])
58     setting.setpermissive(('mandatory', 'disabled',))
59     setting.append('permissive')
60     config.u1
61     setting.remove('permissive')
62     try:
63         config.u1
64     except PropertiesOptionError as err:
65         props = err.proptype
66     assert set(props) == set(['disabled', 'mandatory'])
67
68
69 def test_permissive_frozen():
70     descr = make_description()
71     config = Config(descr)
72     setting = config.cfgimpl_get_settings()
73     config.read_write()
74     setting.setpermissive(('frozen', 'disabled',))
75     try:
76         config.u1 = 1
77     except PropertiesOptionError as err:
78         props = err.proptype
79     assert set(props) == set(['frozen', 'disabled'])
80     setting.append('permissive')
81     config.u1 = 1
82     assert config.u1 == 1
83     setting.remove('permissive')
84     try:
85         config.u1 = 1
86     except PropertiesOptionError as err:
87         props = err.proptype
88     assert set(props) == set(['frozen', 'disabled'])
89
90
91 def test_invalid_permissive():
92     descr = make_description()
93     config = Config(descr)
94     setting = config.cfgimpl_get_settings()
95     config.read_write()
96     raises(TypeError, "setting.setpermissive(['frozen', 'disabled',])")
97
98
99 def test_permissive_option():
100     descr = make_description()
101     u1 = descr.u1
102     config = Config(descr)
103     setting = config.cfgimpl_get_settings()
104     config.read_write()
105
106     props = []
107     try:
108         config.u1
109     except PropertiesOptionError as err:
110         props = err.proptype
111     assert props == ['disabled']
112     props = []
113     try:
114         config.u2
115     except PropertiesOptionError as err:
116         props = err.proptype
117     assert props == ['disabled']
118
119     setting.setpermissive(('disabled',), u1)
120     props = []
121     try:
122         config.u1
123     except PropertiesOptionError as err:
124         props = err.proptype
125     assert props == []
126     props = []
127     try:
128         config.u2
129     except PropertiesOptionError as err:
130         props = err.proptype
131     assert props == ['disabled']
132
133     setting.append('permissive')
134     config.u1
135     props = []
136     try:
137         config.u2
138     except PropertiesOptionError as err:
139         props = err.proptype
140     assert props == ['disabled']
141
142     setting.remove('permissive')
143     props = []
144     try:
145         config.u1
146     except PropertiesOptionError as err:
147         props = err.proptype
148     assert props == []
149     props = []
150     try:
151         config.u2
152     except PropertiesOptionError as err:
153         props = err.proptype
154     assert props == ['disabled']
155
156
157 def test_permissive_option_mandatory():
158     descr = make_description()
159     u1 = descr.u1
160     config = Config(descr)
161     setting = config.cfgimpl_get_settings()
162     config.read_only()
163     props = []
164     try:
165         config.u1
166     except PropertiesOptionError as err:
167         props = err.proptype
168     assert set(props) == set(['disabled', 'mandatory'])
169     setting.setpermissive(('mandatory', 'disabled',), u1)
170     setting.append('permissive')
171     config.u1
172     setting.remove('permissive')
173     try:
174         config.u1
175     except PropertiesOptionError as err:
176         props = err.proptype
177     assert set(props) == set(['disabled', 'mandatory'])
178
179
180 def test_permissive_option_frozen():
181     descr = make_description()
182     config = Config(descr)
183     u1 = descr.u1
184     setting = config.cfgimpl_get_settings()
185     config.read_write()
186     setting.setpermissive(('frozen', 'disabled'), u1)
187     config.u1 = 1
188     assert config.u1 == 1
189     setting.append('permissive')
190     assert config.u1 == 1
191     setting.remove('permissive')
192     assert config.u1 == 1
193
194
195 def test_invalid_option_permissive():
196     descr = make_description()
197     u1 = descr.u1
198     config = Config(descr)
199     setting = config.cfgimpl_get_settings()
200     config.read_write()
201     raises(TypeError, "setting.setpermissive(['frozen', 'disabled',], u1)")
202
203
204 def test_remove_option_permissive():
205     var1 = UnicodeOption('var1', '', u'value', properties=('hidden',))
206     od1 = OptionDescription('od1', '', [var1])
207     rootod = OptionDescription('rootod', '', [od1])
208     config = Config(rootod)
209     config.read_write()
210     raises(PropertiesOptionError, "config.od1.var1")
211     config.cfgimpl_get_settings().setpermissive(('hidden',), var1)
212     assert config.od1.var1 == u'value'
213     config.cfgimpl_get_settings().setpermissive(tuple(), var1)
214     raises(PropertiesOptionError, "config.od1.var1")