""" Provides definitions for various lldb test categories """ # System modules import sys # Third-party modules # LLDB modules from lldbsuite.support import gmodules # Key: Category name # Value: should be used in lldbtest's debug-info replication debug_info_categories = {"dwarf": True, "dwo": True, "dsym": True, "gmodules": False} all_categories = { "basic_process": "Basic process execution sniff tests.", "cmdline": "Tests related to the LLDB command-line interface", "dataformatters": "Tests related to the type command and the data formatters subsystem", "debugserver": "Debugserver tests", "dsym": "Tests that can be run with DSYM debug information", "dwarf": "Tests that can be run with DWARF debug information", "dwo": "Tests that can be run with DWO debug information", "dyntype": "Tests related to dynamic type support", "expression": "Tests related to the expression parser", "flakey": "Flakey test cases, i.e. tests that do not reliably pass at each execution", "fork": "Tests requiring the process plugin fork/vfork event support", "gmodules": "Tests that can be run with -gmodules debug information", "instrumentation-runtime": "Tests for the instrumentation runtime plugins", "libc++": "Test for libc++ data formatters", "libstdcxx": "Test for libstdcxx data formatters", "lldb-server": "Tests related to lldb-server", "lldb-dap": "Tests for the Debug Adaptor Protocol with lldb-dap", "llgs": "Tests for the gdb-server functionality of lldb-server", "pexpect": "Tests requiring the pexpect library to be available", "objc": "Tests related to the Objective-C programming language support", "pyapi": "Tests related to the Python API", "std-module": "Tests related to importing the std module", "stresstest": "Tests related to stressing lldb limits", "watchpoint": "Watchpoint-related tests", } def unique_string_match(yourentry, list): candidate = None for item in list: if not item.startswith(yourentry): continue if candidate: return None candidate = item return candidate def is_supported_on_platform(category, platform, compiler_path): if category == "dwo": # -gsplit-dwarf is not implemented by clang on Windows. return platform in ["linux", "freebsd"] elif category == "dsym": return platform in ["darwin", "macosx", "ios", "watchos", "tvos", "bridgeos"] elif category == "gmodules": # First, check to see if the platform can even support gmodules. if platform not in ["darwin", "macosx", "ios", "watchos", "tvos", "bridgeos"]: return False return gmodules.is_compiler_clang_with_gmodules(compiler_path) return True def validate(categories, exact_match): """ For each category in categories, ensure that it's a valid category (if exact_match is false, unique prefixes are also accepted). If a category is invalid, print a message and quit. If all categories are valid, return the list of categories. Prefixes are expanded in the returned list. """ result = [] for category in categories: origCategory = category if category not in all_categories and not exact_match: category = unique_string_match(category, all_categories) if (category not in all_categories) or category is None: print( "fatal error: category '" + origCategory + "' is not a valid category" ) print( "if you have added a new category, please edit test_categories.py, adding your new category to all_categories" ) print( "else, please specify one or more of the following: " + str(list(all_categories.keys())) ) sys.exit(1) result.append(category) return result