Previous: Running Tests in Batch Mode, Up: How to Run Tests [Contents]

### 2.3 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) 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 SELECTOR.
- `(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`.

Previous: Running Tests in Batch Mode, Up: How to Run Tests [Contents]