forked from OSchip/llvm-project
[lldb][tests] Make it possible to expect failure for a whole category
There already are decorators and "--excluded" option to mark test-cases/files as expected to fail. However, when a new test file is added and it which relates to a feature that a target doesn't support, this requires either adding decorators to that file or modifying the file provided as "--excluded" option value. The purpose of this patch is to avoid any modifications in such cases. E.g. if a target doesn't support "watchpoints" and passes "--xfail-category watchpoint" to dotest, a testing job will not fail after a new watchpoint-related test file is added. Differential Revision: https://reviews.llvm.org/D71906
This commit is contained in:
parent
e20a3b9b6c
commit
3eea082535
|
@ -30,6 +30,8 @@ categories_list = None
|
|||
use_categories = False
|
||||
# Categories we want to skip
|
||||
skip_categories = ["darwin-log"]
|
||||
# Categories we expect to fail
|
||||
xfail_categories = []
|
||||
# use this to track per-category failures
|
||||
failures_per_category = {}
|
||||
|
||||
|
|
|
@ -330,6 +330,10 @@ def parseOptionsAndInitTestdirs():
|
|||
configuration.skip_categories += test_categories.validate(
|
||||
args.skip_categories, False)
|
||||
|
||||
if args.xfail_categories:
|
||||
configuration.xfail_categories += test_categories.validate(
|
||||
args.xfail_categories, False)
|
||||
|
||||
if args.E:
|
||||
os.environ['CFLAGS_EXTRAS'] = args.E
|
||||
|
||||
|
|
|
@ -83,6 +83,12 @@ def create_parser():
|
|||
action='append',
|
||||
dest='skip_categories',
|
||||
help=textwrap.dedent('''Specify categories of test cases to skip. Takes precedence over -G. Can be specified more than once.'''))
|
||||
group.add_argument(
|
||||
'--xfail-category',
|
||||
metavar='category',
|
||||
action='append',
|
||||
dest='xfail_categories',
|
||||
help=textwrap.dedent('''Specify categories of test cases that are expected to fail. Can be specified more than once.'''))
|
||||
|
||||
# Configuration options
|
||||
group = parser.add_argument_group('Configuration options')
|
||||
|
|
|
@ -164,6 +164,10 @@ class LLDBTestResult(unittest2.TextTestResult):
|
|||
return True
|
||||
return False
|
||||
|
||||
def checkCategoryExclusion(self, exclusion_list, test):
|
||||
return not set(exclusion_list).isdisjoint(
|
||||
self.getCategoriesForTest(test))
|
||||
|
||||
def startTest(self, test):
|
||||
if configuration.shouldSkipBecauseOfCategories(
|
||||
self.getCategoriesForTest(test)):
|
||||
|
@ -182,8 +186,10 @@ class LLDBTestResult(unittest2.TextTestResult):
|
|||
EventBuilder.event_for_start(test))
|
||||
|
||||
def addSuccess(self, test):
|
||||
if self.checkExclusion(
|
||||
configuration.xfail_tests, test.id()):
|
||||
if (self.checkExclusion(
|
||||
configuration.xfail_tests, test.id()) or
|
||||
self.checkCategoryExclusion(
|
||||
configuration.xfail_categories, test)):
|
||||
self.addUnexpectedSuccess(test, None)
|
||||
return
|
||||
|
||||
|
@ -245,8 +251,10 @@ class LLDBTestResult(unittest2.TextTestResult):
|
|||
test, err))
|
||||
|
||||
def addFailure(self, test, err):
|
||||
if self.checkExclusion(
|
||||
configuration.xfail_tests, test.id()):
|
||||
if (self.checkExclusion(
|
||||
configuration.xfail_tests, test.id()) or
|
||||
self.checkCategoryExclusion(
|
||||
configuration.xfail_categories, test)):
|
||||
self.addExpectedFailure(test, err, None)
|
||||
return
|
||||
|
||||
|
|
Loading…
Reference in New Issue