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