suppression of the override
[tiramisu.git] / test / test_option_consistency.py
1 import autopath
2 from py.test import raises
3
4 from tiramisu.config import *
5 from tiramisu.option import *
6
7 def make_description():
8     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
9     gcdummy = BoolOption('dummy', 'dummy', default=False)
10     objspaceoption = ChoiceOption('objspace', 'Object space',
11                                 ['std', 'thunk'], 'std')
12     booloption = BoolOption('bool', 'Test boolean option', default=True)
13     intoption = IntOption('int', 'Test int option', default=0)
14     floatoption = FloatOption('float', 'Test float option', default=2.3)
15     stroption = StrOption('str', 'Test string option', default="abc")
16     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
17     wantref_option = BoolOption('wantref', 'Test requires', default=False,
18                                     requires=['boolop'])
19     wantframework_option = BoolOption('wantframework', 'Test requires',
20                                       default=False,
21                                       requires=['boolop'])
22     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
23     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
24                                            wantref_option, stroption,
25                                            wantframework_option,
26                                            intoption, boolop])
27     return descr
28
29 def make_description_duplicates():
30     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
31     ## dummy 1
32     gcdummy = BoolOption('dummy', 'dummy', default=False)
33     objspaceoption = ChoiceOption('objspace', 'Object space',
34                                 ['std', 'thunk'], 'std')
35     booloption = BoolOption('bool', 'Test boolean option', default=True)
36     intoption = IntOption('int', 'Test int option', default=0)
37     floatoption = FloatOption('float', 'Test float option', default=2.3)
38     stroption = StrOption('str', 'Test string option', default="abc")
39     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
40     wantref_option = BoolOption('wantref', 'Test requires', default=False,
41                                     requires=['boolop'])
42     wantframework_option = BoolOption('wantframework', 'Test requires',
43                                       default=False,
44                                       requires=['boolop'])
45     # dummy2 (same path)
46     gcdummy2  = BoolOption('dummy', 'dummy2', default=True)
47     # dummy3 (same name)
48     gcdummy3  = BoolOption('dummy', 'dummy2', default=True)
49     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, gcdummy2, floatoption])
50     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
51                                            wantref_option, stroption,
52                                            wantframework_option,
53                                            intoption, boolop, gcdummy3])
54     return descr
55
56 def test_identical_paths():
57     """If in the schema (the option description) there is something that
58     have the same name, an exection is raised
59     """
60     descr = make_description_duplicates()
61     raises(ConflictConfigError, "cfg = Config(descr)")
62
63 #def test_identical_for_names():
64 #    """if there is something that
65 #    have the same name, an exection is raised
66 #    """
67 #    descr = make_description_duplicates()
68 #    raises(ConflictConfigError, "cfg = Config(descr)")
69
70
71 def make_description2():
72     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
73     gcdummy = BoolOption('dummy', 'dummy', default=False)
74
75     floatoption = FloatOption('float', 'Test float option', default=2.3)
76
77     objspaceoption = ChoiceOption('objspace', 'Object space',
78                                 ['std', 'thunk'], 'std')
79     booloption = BoolOption('bool', 'Test boolean option', default=True)
80     intoption = IntOption('int', 'Test int option', default=0)
81     stroption = StrOption('str', 'Test string option', default="abc")
82     # first multi
83     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
84     boolop.enable_multi()
85     wantref_option = BoolOption('wantref', 'Test requires', default=False,
86                                     requires=['boolop'])
87     # second multi
88     wantframework_option = BoolOption('wantframework', 'Test requires',
89                                       default=False,
90                                       requires=['boolop'])
91     wantframework_option.enable_multi()
92
93     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
94     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
95                                            wantref_option, stroption,
96                                            wantframework_option,
97                                            intoption, boolop])
98     return descr
99
100 # FIXME: XXX would you mind putting the multi validations anywhere else
101 # than in the requires !!!
102 #def test_multi_constraints():
103 #    "a multi in a constraint has to have the same length"
104 #    descr = make_description2()
105 #    cfg = Config(descr)
106 #    cfg.boolop = [True, True, False]
107 #    cfg.wantframework = [False, False, True]
108 #
109 #def test_multi_raise():
110 #    "a multi in a constraint has to have the same length"
111 #    # FIXME fusionner les deux tests, MAIS PROBLEME :
112 #    # il ne devrait pas etre necessaire de refaire une config
113 #    # si la valeur est modifiee une deuxieme fois ->
114 #    #raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
115 #    #   ExceptionFailure: 'DID NOT RAISE'
116 #    descr = make_description2()
117 #    cfg = Config(descr)
118 #    cfg.boolop = [True]
119 #    raises(ConflictConfigError, "cfg.wantframework = [False, False, True]")
120 # ____________________________________________________________
121 # adding dynamically new options description schema
122 def test_newoption_add_in_descr():
123     descr = make_description()
124     newoption = BoolOption('newoption', 'dummy twoo', default=False)
125     descr.add_child(newoption)
126     config = Config(descr)
127     assert config.newoption == False
128
129 def test_newoption_add_in_subdescr():
130     descr = make_description()
131     newoption = BoolOption('newoption', 'dummy twoo', default=False)
132     descr.gc.add_child(newoption)
133     config = Config(descr)
134     config.bool = False
135     assert config.gc.newoption == False
136
137 def test_newoption_add_in_config():
138     descr = make_description()
139     config = Config(descr)
140     config.bool = False
141     newoption = BoolOption('newoption', 'dummy twoo', default=False)
142     descr.add_child(newoption)
143     config.cfgimpl_update()
144     assert config.newoption == False
145 # ____________________________________________________________
146 def make_description_requires():
147     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
148     gcdummy = BoolOption('dummy', 'dummy', default=False)
149
150     floatoption = FloatOption('float', 'Test float option', default=2.3)
151
152     objspaceoption = ChoiceOption('objspace', 'Object space',
153                                 ['std', 'thunk'], 'std')
154     booloption = BoolOption('bool', 'Test boolean option', default=True)
155     intoption = IntOption('int', 'Test int option', default=0)
156     stroption = StrOption('str', 'Test string option', default="abc",
157                           requires=[('int', 1, 'hide')])
158
159     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
160     descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
161                                            stroption, intoption])
162     return descr
163
164 def test_hidden_if_in():
165     descr = make_description_requires()
166     cfg = Config(descr)
167     intoption = cfg.unwrap_from_path('int')
168     stroption = cfg.unwrap_from_path('str')
169     assert not stroption._is_hidden()
170     cfg.int = 1
171     raises(PropertiesOptionError, "cfg.str")
172     raises(PropertiesOptionError, 'cfg.str= "uvw"')
173     assert stroption._is_hidden()
174
175 def test_hidden_if_in_with_group():
176     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
177     gcdummy = BoolOption('dummy', 'dummy', default=False)
178
179     floatoption = FloatOption('float', 'Test float option', default=2.3)
180
181     objspaceoption = ChoiceOption('objspace', 'Object space',
182                                 ['std', 'thunk'], 'std')
183     booloption = BoolOption('bool', 'Test boolean option', default=True)
184     intoption = IntOption('int', 'Test int option', default=0)
185     stroption = StrOption('str', 'Test string option', default="abc")
186     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
187                                                   requires=[('int', 1, 'hide')])
188     descr = OptionDescription('constraints', '', [gcgroup, booloption,
189                                           objspaceoption, stroption, intoption])
190     cfg = Config(descr)
191     assert not gcgroup._is_hidden()
192     cfg.int = 1
193     raises(PropertiesOptionError, "cfg.gc.name")
194     assert gcgroup._is_hidden()
195
196 def test_disabled_with_group():
197     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
198     gcdummy = BoolOption('dummy', 'dummy', default=False)
199
200     floatoption = FloatOption('float', 'Test float option', default=2.3)
201
202     objspaceoption = ChoiceOption('objspace', 'Object space',
203                                 ['std', 'thunk'], 'std')
204     booloption = BoolOption('bool', 'Test boolean option', default=True)
205     intoption = IntOption('int', 'Test int option', default=0)
206     stroption = StrOption('str', 'Test string option', default="abc")
207     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption],
208                                                   requires=[('int', 1, 'disable')])
209     descr = OptionDescription('constraints', '', [gcgroup, booloption,
210                                           objspaceoption, stroption, intoption])
211     cfg = Config(descr)
212     assert not gcgroup._is_disabled()
213     cfg.int = 1
214     raises(PropertiesOptionError, "cfg.gc.name")
215     assert gcgroup._is_disabled()