forked from OSchip/llvm-project
Add "REQUIRES-ANY" feature test
Summary: This patch adds a "REQUIRES-ANY" feature test that is disjunctive. This marks a test as `UNSUPPORTED` if none of the specified features are available. Libc++ has the need to write feature test such as `// REQUIRES-ANY: c++98, c++03` when testing of behavior that is specific to older dialects but has since changed. Reviewers: rnk, ddunbar Subscribers: ddunbar, probinson, llvm-commits, cfe-commits Differential Revision: http://reviews.llvm.org/D20757 llvm-svn: 271468
This commit is contained in:
parent
0b29330612
commit
cd24b0d0d8
|
@ -616,8 +616,10 @@ def parseIntegratedTestScript(test, require_script=True):
|
|||
sourcepath = test.getSourcePath()
|
||||
script = []
|
||||
requires = []
|
||||
requires_any = []
|
||||
unsupported = []
|
||||
keywords = ['RUN:', 'XFAIL:', 'REQUIRES:', 'UNSUPPORTED:', 'END.']
|
||||
keywords = ['RUN:', 'XFAIL:', 'REQUIRES:', 'REQUIRES-ANY:',
|
||||
'UNSUPPORTED:', 'END.']
|
||||
for line_number, command_type, ln in \
|
||||
parseIntegratedTestScriptCommands(sourcepath, keywords):
|
||||
if command_type == 'RUN':
|
||||
|
@ -642,6 +644,8 @@ def parseIntegratedTestScript(test, require_script=True):
|
|||
test.xfails.extend([s.strip() for s in ln.split(',')])
|
||||
elif command_type == 'REQUIRES':
|
||||
requires.extend([s.strip() for s in ln.split(',')])
|
||||
elif command_type == 'REQUIRES-ANY':
|
||||
requires_any.extend([s.strip() for s in ln.split(',')])
|
||||
elif command_type == 'UNSUPPORTED':
|
||||
unsupported.extend([s.strip() for s in ln.split(',')])
|
||||
elif command_type == 'END':
|
||||
|
@ -668,6 +672,12 @@ def parseIntegratedTestScript(test, require_script=True):
|
|||
msg = ', '.join(missing_required_features)
|
||||
return lit.Test.Result(Test.UNSUPPORTED,
|
||||
"Test requires the following features: %s" % msg)
|
||||
requires_any_features = [f for f in requires_any
|
||||
if f in test.config.available_features]
|
||||
if requires_any and not requires_any_features:
|
||||
msg = ' ,'.join(requires_any)
|
||||
return lit.Test.Result(Test.UNSUPPORTED,
|
||||
"Test requires any of the following features: %s" % msg)
|
||||
unsupported_features = [f for f in unsupported
|
||||
if f in test.config.available_features]
|
||||
if unsupported_features:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
RUN: true
|
||||
REQUIRES-ANY: a-missing-feature, a-missing-feature-2
|
|
@ -0,0 +1,2 @@
|
|||
RUN: true
|
||||
REQUIRES-ANY: a-missing-feature, a-present-feature
|
|
@ -47,6 +47,8 @@
|
|||
|
||||
# CHECK: UNRESOLVED: shtest-format :: no-test-line.txt
|
||||
# CHECK: PASS: shtest-format :: pass.txt
|
||||
# CHECK: UNSUPPORTED: shtest-format :: requires-any-missing.txt
|
||||
# CHECK: PASS: shtest-format :: requires-any-present.txt
|
||||
# CHECK: UNSUPPORTED: shtest-format :: requires-missing.txt
|
||||
# CHECK: PASS: shtest-format :: requires-present.txt
|
||||
# CHECK: UNSUPPORTED: shtest-format :: unsupported_dir/some-test.txt
|
||||
|
@ -69,9 +71,9 @@
|
|||
# CHECK: shtest-format :: external_shell/fail_with_bad_encoding.txt
|
||||
# CHECK: shtest-format :: fail.txt
|
||||
|
||||
# CHECK: Expected Passes : 4
|
||||
# CHECK: Expected Passes : 5
|
||||
# CHECK: Expected Failures : 3
|
||||
# CHECK: Unsupported Tests : 2
|
||||
# CHECK: Unsupported Tests : 3
|
||||
# CHECK: Unresolved Tests : 1
|
||||
# CHECK: Unexpected Passes : 1
|
||||
# CHECK: Unexpected Failures: 3
|
||||
|
|
Loading…
Reference in New Issue