| lit - LLVM Integrated Tester |
| ============================ |
| |
| SYNOPSIS |
| -------- |
| |
| :program:`lit` [*options*] [*tests*] |
| |
| DESCRIPTION |
| ----------- |
| |
| :program:`lit` is a portable tool for executing LLVM and Clang style test |
| suites, summarizing their results, and providing indication of failures. |
| :program:`lit` is designed to be a lightweight testing tool with as simple a |
| user interface as possible. |
| |
| :program:`lit` should be run with one or more *tests* to run specified on the |
| command line. Tests can be either individual test files or directories to |
| search for tests (see :ref:`test-discovery`). |
| |
| Each specified test will be executed (potentially in parallel) and once all |
| tests have been run :program:`lit` will print summary information on the number |
| of tests which passed or failed (see :ref:`test-status-results`). The |
| :program:`lit` program will execute with a non-zero exit code if any tests |
| fail. |
| |
| By default :program:`lit` will use a succinct progress display and will only |
| print summary information for test failures. See :ref:`output-options` for |
| options controlling the :program:`lit` progress display and output. |
| |
| :program:`lit` also includes a number of options for controlling how tests are |
| executed (specific features may depend on the particular test format). See |
| :ref:`execution-options` for more information. |
| |
| Finally, :program:`lit` also supports additional options for only running a |
| subset of the options specified on the command line, see |
| :ref:`selection-options` for more information. |
| |
| Users interested in the :program:`lit` architecture or designing a |
| :program:`lit` testing implementation should see :ref:`lit-infrastructure`. |
| |
| GENERAL OPTIONS |
| --------------- |
| |
| .. option:: -h, --help |
| |
| Show the :program:`lit` help message. |
| |
| .. option:: -j N, --threads=N |
| |
| Run ``N`` tests in parallel. By default, this is automatically chosen to |
| match the number of detected available CPUs. |
| |
| .. option:: --config-prefix=NAME |
| |
| Search for :file:`{NAME}.cfg` and :file:`{NAME}.site.cfg` when searching for |
| test suites, instead of :file:`lit.cfg` and :file:`lit.site.cfg`. |
| |
| .. option:: -D NAME[=VALUE], --param NAME[=VALUE] |
| |
| Add a user defined parameter ``NAME`` with the given ``VALUE`` (or the empty |
| string if not given). The meaning and use of these parameters is test suite |
| dependent. |
| |
| .. _output-options: |
| |
| OUTPUT OPTIONS |
| -------------- |
| |
| .. option:: -q, --quiet |
| |
| Suppress any output except for test failures. |
| |
| .. option:: -s, --succinct |
| |
| Show less output, for example don't show information on tests that pass. |
| |
| .. option:: -v, --verbose |
| |
| Show more information on test failures, for example the entire test output |
| instead of just the test result. |
| |
| .. option:: -vv, --echo-all-commands |
| |
| Echo all commands to stdout, as they are being executed. |
| This can be valuable for debugging test failures, as the last echoed command |
| will be the one which has failed. |
| :program:`lit` normally inserts a no-op command (``:`` in the case of bash) |
| with argument ``'RUN: at line N'`` before each command pipeline, and this |
| option also causes those no-op commands to be echoed to stdout to help you |
| locate the source line of the failed command. |
| This option implies ``--verbose``. |
| |
| .. option:: -a, --show-all |
| |
| Show more information about all tests, for example the entire test |
| commandline and output. |
| |
| .. option:: --no-progress-bar |
| |
| Do not use curses based progress bar. |
| |
| .. option:: --show-unsupported |
| |
| Show the names of unsupported tests. |
| |
| .. option:: --show-xfail |
| |
| Show the names of tests that were expected to fail. |
| |
| .. _execution-options: |
| |
| EXECUTION OPTIONS |
| ----------------- |
| |
| .. option:: --path=PATH |
| |
| Specify an additional ``PATH`` to use when searching for executables in tests. |
| |
| .. option:: --vg |
| |
| Run individual tests under valgrind (using the memcheck tool). The |
| ``--error-exitcode`` argument for valgrind is used so that valgrind failures |
| will cause the program to exit with a non-zero status. |
| |
| When this option is enabled, :program:`lit` will also automatically provide a |
| "``valgrind``" feature that can be used to conditionally disable (or expect |
| failure in) certain tests. |
| |
| .. option:: --vg-arg=ARG |
| |
| When :option:`--vg` is used, specify an additional argument to pass to |
| :program:`valgrind` itself. |
| |
| .. option:: --vg-leak |
| |
| When :option:`--vg` is used, enable memory leak checks. When this option is |
| enabled, :program:`lit` will also automatically provide a "``vg_leak``" |
| feature that can be used to conditionally disable (or expect failure in) |
| certain tests. |
| |
| .. option:: --time-tests |
| |
| Track the wall time individual tests take to execute and includes the results |
| in the summary output. This is useful for determining which tests in a test |
| suite take the most time to execute. Note that this option is most useful |
| with ``-j 1``. |
| |
| .. _selection-options: |
| |
| SELECTION OPTIONS |
| ----------------- |
| |
| .. option:: --max-tests=N |
| |
| Run at most ``N`` tests and then terminate. |
| |
| .. option:: --max-time=N |
| |
| Spend at most ``N`` seconds (approximately) running tests and then terminate. |
| |
| .. option:: --shuffle |
| |
| Run the tests in a random order. |
| |
| .. option:: --num-shards=M |
| |
| Divide the set of selected tests into ``M`` equal-sized subsets or |
| "shards", and run only one of them. Must be used with the |
| ``--run-shard=N`` option, which selects the shard to run. The environment |
| variable ``LIT_NUM_SHARDS`` can also be used in place of this |
| option. These two options provide a coarse mechanism for paritioning large |
| testsuites, for parallel execution on separate machines (say in a large |
| testing farm). |
| |
| .. option:: --run-shard=N |
| |
| Select which shard to run, assuming the ``--num-shards=M`` option was |
| provided. The two options must be used together, and the value of ``N`` |
| must be in the range ``1..M``. The environment variable |
| ``LIT_RUN_SHARD`` can also be used in place of this option. |
| |
| .. option:: --filter=REGEXP |
| |
| Run only those tests whose name matches the regular expression specified in |
| ``REGEXP``. The environment variable ``LIT_FILTER`` can be also used in place |
| of this option, which is especially useful in environments where the call |
| to ``lit`` is issued indirectly. |
| |
| ADDITIONAL OPTIONS |
| ------------------ |
| |
| .. option:: --debug |
| |
| Run :program:`lit` in debug mode, for debugging configuration issues and |
| :program:`lit` itself. |
| |
| .. option:: --show-suites |
| |
| List the discovered test suites and exit. |
| |
| .. option:: --show-tests |
| |
| List all of the discovered tests and exit. |
| |
| EXIT STATUS |
| ----------- |
| |
| :program:`lit` will exit with an exit code of 1 if there are any FAIL or XPASS |
| results. Otherwise, it will exit with the status 0. Other exit codes are used |
| for non-test related failures (for example a user error or an internal program |
| error). |
| |
| .. _test-discovery: |
| |
| TEST DISCOVERY |
| -------------- |
| |
| The inputs passed to :program:`lit` can be either individual tests, or entire |
| directories or hierarchies of tests to run. When :program:`lit` starts up, the |
| first thing it does is convert the inputs into a complete list of tests to run |
| as part of *test discovery*. |
| |
| In the :program:`lit` model, every test must exist inside some *test suite*. |
| :program:`lit` resolves the inputs specified on the command line to test suites |
| by searching upwards from the input path until it finds a :file:`lit.cfg` or |
| :file:`lit.site.cfg` file. These files serve as both a marker of test suites |
| and as configuration files which :program:`lit` loads in order to understand |
| how to find and run the tests inside the test suite. |
| |
| Once :program:`lit` has mapped the inputs into test suites it traverses the |
| list of inputs adding tests for individual files and recursively searching for |
| tests in directories. |
| |
| This behavior makes it easy to specify a subset of tests to run, while still |
| allowing the test suite configuration to control exactly how tests are |
| interpreted. In addition, :program:`lit` always identifies tests by the test |
| suite they are in, and their relative path inside the test suite. For |
| appropriately configured projects, this allows :program:`lit` to provide |
| convenient and flexible support for out-of-tree builds. |
| |
| .. _test-status-results: |
| |
| TEST STATUS RESULTS |
| ------------------- |
| |
| Each test ultimately produces one of the following six results: |
| |
| **PASS** |
| |
| The test succeeded. |
| |
| **XFAIL** |
| |
| The test failed, but that is expected. This is used for test formats which allow |
| specifying that a test does not currently work, but wish to leave it in the test |
| suite. |
| |
| **XPASS** |
| |
| The test succeeded, but it was expected to fail. This is used for tests which |
| were specified as expected to fail, but are now succeeding (generally because |
| the feature they test was broken and has been fixed). |
| |
| **FAIL** |
| |
| The test failed. |
| |
| **UNRESOLVED** |
| |
| The test result could not be determined. For example, this occurs when the test |
| could not be run, the test itself is invalid, or the test was interrupted. |
| |
| **UNSUPPORTED** |
| |
| The test is not supported in this environment. This is used by test formats |
| which can report unsupported tests. |
| |
| Depending on the test format tests may produce additional information about |
| their status (generally only for failures). See the :ref:`output-options` |
| section for more information. |
| |
| .. _lit-infrastructure: |
| |
| LIT INFRASTRUCTURE |
| ------------------ |
| |
| This section describes the :program:`lit` testing architecture for users interested in |
| creating a new :program:`lit` testing implementation, or extending an existing one. |
| |
| :program:`lit` proper is primarily an infrastructure for discovering and running |
| arbitrary tests, and to expose a single convenient interface to these |
| tests. :program:`lit` itself doesn't know how to run tests, rather this logic is |
| defined by *test suites*. |
| |
| TEST SUITES |
| ~~~~~~~~~~~ |
| |
| As described in :ref:`test-discovery`, tests are always located inside a *test |
| suite*. Test suites serve to define the format of the tests they contain, the |
| logic for finding those tests, and any additional information to run the tests. |
| |
| :program:`lit` identifies test suites as directories containing ``lit.cfg`` or |
| ``lit.site.cfg`` files (see also :option:`--config-prefix`). Test suites are |
| initially discovered by recursively searching up the directory hierarchy for |
| all the input files passed on the command line. You can use |
| :option:`--show-suites` to display the discovered test suites at startup. |
| |
| Once a test suite is discovered, its config file is loaded. Config files |
| themselves are Python modules which will be executed. When the config file is |
| executed, two important global variables are predefined: |
| |
| **lit_config** |
| |
| The global **lit** configuration object (a *LitConfig* instance), which defines |
| the builtin test formats, global configuration parameters, and other helper |
| routines for implementing test configurations. |
| |
| **config** |
| |
| This is the config object (a *TestingConfig* instance) for the test suite, |
| which the config file is expected to populate. The following variables are also |
| available on the *config* object, some of which must be set by the config and |
| others are optional or predefined: |
| |
| **name** *[required]* The name of the test suite, for use in reports and |
| diagnostics. |
| |
| **test_format** *[required]* The test format object which will be used to |
| discover and run tests in the test suite. Generally this will be a builtin test |
| format available from the *lit.formats* module. |
| |
| **test_source_root** The filesystem path to the test suite root. For out-of-dir |
| builds this is the directory that will be scanned for tests. |
| |
| **test_exec_root** For out-of-dir builds, the path to the test suite root inside |
| the object directory. This is where tests will be run and temporary output files |
| placed. |
| |
| **environment** A dictionary representing the environment to use when executing |
| tests in the suite. |
| |
| **suffixes** For **lit** test formats which scan directories for tests, this |
| variable is a list of suffixes to identify test files. Used by: *ShTest*. |
| |
| **substitutions** For **lit** test formats which substitute variables into a test |
| script, the list of substitutions to perform. Used by: *ShTest*. |
| |
| **unsupported** Mark an unsupported directory, all tests within it will be |
| reported as unsupported. Used by: *ShTest*. |
| |
| **parent** The parent configuration, this is the config object for the directory |
| containing the test suite, or None. |
| |
| **root** The root configuration. This is the top-most :program:`lit` configuration in |
| the project. |
| |
| **pipefail** Normally a test using a shell pipe fails if any of the commands |
| on the pipe fail. If this is not desired, setting this variable to false |
| makes the test fail only if the last command in the pipe fails. |
| |
| **available_features** A set of features that can be used in `XFAIL`, |
| `REQUIRES`, and `UNSUPPORTED` directives. |
| |
| TEST DISCOVERY |
| ~~~~~~~~~~~~~~ |
| |
| Once test suites are located, :program:`lit` recursively traverses the source |
| directory (following *test_source_root*) looking for tests. When :program:`lit` |
| enters a sub-directory, it first checks to see if a nested test suite is |
| defined in that directory. If so, it loads that test suite recursively, |
| otherwise it instantiates a local test config for the directory (see |
| :ref:`local-configuration-files`). |
| |
| Tests are identified by the test suite they are contained within, and the |
| relative path inside that suite. Note that the relative path may not refer to |
| an actual file on disk; some test formats (such as *GoogleTest*) define |
| "virtual tests" which have a path that contains both the path to the actual |
| test file and a subpath to identify the virtual test. |
| |
| .. _local-configuration-files: |
| |
| LOCAL CONFIGURATION FILES |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| When :program:`lit` loads a subdirectory in a test suite, it instantiates a |
| local test configuration by cloning the configuration for the parent directory |
| --- the root of this configuration chain will always be a test suite. Once the |
| test configuration is cloned :program:`lit` checks for a *lit.local.cfg* file |
| in the subdirectory. If present, this file will be loaded and can be used to |
| specialize the configuration for each individual directory. This facility can |
| be used to define subdirectories of optional tests, or to change other |
| configuration parameters --- for example, to change the test format, or the |
| suffixes which identify test files. |
| |
| PRE-DEFINED SUBSTITUTIONS |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| :program:`lit` provides various patterns that can be used with the RUN command. |
| These are defined in TestRunner.py. The base set of substitutions are: |
| |
| ========== ============== |
| Macro Substitution |
| ========== ============== |
| %s source path (path to the file currently being run) |
| %S source dir (directory of the file currently being run) |
| %p same as %S |
| %{pathsep} path separator |
| %t temporary file name unique to the test |
| %T temporary directory unique to the test |
| %% % |
| ========== ============== |
| |
| Other substitutions are provided that are variations on this base set and |
| further substitution patterns can be defined by each test module. See the |
| modules :ref:`local-configuration-files`. |
| |
| More detailed information on substitutions can be found in the |
| :doc:`../TestingGuide`. |
| |
| TEST RUN OUTPUT FORMAT |
| ~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :program:`lit` output for a test run conforms to the following schema, in |
| both short and verbose modes (although in short mode no PASS lines will be |
| shown). This schema has been chosen to be relatively easy to reliably parse by |
| a machine (for example in buildbot log scraping), and for other tools to |
| generate. |
| |
| Each test result is expected to appear on a line that matches: |
| |
| .. code-block:: none |
| |
| <result code>: <test name> (<progress info>) |
| |
| where ``<result-code>`` is a standard test result such as PASS, FAIL, XFAIL, |
| XPASS, UNRESOLVED, or UNSUPPORTED. The performance result codes of IMPROVED and |
| REGRESSED are also allowed. |
| |
| The ``<test name>`` field can consist of an arbitrary string containing no |
| newline. |
| |
| The ``<progress info>`` field can be used to report progress information such |
| as (1/300) or can be empty, but even when empty the parentheses are required. |
| |
| Each test result may include additional (multiline) log information in the |
| following format: |
| |
| .. code-block:: none |
| |
| <log delineator> TEST '(<test name>)' <trailing delineator> |
| ... log message ... |
| <log delineator> |
| |
| where ``<test name>`` should be the name of a preceding reported test, ``<log |
| delineator>`` is a string of "*" characters *at least* four characters long |
| (the recommended length is 20), and ``<trailing delineator>`` is an arbitrary |
| (unparsed) string. |
| |
| The following is an example of a test run output which consists of four tests A, |
| B, C, and D, and a log message for the failing test C: |
| |
| .. code-block:: none |
| |
| PASS: A (1 of 4) |
| PASS: B (2 of 4) |
| FAIL: C (3 of 4) |
| ******************** TEST 'C' FAILED ******************** |
| Test 'C' failed as a result of exit code 1. |
| ******************** |
| PASS: D (4 of 4) |
| |
| LIT EXAMPLE TESTS |
| ~~~~~~~~~~~~~~~~~ |
| |
| The :program:`lit` distribution contains several example implementations of |
| test suites in the *ExampleTests* directory. |
| |
| SEE ALSO |
| -------- |
| |
| valgrind(1) |