diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2024-01-19 08:50:05 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-19 10:50:05 -0600 |
commit | d0d072710468316edbd4130e50f1146c5a6aca89 (patch) | |
tree | 919117818cc103762b24a35297bc2fe796b54753 /lldb/packages/Python/lldbsuite/test/lldbtest.py | |
parent | cebe4de66fb7effa9f8a521c2b9ed2c2b890e5b9 (diff) | |
download | llvm-d0d072710468316edbd4130e50f1146c5a6aca89.zip llvm-d0d072710468316edbd4130e50f1146c5a6aca89.tar.gz llvm-d0d072710468316edbd4130e50f1146c5a6aca89.tar.bz2 |
[lldb][test] Apply @expectedFailureAll/@skipIf early for debug_info tests (#73067)
The @expectedFailureAll and @skipIf decorators will mark the test case
as xfail/skip if _all_ conditions passed in match, including debug_info.
* If debug_info is not one of the matching conditions, we can
immediately evaluate the check and decide if it should be decorated.
* If debug_info *is* present as a match condition, we need to defer
whether or not to decorate until when the `LLDBTestCaseFactory`
metaclass expands the test case into its potential variants. This is
still early enough that the standard `unittest` framework will recognize
the test as xfail/skip by the time the test actually runs.
TestDecorators exhibits the edge cases more thoroughly. With the
exception of `@expectedFailureIf` (added by this commit), all those test
cases pass prior to this commit.
This is a followup to 212a60ec37322f853e91e171b305479b1abff2f2.
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lldbtest.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/lldbtest.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index dc4e322..3abc713 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1667,6 +1667,11 @@ class LLDBTestCaseFactory(type): if original_testcase.NO_DEBUG_INFO_TESTCASE: return original_testcase + # Default implementation for skip/xfail reason based on the debug category, + # where "None" means to run the test as usual. + def no_reason(_): + return None + newattrs = {} for attrname, attrvalue in attrs.items(): if attrname.startswith("test") and not getattr( @@ -1688,6 +1693,12 @@ class LLDBTestCaseFactory(type): if can_replicate ] + xfail_for_debug_info_cat_fn = getattr( + attrvalue, "__xfail_for_debug_info_cat_fn__", no_reason + ) + skip_for_debug_info_cat_fn = getattr( + attrvalue, "__skip_for_debug_info_cat_fn__", no_reason + ) for cat in categories: @decorators.add_test_categories([cat]) @@ -1698,6 +1709,17 @@ class LLDBTestCaseFactory(type): method_name = attrname + "_" + cat test_method.__name__ = method_name test_method.debug_info = cat + + xfail_reason = xfail_for_debug_info_cat_fn(cat) + if xfail_reason: + test_method = unittest2.expectedFailure(xfail_reason)( + test_method + ) + + skip_reason = skip_for_debug_info_cat_fn(cat) + if skip_reason: + test_method = unittest2.skip(skip_reason)(test_method) + newattrs[method_name] = test_method else: |