1""" 2Provides definitions for various lldb test categories 3""" 4 5# System modules 6import sys 7 8# Third-party modules 9 10# LLDB modules 11from lldbsuite.support import gmodules 12 13# Key: Category name 14# Value: should be used in lldbtest's debug-info replication 15debug_info_categories = {"dwarf": True, "dwo": True, "dsym": True, "gmodules": False} 16 17all_categories = { 18 "basic_process": "Basic process execution sniff tests.", 19 "cmdline": "Tests related to the LLDB command-line interface", 20 "dataformatters": "Tests related to the type command and the data formatters subsystem", 21 "debugserver": "Debugserver tests", 22 "dsym": "Tests that can be run with DSYM debug information", 23 "dwarf": "Tests that can be run with DWARF debug information", 24 "dwo": "Tests that can be run with DWO debug information", 25 "dyntype": "Tests related to dynamic type support", 26 "expression": "Tests related to the expression parser", 27 "flakey": "Flakey test cases, i.e. tests that do not reliably pass at each execution", 28 "fork": "Tests requiring the process plugin fork/vfork event support", 29 "gmodules": "Tests that can be run with -gmodules debug information", 30 "instrumentation-runtime": "Tests for the instrumentation runtime plugins", 31 "libc++": "Test for libc++ data formatters", 32 "libstdcxx": "Test for libstdcxx data formatters", 33 "lldb-server": "Tests related to lldb-server", 34 "lldb-dap": "Tests for the Debug Adaptor Protocol with lldb-dap", 35 "llgs": "Tests for the gdb-server functionality of lldb-server", 36 "objc": "Tests related to the Objective-C programming language support", 37 "pyapi": "Tests related to the Python API", 38 "std-module": "Tests related to importing the std module", 39 "stresstest": "Tests related to stressing lldb limits", 40 "watchpoint": "Watchpoint-related tests", 41} 42 43 44def unique_string_match(yourentry, list): 45 candidate = None 46 for item in list: 47 if not item.startswith(yourentry): 48 continue 49 if candidate: 50 return None 51 candidate = item 52 return candidate 53 54 55def is_supported_on_platform(category, platform, compiler_path): 56 if category == "dwo": 57 # -gsplit-dwarf is not implemented by clang on Windows. 58 return platform in ["linux", "freebsd"] 59 elif category == "dsym": 60 return platform in ["darwin", "macosx", "ios", "watchos", "tvos", "bridgeos"] 61 elif category == "gmodules": 62 # First, check to see if the platform can even support gmodules. 63 if platform not in ["darwin", "macosx", "ios", "watchos", "tvos", "bridgeos"]: 64 return False 65 return gmodules.is_compiler_clang_with_gmodules(compiler_path) 66 return True 67 68 69def validate(categories, exact_match): 70 """ 71 For each category in categories, ensure that it's a valid category (if exact_match is false, 72 unique prefixes are also accepted). If a category is invalid, print a message and quit. 73 If all categories are valid, return the list of categories. Prefixes are expanded in the 74 returned list. 75 """ 76 result = [] 77 for category in categories: 78 origCategory = category 79 if category not in all_categories and not exact_match: 80 category = unique_string_match(category, all_categories) 81 if (category not in all_categories) or category is None: 82 print( 83 "fatal error: category '" + origCategory + "' is not a valid category" 84 ) 85 print( 86 "if you have added a new category, please edit test_categories.py, adding your new category to all_categories" 87 ) 88 print( 89 "else, please specify one or more of the following: " 90 + str(list(all_categories.keys())) 91 ) 92 sys.exit(1) 93 result.append(category) 94 return result 95