blob: 036bda9c957d11df48ed84858b739f9adfd1e5e8 [file] [log] [blame]
"""
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