def test_list_option(self): opt1 = ListOptionType( value_type=PathOptionType, description='Option 1', group="group1") self.assertEqual(opt1('abc'), 'abc') # self.assertEqual( opt1( '../abc/../123' ), '../123' ) self.assertEqual(opt1('../abc/../123'), '../abc/../123') self.assertEqual(opt1([1, 2, 3, 4]), [1, 2, 3, 4]) self.assertEqual(opt1(), []) self.assertEqual(opt1(NotImplemented), []) b = BoolOptionType(description='Test1', group="Debug", style=("On", "Off"), true_values=["Yes", "enabled"], false_values=["No", "disabled"]) ob = ListOptionType(value_type=b, unique=True) self.assertEqual(ob('yes,no'), 'on,disabled') self.assertIn('yes', ob('yes,no')) self.assertEqual( ob.help_range(), ['On (or enabled, Yes)', 'Off (or disabled, No)']) on = ListOptionType( value_type=int, unique=True, range_help="List of integers") self.assertEqual(on('1,0,2,1,1,2,0'), [1, 0, 2]) self.assertRaises(ErrorOptionTypeUnableConvertValue, on, [1, 'abc']) self.assertEqual(on.help_range(), ["List of integers"]) on = ListOptionType(value_type=int) self.assertEqual(on.help_range(), [])
def test_options_update(self): options = Options() options.opt = RangeOptionType(min_value=1, max_value=100) options.warn_level = RangeOptionType(min_value=0, max_value=5) args = {'opt': 5, 'warn_level': 3, 'debug_on': True} options.update(args) self.assertEqual(options.opt, args['opt']) self.assertEqual(options.warn_level, args['warn_level']) self.assertIn('debug_on', options) options.update({}) options.update(options) self.assertRaises(ErrorOptionsMergeNonOptions, options.merge, args) options2 = Options() options2.debug_on = BoolOptionType() options2.debug_on = False options2.bv = ListOptionType(value_type=str) options2.bv += 'debug,release,final' options2.build_variant = options2.bv self.assertTrue(options.debug_on.option_value.option_type.is_auto) options.merge(options2) self.assertEqual(options.debug_on.get(), options2.debug_on.get()) self.assertEqual(options.bv, options2.bv) self.assertEqual(options.bv, options2.build_variant) self.assertEqual(options2.bv, options2.build_variant) self.assertIs(options.bv.option_value, options.build_variant.option_value) options.merge(options2) self.assertEqual(options.debug_on, options2.debug_on) self.assertEqual(options2.bv, options2.build_variant)
def test_options(self): options = Options() opt_type1 = RangeOptionType(min_value=0, max_value=5) options.warn_level = opt_type1 options.warning_level = options.warn_level self.assertEqual(options.warn_level, options.warning_level) options.warning_level = 1 self.assertEqual(options.warn_level, options.warning_level) options.warning_level += 1 self.assertEqual(options.warn_level, 2) options.warning_level -= 2 self.assertEqual(options.warn_level, 0) opt_type2 = BoolOptionType() options.debug_on = opt_type2 options.debug_on = True self.assertEqual(options.debug_on, 'true') over_opts = options.override() self.assertEqual(over_opts.debug_on, 'true') options.debug_on = False self.assertEqual(over_opts.debug_on, 'false') options.debug_on = True self.assertEqual(over_opts.debug_on, 'true') over_opts.debug_on = False self.assertEqual(options.debug_on, 'true') self.assertEqual(over_opts.debug_on, 'false') self.assertEqual(over_opts.warn_level, 0) options.warning_level = 3 self.assertEqual(over_opts.warn_level, 3) self.assertEqual(over_opts.warning_level, 3) over_opts.warn_level.set(1) self.assertEqual(options.warning_level, 3) self.assertEqual(options.warn_level, 3) self.assertEqual(over_opts.warning_level, 1) self.assertEqual(over_opts.warn_level, 1) over_opts = over_opts.copy() options.warning_level = 2 self.assertEqual(options.warn_level, 2) self.assertEqual(over_opts.warn_level, 1) self.assertEqual(over_opts.warning_level, 1) over_opts.warn_level = 4 self.assertEqual(over_opts.warn_level, 4) self.assertEqual(over_opts.warning_level, 4)
def _compiler_options(options): options.language = EnumOptionType(values=[('c++', 'cpp'), 'c'], default='c++', description='Current language', is_hidden=True) options.pic = BoolOptionType( description="Generate position-independent code.", default=True) options.objsuffix = StrOptionType( description="Object file suffix.", is_hidden=True) options.cxxflags = ListOptionType( description="C++ compiler flags", separators=None) options.cflags = ListOptionType( description="C++ compiler flags", separators=None) options.ccflags = ListOptionType( description="Common C/C++ compiler flags", separators=None) options.occflags = ListOptionType( description="Common C/C++ compiler optimization flags", separators=None) options.cc = AbsPathOptionType(description="C/C++ compiler program") options.cc_name = StrOptionType(is_tool_key=True, ignore_case=True, description="C/C++ compiler name") options.cc_ver = VersionOptionType(is_tool_key=True, description="C/C++ compiler version") options.cc_cmd = ListOptionType(separators=None, description="C/C++ compiler full command", is_hidden=True) options.cc_cmd = options.cc options.If().language.eq('c++').cc_cmd += options.cxxflags options.If().language.eq('c').cc_cmd += options.cflags options.cc_cmd += options.ccflags + options.occflags + \ options.cppdefines_flags + options.cpppath_flags options.cxxstd = EnumOptionType(values=['default', ('c++98', 'c++03'), ('c++11', 'c++0x'), ('c++14', 'c++1y')], default='default', description='C++ language standard.')
def test_options_dict(self): options = Options() options.cxx = PathOptionType() options.debug_on = BoolOptionType() options.defines = DictOptionType(key_type=str, value_type=str) options.env = DictOptionType(key_type=UpperCaseString) options.env['PATH'] = ListOptionType(value_type=FilePath, separators=os.pathsep) options.env['PATH'] = [] options.env['Include'] = list options.env['HOME'] = FilePath() options.env['Path'] = '/work/bin' options.env['Include'] = '/work/bin' self.assertEqual(options.env['path'].get(), '/work/bin') self.assertEqual(options.env['Include'].get(), '/work/bin') options.env['Path'] = options.env['Path'] + ['/usr/bin'] options.env['path'] += ['/usr/local/bin', '/home/user/bin'] options.env['Home'] = '/home/user' options.env['path'] += options.env['Home'] options.env['path'] += options.cxx options.cxx = '/mingw/bin/g++' options.If().debug_on.eq(False).defines['DEBUG'] = 'FALSE' options.If().debug_on.eq(True).defines['DEBUG'] = 'TRUE' options.defines['OPTS'] = '' options.If().defines['DEBUG'].eq( 'TRUE').defines['OPTS'] += options.defines['DEBUG'] path = list( map(FilePath, [ '/work/bin', '/usr/bin', '/usr/local/bin', '/home/user/bin', '/home/user', '/mingw/bin/g++' ])) value = options.env self.assertEqual(value['path'].get(), path) self.assertEqual(options.defines['OPTS'], '') options.debug_on = True self.assertEqual(options.defines['OPTS'], 'TRUE')
def test_bm_skip_nodes_by_option(self): with Tempdir() as tmp_dir: options = builtin_options() options.build_dir = tmp_dir bm = BuildManager() self.built_nodes = 0 cond_node = Node(CondBuilder(options), False) options.has_openmp = BoolOptionType(default=True) options.has_openmp = cond_node node = Node(ValueBuilder(options), None) bm.add([node]) bm.build_if(options.has_openmp, node) bm.depends(node, [cond_node]) _build(bm, jobs=4) self.assertEqual(self.built_nodes, 1)
def test_options_wiki_examples(self): options = Options() options.debug_symbols = BoolOptionType( description='Include debug symbols') options.build_variant = EnumOptionType( values=['debug', 'release'], default='debug', description="Current build variant") options.If().build_variant.eq('debug').debug_symbols = True print(options.debug_symbols) options.build_variant = 'release' print(options.debug_symbols) options.build_variant = 'debug' print(options.debug_symbols)
def test_bool_option(self): debug_symbols = BoolOptionType(description='Include debug symbols', group="Debug", style=(True, False)) true_values = ['tRUe', 't', '1', 'Yes', 'ENABled', 'On', 'y', 1, 2, 3, -1, True] false_values = ['FAlsE', 'F', '0', 'No', 'disabled', 'oFF', 'N', 0, None, False] for t in true_values: v = debug_symbols(t) self.assertTrue(v) self.assertEqual(str(v), str(True)) for t in false_values: v = debug_symbols(t) self.assertFalse(v) self.assertEqual(str(v), str(False)) debug_symbols = BoolOptionType(description='Include debug symbols', group="Debug", style=('ON', 'OFF')) v = debug_symbols('TRUE') self.assertTrue(v) self.assertEqual(debug_symbols.to_str(v), 'ON') v = debug_symbols(0) self.assertFalse(v) self.assertEqual(debug_symbols.to_str(v), 'OFF') opt_type = BoolOptionType( style=('Yes', 'No'), true_values=[], false_values=[]) self.assertEqual(opt_type.help_range(), ['Yes', 'No']) opt_type.add_values('Y', 'N') opt_type.add_values('y', 'n') self.assertEqual(opt_type.help_range(), ['Yes (or Y)', 'No (or N)']) opt_type.add_values('1', '0') v = opt_type('1') v |= opt_type(3) v = opt_type(v) self.assertEqual(v, opt_type('y')) v &= opt_type(100) v = opt_type(v) self.assertEqual(v, opt_type(1)) v = v & opt_type(0) v = opt_type(v) self.assertEqual(v, 0) v = v | opt_type(5) v = opt_type(v) self.assertEqual(v, 1) v ^= opt_type(2) v = opt_type(v) self.assertEqual(v, 0) v = v ^ opt_type(2) v = opt_type(v) self.assertEqual(v, 1) self.assertNotEqual(opt_type('1'), 0) self.assertLess(opt_type('0'), 1) self.assertLessEqual(opt_type('0'), 1) self.assertLessEqual(opt_type('1'), 1) self.assertGreater(opt_type('1'), 0) self.assertGreaterEqual(opt_type('1'), 1) self.assertGreaterEqual(opt_type('1'), 0) bt = OptionType(value_type=bool) self.assertEqual(bt('1'), 1) self.assertNotEqual(bt('1'), 0) self.assertNotEqual(bt('0'), 0) self.assertEqual(bt(1), True) self.assertEqual(bt(0), False) self.assertEqual(str(bt(1)), str(True)) self.assertEqual(str(bt(0)), str(False)) bt = BoolOptionType() self.assertEqual(str(bt(1)), 'True') self.assertEqual(str(bt('disabled')), 'False')