2 from py.test import raises
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,
19 wantframework_option = BoolOption('wantframework', 'Test requires',
22 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
23 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
24 wantref_option, stroption,
29 def make_description_duplicates():
30 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
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,
42 wantframework_option = BoolOption('wantframework', 'Test requires',
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,
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
58 descr = make_description_duplicates()
59 raises(ConflictConfigError, "cfg = Config(descr)")
61 def make_description2():
62 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
63 gcdummy = BoolOption('dummy', 'dummy', default=False)
65 floatoption = FloatOption('float', 'Test float option', default=2.3)
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")
73 boolop = BoolOption('boolop', 'Test boolean option op', default=True)
75 wantref_option = BoolOption('wantref', 'Test requires', default=False,
78 wantframework_option = BoolOption('wantframework', 'Test requires',
81 wantframework_option.enable_multi()
83 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
84 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
85 wantref_option, stroption,
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()
96 # cfg.boolop = [True, True, False]
97 # cfg.wantframework = [False, False, True]
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
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
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)
138 floatoption = FloatOption('float', 'Test float option', default=2.3)
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')])
147 gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
148 descr = OptionDescription('constraints', '', [gcgroup, booloption, objspaceoption,
149 stroption, intoption])
152 def test_hidden_if_in():
153 descr = make_description_requires()
155 intoption = cfg.unwrap_from_path('int')
156 stroption = cfg.unwrap_from_path('str')
157 assert not stroption._is_hidden()
159 raises(HiddenOptionError, "cfg.str")
160 raises(HiddenOptionError, 'cfg.str= "uvw"')
161 assert stroption._is_hidden()
163 def test_hidden_if_in_with_group():
164 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
165 gcdummy = BoolOption('dummy', 'dummy', default=False)
167 floatoption = FloatOption('float', 'Test float option', default=2.3)
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])
179 assert not gcgroup._is_hidden()
181 raises(HiddenOptionError, "cfg.gc.name")
182 # raises(HiddenOptionError, 'cfg.gc= "uvw"')
183 assert gcgroup._is_hidden()
185 def test_disabled_with_group():
186 gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
187 gcdummy = BoolOption('dummy', 'dummy', default=False)
189 floatoption = FloatOption('float', 'Test float option', default=2.3)
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])
201 assert not gcgroup._is_disabled()
203 raises(DisabledOptionError, "cfg.gc.name")
204 # raises(HiddenOptionError, 'cfg.gc= "uvw"')
205 assert gcgroup._is_disabled()