123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- .. _test_manifests:
- ==============
- Test Manifests
- ==============
- Many test suites have their test metadata defined in files called
- **test manifests**.
- Test manifests are divided into two flavors: :ref:`manifestparser_manifests`
- and :ref:`reftest_manifests`.
- Naming Convention
- =================
- The build system does not enforce file naming for test manifest files.
- However, the following convention is used.
- mochitest.ini
- For the *plain* flavor of mochitests.
- chrome.ini
- For the *chrome* flavor of mochitests.
- browser.ini
- For the *browser chrome* flavor of mochitests.
- a11y.ini
- For the *a11y* flavor of mochitests.
- xpcshell.ini
- For *xpcshell* tests.
- .. _manifestparser_manifests:
- ManifestParser Manifests
- ==========================
- ManifestParser manifests are essentially ini files that conform to a basic
- set of assumptions.
- The `reference documentation <http://mozbase.readthedocs.org/en/latest/manifestparser.html>`_
- for manifestparser manifests describes the basic format of test manifests.
- In summary, manifests are ini files with section names describing test files::
- [test_foo.js]
- [test_bar.js]
- Keys under sections can hold metadata about each test::
- [test_foo.js]
- skip-if = os == "win"
- [test_foo.js]
- skip-if = os == "linux" && debug
- [test_baz.js]
- fail-if = os == "mac" || os == "android"
- There is a special **DEFAULT** section whose keys/metadata apply to all
- sections/tests::
- [DEFAULT]
- property = value
- [test_foo.js]
- In the above example, **test_foo.js** inherits the metadata **property = value**
- from the **DEFAULT** section.
- Recognized Metadata
- -------------------
- Test manifests can define some common keys/metadata to influence behavior.
- Those keys are as follows:
- head
- List of files that will be executed before the test file. (Used in
- xpcshell tests.)
- tail
- List of files that will be executed after the test file. (Used in
- xpcshell tests.)
- support-files
- List of additional files required to run tests. This is typically
- defined in the **DEFAULT** section.
- Unlike other file lists, *support-files* supports a globbing mechanism
- to facilitate pulling in many files with minimal typing. This globbing
- mechanism is activated if an entry in this value contains a ``*``
- character. A single ``*`` will wildcard match all files in a directory.
- A double ``**`` will descend into child directories. For example,
- ``data/*`` will match ``data/foo`` but not ``data/subdir/bar`` where
- ``data/**`` will match ``data/foo`` and ``data/subdir/bar``.
- Support files starting with ``/`` are placed in a root directory, rather
- than a location determined by the manifest location. For mochitests,
- this allows for the placement of files at the server root. The source
- file is selected from the base name (e.g., ``foo`` for ``/path/foo``).
- Files starting with ``/`` cannot be selected using globbing.
- Some support files are used by tests across multiple directories. In
- this case, a test depending on a support file from another directory
- must note that dependency with the path to the required support file
- in its own **support-files** entry. These use a syntax where paths
- starting with ``!/`` will indicate the beginning of the path to a
- shared support file starting from the root of the srcdir. For example,
- if a manifest at ``dom/base/test/mochitest.ini`` has a support file,
- ``dom/base/test/server-script.sjs``, and a mochitest in
- ``dom/workers/test`` depends on that support file, the test manifest
- at ``dom/workers/test/mochitest.ini`` must include
- ``!/dom/base/test/server-script.sjs`` in its **support-files** entry.
- generated-files
- List of files that are generated as part of the build and don't exist in
- the source tree.
- The build system assumes that each manifest file, test file, and file
- listed in **head**, **tail**, and **support-files** is static and
- provided by the source tree (and not automatically generated as part
- of the build). This variable tells the build system not to make this
- assumption.
- This variable will likely go away sometime once all generated files are
- accounted for in the build config.
- If a generated file is not listed in this key, a clobber build will
- likely fail.
- dupe-manifest
- Record that this manifest duplicates another manifest.
- The common scenario is two manifest files will include a shared
- manifest file via the ``[include:file]`` special section. The build
- system enforces that each test file is only provided by a single
- manifest. Having this key present bypasses that check.
- The value of this key is ignored.
- skip-if
- Skip this test if the specified condition is true.
- See :ref:`manifest_filter_language`.
- fail-if
- Expect test failure if the specified condition is true.
- See :ref:`manifest_filter_language`.
- run-sequentially
- If present, the test should not be run in parallel with other tests.
- Some test harnesses support parallel test execution on separate processes
- and/or threads (behavior varies by test harness). If this key is present,
- the test harness should not attempt to run this test in parallel with any
- other test.
- By convention, the value of this key is a string describing why the test
- can't be run in parallel.
- .. _manifest_filter_language:
- Manifest Filter Language
- ------------------------
- Some manifest keys accept a special filter syntax as their values. These
- values are essentially boolean expressions that are evaluated at test
- execution time.
- The expressions can reference a well-defined set of variables, such as
- ``os`` and ``debug``. These variables are populated from the
- ``mozinfo.json`` file. For the full list of available variables, see
- the :ref:`mozinfo documentation <mozinfo_attributes>`.
- See
- `the source <https://hg.mozilla.org/mozilla-central/file/default/testing/mozbase/manifestparser/manifestparser/manifestparser.py>`_ for the full documentation of the
- expression syntax until it is documented here.
- .. todo::
- Document manifest filter language.
- .. _manifest_file_installation:
- File Installation
- -----------------
- Files referenced by manifests are automatically installed into the object
- directory into paths defined in
- :py:func:`mozbuild.frontend.emitter.TreeMetadataEmitter._process_test_manifest`.
- Relative paths resolving to parent directory (e.g.
- ``support-files = ../foo.txt`` have special behavior.
- For ``support-files``, the file will be installed to the default destination
- for that manifest. Only the file's base name is used to construct the final
- path: directories are irrelevant. Files starting with ``/`` are an exception,
- these are installed relative to the root of the destination; the base name is
- instead used to select the file..
- For all other entry types, the file installation is skipped.
- .. _reftest_manifests:
- Reftest Manifests
- =================
- See `MDN <https://developer.mozilla.org/en-US/docs/Creating_reftest-based_unit_tests>`_.
|