You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			479 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			479 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 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.
 | |
|  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)
 |