Skip to content

Test Selectors

Functions like ert accept a test selector, a Lisp expression specifying a set of tests. Test selector syntax is similar to Common Lisp’s type specifier syntax:

  • nil selects no tests.
  • t selects all tests.
  • :new selects all tests that have not been run yet.
  • :failed and :passed select tests according to their most recent result.
  • :expected, :unexpected select tests according to their most recent result.
  • A string is a regular expression that selects all tests with matching names.
  • A test (i.e., an object of ert-test data type, see its doc string for details) selects that test.
  • A symbol selects the test that the symbol names.
  • (member tests...) selects the elements of tests, a list of tests or symbols naming tests.
  • (eql test) selects test, a test or a symbol naming a test.
  • (and selectors…) selects the tests that match all selectors.
  • (or selectors…) selects the tests that match any of the selectors.
  • (not selector) selects all tests that do not match selector.
  • (tag tag) selects all tests that have tag on their tags list. (Tags are optional labels you can apply to tests when you define them.)
  • (satisfies predicate) selects all tests that satisfy predicate, a function that takes a test as argument and returns non-nil if it is selected.

Selectors that are frequently useful when selecting tests to run include t to run all tests that are currently defined in Emacs, "^foo-" to run all tests in package foo (this assumes that package foo uses the prefix foo- for its test names), result-based selectors such as (or :new :unexpected) to run all tests that have either not run yet or that had an unexpected result in the last run, and tag-based selectors such as (not (tag :causes-redisplay)) to run all tests that are not tagged :causes-redisplay.