libinput test suite

The libinput test suite is based on Check and runs automatically during make check.

Check itself is wrapped into a libinput-specific test suite called litest. Tests are found in $srcdir/test/, the main test suite is libinput-test-suite-runner.

The test suite has a make-like job control enabled by the -j or --jobs flag and will fork off as many parallel processes as given by this flag. The default if unspecified is 8. When debugging a specific test case failure it is recommended to employ test filtures (see Selective running of tests) and disable parallel tests. The test suite automatically disables parallel make when run in gdb.

X.Org config to avoid interference

uinput devices created by the test suite are usually recognised by X as input devices. All events sent through these devices will generate X events and interfere with your desktop.

Copy the file $srcdir/test/50-litest.conf into your /etc/X11/xorg.conf.d and restart X. This will ignore any litest devices and thus not interfere with your desktop.

Permissions required to run tests

Most tests require the creation of uinput devices and access to the resulting /dev/input/eventX nodes. Some tests require temporary udev rules. This usually requires the tests to be run as root.

Selective running of tests

litest's tests are grouped by test groups and devices. A test group is e.g. "touchpad:tap" and incorporates all tapping-related tests for touchpads. Each test function is (usually) run with one or more specific devices. The --list commandline argument shows the list of suites and tests.

$ ./test/libinput-test-suite-runner --list
wheel only
device:invalid devices:
no device
no device
logitech trackball
MS surface cover
wheel only

In the above example, the "device:wheel" suite is run for the "wheel only" and the "blackwidow" device. Both devices are automatically instantiated through uinput by litest. The "no device" entry signals that litest does not instantiate a uinput device for a specific test (though the test itself may instantiate one).

The --filter-test argument enables selective running of tests through basic shell-style function name matching. For example:

$ ./test/libinput-test-suite-runner --filter-test="*1fg_tap*"

The --filter-device argument enables selective running of tests through basic shell-style device name matching. The device names matched are the litest-specific shortnames, see the output of --list. For example:

$ ./test/libinput-test-suite-runner --filter-device="synaptics*"

The --filter-group argument enables selective running of test groups through basic shell-style test group matching. The test groups matched are litest-specific test groups, see the output of --list. For example:

$ ./test/libinput-test-suite-runner --filter-group="touchpad:*hover*"

The --filter-device and --filter-group arguments can be combined with --list to show which groups and devices will be affected.

Controlling test output

Each test supports the --verbose commandline option to enable debugging output, see libinput_log_set_priority() for details. The LITEST_VERBOSE environment variable, if set, also enables verbose mode.

$ ./test/libinput-test-suite-runner --verbose
$ LITEST_VERBOSE=1 make check