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         parent directory of %t (not unique, deprecated, do not use)
 %%         %
 ========== ==============

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)
