@@ -275,136 +275,110 @@ class TestFeature(SetupConfigs):
275275 def test_trivial (self ):
276276 feature = dsl .Feature (name = 'name' )
277277 origSubstitutions = copy .deepcopy (self .config .substitutions )
278- self .assertTrue (feature .isSupported (self .config ))
279- feature .enableIn (self .config )
278+ actions = feature .getActions (self .config )
279+ self .assertTrue (len (actions ) == 1 )
280+ for a in actions :
281+ a .applyTo (self .config )
280282 self .assertEqual (origSubstitutions , self .config .substitutions )
281283 self .assertIn ('name' , self .config .available_features )
282284
283285 def test_name_can_be_a_callable (self ):
284286 feature = dsl .Feature (name = lambda cfg : 'name' )
285- assert feature .isSupported (self .config )
286- self .assertEqual ('name' , feature .getName (self .config ))
287- feature .enableIn (self .config )
287+ for a in feature .getActions (self .config ):
288+ a .applyTo (self .config )
288289 self .assertIn ('name' , self .config .available_features )
289290
290291 def test_name_is_not_a_string_1 (self ):
291292 feature = dsl .Feature (name = None )
292- assert feature .isSupported (self .config )
293- self .assertRaises (ValueError , lambda : feature .getName (self .config ))
294- self .assertRaises (ValueError , lambda : feature .enableIn (self .config ))
293+ self .assertRaises (ValueError , lambda : feature .getActions (self .config ))
294+ self .assertRaises (ValueError , lambda : feature .pretty (self .config ))
295295
296296 def test_name_is_not_a_string_2 (self ):
297297 feature = dsl .Feature (name = lambda cfg : None )
298- assert feature .isSupported (self .config )
299- self .assertRaises (ValueError , lambda : feature .getName (self .config ))
300- self .assertRaises (ValueError , lambda : feature .enableIn (self .config ))
298+ self .assertRaises (ValueError , lambda : feature .getActions (self .config ))
299+ self .assertRaises (ValueError , lambda : feature .pretty (self .config ))
301300
302- def test_getName_when_unsupported (self ):
303- feature = dsl .Feature (name = 'name' , when = lambda _ : False )
304- assert not feature .isSupported (self .config )
305- self .assertRaises (AssertionError , lambda : feature .getName (self .config ))
306-
307- def test_adding_compile_flag (self ):
308- feature = dsl .Feature (name = 'name' , compileFlag = '-foo' )
301+ def test_adding_action (self ):
302+ feature = dsl .Feature (name = 'name' , actions = [dsl .AddCompileFlag ('-std=c++03' )])
309303 origLinkFlags = copy .deepcopy (self .getSubstitution ('%{link_flags}' ))
310- assert feature .isSupported (self .config )
311- feature . enableIn (self .config )
304+ for a in feature .getActions (self .config ):
305+ a . applyTo (self .config )
312306 self .assertIn ('name' , self .config .available_features )
313- self .assertIn ('-foo ' , self .getSubstitution ('%{compile_flags}' ))
307+ self .assertIn ('-std=c++03 ' , self .getSubstitution ('%{compile_flags}' ))
314308 self .assertEqual (origLinkFlags , self .getSubstitution ('%{link_flags}' ))
315309
316- def test_compile_flag_can_be_a_callable (self ):
310+ def test_actions_can_be_a_callable (self ):
317311 feature = dsl .Feature (name = 'name' ,
318- compileFlag = lambda cfg : (self .assertIs (self .config , cfg ), '-foo' )[1 ])
319- assert feature .isSupported (self .config )
320- feature .enableIn (self .config )
321- self .assertIn ('-foo' , self .getSubstitution ('%{compile_flags}' ))
322-
323- def test_adding_link_flag (self ):
324- feature = dsl .Feature (name = 'name' , linkFlag = '-foo' )
325- origCompileFlags = copy .deepcopy (self .getSubstitution ('%{compile_flags}' ))
326- assert feature .isSupported (self .config )
327- feature .enableIn (self .config )
328- self .assertIn ('name' , self .config .available_features )
329- self .assertIn ('-foo' , self .getSubstitution ('%{link_flags}' ))
330- self .assertEqual (origCompileFlags , self .getSubstitution ('%{compile_flags}' ))
331-
332- def test_link_flag_can_be_a_callable (self ):
333- feature = dsl .Feature (name = 'name' ,
334- linkFlag = lambda cfg : (self .assertIs (self .config , cfg ), '-foo' )[1 ])
335- assert feature .isSupported (self .config )
336- feature .enableIn (self .config )
337- self .assertIn ('-foo' , self .getSubstitution ('%{link_flags}' ))
338-
339- def test_adding_both_flags (self ):
340- feature = dsl .Feature (name = 'name' , compileFlag = '-hello' , linkFlag = '-world' )
341- assert feature .isSupported (self .config )
342- feature .enableIn (self .config )
343- self .assertIn ('name' , self .config .available_features )
344-
345- self .assertIn ('-hello' , self .getSubstitution ('%{compile_flags}' ))
346- self .assertNotIn ('-world' , self .getSubstitution ('%{compile_flags}' ))
347-
348- self .assertIn ('-world' , self .getSubstitution ('%{link_flags}' ))
349- self .assertNotIn ('-hello' , self .getSubstitution ('%{link_flags}' ))
312+ actions = lambda cfg : (
313+ self .assertIs (self .config , cfg ),
314+ [dsl .AddCompileFlag ('-std=c++03' )]
315+ )[1 ])
316+ for a in feature .getActions (self .config ):
317+ a .applyTo (self .config )
318+ self .assertIn ('-std=c++03' , self .getSubstitution ('%{compile_flags}' ))
350319
351320 def test_unsupported_feature (self ):
352321 feature = dsl .Feature (name = 'name' , when = lambda _ : False )
353- self .assertFalse (feature .isSupported (self .config ))
354- # Also make sure we assert if we ever try to add it to a config
355- self .assertRaises (AssertionError , lambda : feature .enableIn (self .config ))
322+ self .assertEqual (feature .getActions (self .config ), [])
356323
357324 def test_is_supported_gets_passed_the_config (self ):
358325 feature = dsl .Feature (name = 'name' , when = lambda cfg : (self .assertIs (self .config , cfg ), True )[1 ])
359- self .assertTrue (feature .isSupported (self .config ))
326+ self .assertEqual (len (feature .getActions (self .config )), 1 )
327+
360328
329+ def _throw ():
330+ raise ValueError ()
361331
362332class TestParameter (SetupConfigs ):
363333 """
364334 Tests for libcxx.test.dsl.Parameter
365335 """
366336 def test_empty_name_should_blow_up (self ):
367- self .assertRaises (ValueError , lambda : dsl .Parameter (name = '' , choices = ['c++03' ], type = str , help = '' , feature = lambda _ : None ))
337+ self .assertRaises (ValueError , lambda : dsl .Parameter (name = '' , choices = ['c++03' ], type = str , help = '' , actions = lambda _ : [] ))
368338
369339 def test_empty_choices_should_blow_up (self ):
370- self .assertRaises (ValueError , lambda : dsl .Parameter (name = 'std' , choices = [], type = str , help = '' , feature = lambda _ : None ))
340+ self .assertRaises (ValueError , lambda : dsl .Parameter (name = 'std' , choices = [], type = str , help = '' , actions = lambda _ : [] ))
371341
372342 def test_name_is_set_correctly (self ):
373- param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' , feature = lambda _ : None )
343+ param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' , actions = lambda _ : [] )
374344 self .assertEqual (param .name , 'std' )
375345
376346 def test_no_value_provided_and_no_default_value (self ):
377- param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' , feature = lambda _ : None )
378- self .assertRaises (ValueError , lambda : param .getFeature (self .config , self .litConfig .params ))
347+ param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' , actions = lambda _ : [] )
348+ self .assertRaises (ValueError , lambda : param .getActions (self .config , self .litConfig .params ))
379349
380350 def test_no_value_provided_and_default_value (self ):
381351 param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' , default = 'c++03' ,
382- feature = lambda std : dsl .Feature (name = std ))
383- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
352+ actions = lambda std : [dsl .AddFeature (std )])
353+ for a in param .getActions (self .config , self .litConfig .params ):
354+ a .applyTo (self .config )
384355 self .assertIn ('c++03' , self .config .available_features )
385356
386357 def test_value_provided_on_command_line_and_no_default_value (self ):
387358 self .litConfig .params ['std' ] = 'c++03'
388359 param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' ,
389- feature = lambda std : dsl .Feature (name = std ))
390- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
360+ actions = lambda std : [dsl .AddFeature (std )])
361+ for a in param .getActions (self .config , self .litConfig .params ):
362+ a .applyTo (self .config )
391363 self .assertIn ('c++03' , self .config .available_features )
392364
393365 def test_value_provided_on_command_line_and_default_value (self ):
394366 """The value provided on the command line should override the default value"""
395367 self .litConfig .params ['std' ] = 'c++11'
396368 param = dsl .Parameter (name = 'std' , choices = ['c++03' , 'c++11' ], type = str , default = 'c++03' , help = '' ,
397- feature = lambda std : dsl .Feature (name = std ))
398- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
369+ actions = lambda std : [dsl .AddFeature (std )])
370+ for a in param .getActions (self .config , self .litConfig .params ):
371+ a .applyTo (self .config )
399372 self .assertIn ('c++11' , self .config .available_features )
400373 self .assertNotIn ('c++03' , self .config .available_features )
401374
402375 def test_value_provided_in_config_and_default_value (self ):
403376 """The value provided in the config should override the default value"""
404377 self .config .std = 'c++11'
405378 param = dsl .Parameter (name = 'std' , choices = ['c++03' , 'c++11' ], type = str , default = 'c++03' , help = '' ,
406- feature = lambda std : dsl .Feature (name = std ))
407- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
379+ actions = lambda std : [dsl .AddFeature (std )])
380+ for a in param .getActions (self .config , self .litConfig .params ):
381+ a .applyTo (self .config )
408382 self .assertIn ('c++11' , self .config .available_features )
409383 self .assertNotIn ('c++03' , self .config .available_features )
410384
@@ -413,42 +387,45 @@ def test_value_provided_in_config_and_on_command_line(self):
413387 self .config .std = 'c++11'
414388 self .litConfig .params ['std' ] = 'c++03'
415389 param = dsl .Parameter (name = 'std' , choices = ['c++03' , 'c++11' ], type = str , help = '' ,
416- feature = lambda std : dsl .Feature (name = std ))
417- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
390+ actions = lambda std : [dsl .AddFeature (std )])
391+ for a in param .getActions (self .config , self .litConfig .params ):
392+ a .applyTo (self .config )
418393 self .assertIn ('c++03' , self .config .available_features )
419394 self .assertNotIn ('c++11' , self .config .available_features )
420395
421- def test_feature_is_None (self ):
396+ def test_no_actions (self ):
422397 self .litConfig .params ['std' ] = 'c++03'
423398 param = dsl .Parameter (name = 'std' , choices = ['c++03' ], type = str , help = '' ,
424- feature = lambda _ : None )
425- feature = param .getFeature (self .config , self .litConfig .params )
426- self .assertIsNone ( feature )
399+ actions = lambda _ : [] )
400+ actions = param .getActions (self .config , self .litConfig .params )
401+ self .assertEqual ( actions , [] )
427402
428403 def test_boolean_value_parsed_from_trueish_string_parameter (self ):
429404 self .litConfig .params ['enable_exceptions' ] = "True"
430405 param = dsl .Parameter (name = 'enable_exceptions' , choices = [True , False ], type = bool , help = '' ,
431- feature = lambda exceptions : None if exceptions else ValueError ())
432- self .assertIsNone (param .getFeature (self .config , self .litConfig .params ))
406+ actions = lambda exceptions : [] if exceptions else _throw ())
407+ self .assertEqual (param .getActions (self .config , self .litConfig .params ), [] )
433408
434409 def test_boolean_value_from_true_boolean_parameter (self ):
435410 self .litConfig .params ['enable_exceptions' ] = True
436411 param = dsl .Parameter (name = 'enable_exceptions' , choices = [True , False ], type = bool , help = '' ,
437- feature = lambda exceptions : None if exceptions else ValueError ())
438- self .assertIsNone (param .getFeature (self .config , self .litConfig .params ))
412+ actions = lambda exceptions : [] if exceptions else _throw ())
413+ self .assertEqual (param .getActions (self .config , self .litConfig .params ), [] )
439414
440415 def test_boolean_value_parsed_from_falseish_string_parameter (self ):
441416 self .litConfig .params ['enable_exceptions' ] = "False"
442417 param = dsl .Parameter (name = 'enable_exceptions' , choices = [True , False ], type = bool , help = '' ,
443- feature = lambda exceptions : None if exceptions else dsl .Feature (name = "-fno-exceptions" ))
444- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
418+ actions = lambda exceptions : [] if exceptions else [dsl .AddFeature ("-fno-exceptions" )])
419+ for a in param .getActions (self .config , self .litConfig .params ):
420+ a .applyTo (self .config )
445421 self .assertIn ('-fno-exceptions' , self .config .available_features )
446422
447423 def test_boolean_value_from_false_boolean_parameter (self ):
448424 self .litConfig .params ['enable_exceptions' ] = False
449425 param = dsl .Parameter (name = 'enable_exceptions' , choices = [True , False ], type = bool , help = '' ,
450- feature = lambda exceptions : None if exceptions else dsl .Feature (name = "-fno-exceptions" ))
451- param .getFeature (self .config , self .litConfig .params ).enableIn (self .config )
426+ actions = lambda exceptions : [] if exceptions else [dsl .AddFeature ("-fno-exceptions" )])
427+ for a in param .getActions (self .config , self .litConfig .params ):
428+ a .applyTo (self .config )
452429 self .assertIn ('-fno-exceptions' , self .config .available_features )
453430
454431
0 commit comments