tools: add a libinput test tool as entry point for our test suites

We already install libinput-test-suite if the meson option install-tests
is set, see
  commit be7045cdc7
  test: make the test suite runner available as installed binary

To make other tests easily available and more discoverable, add a new
tool "libinput test" with the matching man page. This will also help us
to enforce some of the namespacing a bit better.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2022-05-06 10:51:33 +10:00
parent d48c7e72f7
commit 43a8d769ac
5 changed files with 131 additions and 0 deletions

View file

@ -132,7 +132,9 @@ intended to be run by users.
%{_mandir}/man1/libinput-analyze-touch-down-state.1* %{_mandir}/man1/libinput-analyze-touch-down-state.1*
%files test %files test
%{_libexecdir}/libinput/libinput-test
%{_libexecdir}/libinput/libinput-test-suite %{_libexecdir}/libinput/libinput-test-suite
%{_mandir}/man1/libinput-test.1*
%{_mandir}/man1/libinput-test-suite.1* %{_mandir}/man1/libinput-test-suite.1*
%changelog %changelog

View file

@ -139,6 +139,8 @@ if not cc.has_header_symbol('sys/ptrace.h', 'PTRACE_ATTACH', prefix : prefix)
config_h.set('PTRACE_DETACH', 'PT_DETACH') config_h.set('PTRACE_DETACH', 'PT_DETACH')
endif endif
config_h.set10('HAVE_INSTALLED_TESTS', get_option('install-tests'))
# Dependencies # Dependencies
pkgconfig = import('pkgconfig') pkgconfig = import('pkgconfig')
dep_udev = dependency('libudev') dep_udev = dependency('libudev')
@ -697,6 +699,15 @@ if add_languages('cpp', required: false)
install : false) install : false)
endif endif
libinput_test_sources = [ 'tools/libinput-test.c' ]
executable('libinput-test',
libinput_test_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true,
)
# This is the test suite runner, we allow disabling that one because of # This is the test suite runner, we allow disabling that one because of
# dependencies # dependencies
if get_option('tests') if get_option('tests')
@ -954,6 +965,11 @@ endif
man_config = configuration_data() man_config = configuration_data()
man_config.set('LIBINPUT_VERSION', meson.project_version()) man_config.set('LIBINPUT_VERSION', meson.project_version())
man_config.set('LIBINPUT_DATA_DIR', dir_data) man_config.set('LIBINPUT_DATA_DIR', dir_data)
if get_option('install-tests')
man_config.set('HAVE_INSTALLED_TESTS', '.\"')
else
man_config.set('HAVE_INSTALLED_TESTS', '')
endif
src_man += files( src_man += files(
'tools/libinput.man', 'tools/libinput.man',
'tools/libinput-analyze.man', 'tools/libinput-analyze.man',
@ -972,6 +988,7 @@ src_man += files(
'tools/libinput-quirks.man', 'tools/libinput-quirks.man',
'tools/libinput-record.man', 'tools/libinput-record.man',
'tools/libinput-replay.man', 'tools/libinput-replay.man',
'tools/libinput-test.man',
) )
foreach m : src_man foreach m : src_man

76
tools/libinput-test.c Normal file
View file

@ -0,0 +1,76 @@
/*
* Copyright © 2017 Red Hat, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#include "config.h"
#include <getopt.h>
#include <stdio.h>
#include "shared.h"
static inline void
usage(void)
{
#if HAVE_INSTALLED_TESTS
printf("Usage: libinput test [--help] <feature>\n");
#else
fprintf(stderr, "libinput test was disabled in the build configuration\n");
#endif
}
int
main(int argc, char **argv)
{
int option_index = 0;
while (1) {
int c;
static struct option opts[] = {
{ "help", no_argument, 0, 'h' },
{ 0, 0, 0, 0}
};
c = getopt_long(argc, argv, "+h", opts, &option_index);
if (c == -1)
break;
switch(c) {
case 'h':
usage();
return EXIT_SUCCESS;
default:
usage();
return EXIT_FAILURE;
}
}
if (optind >= argc) {
usage();
return EXIT_FAILURE;
}
argc--;
argv++;
return tools_exec_command("libinput-test", argc, argv);
}

33
tools/libinput-test.man Normal file
View file

@ -0,0 +1,33 @@
.TH libinput-test "1" "" "libinput @LIBINPUT_VERSION@" "libinput Manual"
.SH NAME
libinput\-test \- test various components of libinput itself
.SH SYNOPSIS
.B libinput test [\-\-help] \fI<feature> [<args>]\fR
.SH DESCRIPTION
.PP
The
.B "libinput test"
tool runs tests against libinput itself. There is usually no need for a user
to use this tool, it is provided for distribution vendors.
@HAVE_INSTALLED_TESTS@.B This tool was disabled at build time!
.PP
This is a testing tool only, its output may change at any time. Do not
rely on the output.
.PP
This tool may need to be run as root to have access to the
/dev/input/eventX nodes and/or create /dev/uinput devices.
.SH OPTIONS
.TP 8
.B \-\-help
Print help
.SH FEATURES
Tests that can be run are
.TP 8
.B libinput\-test\-suite(1)
Run the full test suite. This is the most complete set of tests to run in
libinput.
.SH LIBINPUT
Part of the
.B libinput(1)
suite

View file

@ -56,6 +56,9 @@ Replay the events from a device
.TP 8 .TP 8
.B libinput\-analyze(1) .B libinput\-analyze(1)
Analyze events from a device Analyze events from a device
.TP 8
.B libinput\-test(1)
Test libinput itself.
.SH LIBINPUT .SH LIBINPUT
Part of the Part of the
.B libinput(1) .B libinput(1)