[PATCH] D29684: [lit] Add callback support for modifying test script
Dominic Chen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 7 14:09:37 PST 2017
ddcc created this revision.
Adds a callback field to TestConfig, and a "ShTest" callback in TestRunner to allow direct manipulation of command-line arguments.
This mechanism is proposed to be used by the Clang static analyzer in https://reviews.llvm.org/D28952 for checking if an additional constraint solver backend is available, and
if so, executing each test automatically with each constraint solver backend, without adding additional lines to each testcase.
https://reviews.llvm.org/D29684
Files:
docs/TestingGuide.rst
utils/lit/lit/TestRunner.py
utils/lit/lit/TestingConfig.py
utils/lit/tests/Inputs/shtest-callback/lit.cfg
utils/lit/tests/Inputs/shtest-callback/lit.local.cfg
utils/lit/tests/Inputs/shtest-callback/shtest.txt
utils/lit/tests/shtest-callback.py
Index: utils/lit/tests/shtest-callback.py
===================================================================
--- /dev/null
+++ utils/lit/tests/shtest-callback.py
@@ -0,0 +1,8 @@
+# Test callbacks are executed correctly.
+
+# RUN: %{lit} -j 1 -v %{inputs}/callback > %t.out
+# RUN: FileCheck < %t.out %s
+
+# CHECK: -- Testing:
+
+# CHECK: PASS: callback :: shtest.txt
Index: utils/lit/tests/Inputs/shtest-callback/shtest.txt
===================================================================
--- /dev/null
+++ utils/lit/tests/Inputs/shtest-callback/shtest.txt
@@ -0,0 +1 @@
+# RUN: %callback1
Index: utils/lit/tests/Inputs/shtest-callback/lit.local.cfg
===================================================================
--- /dev/null
+++ utils/lit/tests/Inputs/shtest-callback/lit.local.cfg
@@ -0,0 +1,7 @@
+import lit.TestRunner
+
+def callback(test, cmd):
+ return lit.TestRunner.applySubstitutions(cmd, [('%callback2', 'true')])
+
+config.callbacks["ShTest"] = callback
+
Index: utils/lit/tests/Inputs/shtest-callback/lit.cfg
===================================================================
--- /dev/null
+++ utils/lit/tests/Inputs/shtest-callback/lit.cfg
@@ -0,0 +1,8 @@
+import lit.formats
+config.name = 'shtest-callback'
+config.substitutions = [('%callback1', '%callback2')]
+config.suffixes = ['.txt']
+config.test_format = lit.formats.ShTest()
+config.test_source_root = None
+config.test_exec_root = None
+config.target_triple = 'x86_64-unknown-unknown'
Index: utils/lit/lit/TestingConfig.py
===================================================================
--- utils/lit/lit/TestingConfig.py
+++ utils/lit/lit/TestingConfig.py
@@ -106,7 +106,7 @@
environment, substitutions, unsupported,
test_exec_root, test_source_root, excludes,
available_features, pipefail, limit_to_features = [],
- is_early = False, parallelism_group = ""):
+ is_early = False, parallelism_group = "", callbacks = {}):
self.parent = parent
self.name = str(name)
self.suffixes = set(suffixes)
@@ -126,6 +126,7 @@
# Whether the suite should be tested early in a given run.
self.is_early = bool(is_early)
self.parallelism_group = parallelism_group
+ self.callbacks = callbacks
def finish(self, litConfig):
"""finish() - Finish this config object, after loading is complete."""
@@ -143,6 +144,7 @@
# files. Should we distinguish them?
self.test_source_root = str(self.test_source_root)
self.excludes = set(self.excludes)
+ self.callbacks = dict(self.callbacks)
@property
def root(self):
Index: utils/lit/lit/TestRunner.py
===================================================================
--- utils/lit/lit/TestRunner.py
+++ utils/lit/lit/TestRunner.py
@@ -1045,6 +1045,8 @@
if hasattr(test.config, 'test_retry_attempts'):
attempts += test.config.test_retry_attempts
for i in range(attempts):
+ if "ShTest" in test.config.callbacks:
+ script = test.config.callbacks["ShTest"](test, script)
res = _runShTest(test, litConfig, useExternalSh, script, tmpBase)
if res.code != Test.FAIL:
break
Index: docs/TestingGuide.rst
===================================================================
--- docs/TestingGuide.rst
+++ docs/TestingGuide.rst
@@ -506,6 +506,9 @@
``%clang_cc1``
Invokes the Clang frontend.
+``%clang_analyze_cc1``
+ Invokes the Clang frontend with the static analyzer.
+
``%itanium_abi_triple``, ``%ms_abi_triple``
These substitutions can be used to get the current target triple adjusted to
the desired ABI. For example, if the test suite is running with the
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29684.87518.patch
Type: text/x-patch
Size: 3766 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170207/04746ef8/attachment.bin>
More information about the llvm-commits
mailing list