tools: add a libinput test tool as entry point for our test suites
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 6 May 2022 00:51:33 +0000 (10:51 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 9 May 2022 05:03:00 +0000 (05:03 +0000)
We already install libinput-test-suite if the meson option install-tests
is set, see
  commit be7045cdc70d8c026d981997852cc706dab3d5b8
  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>
.gitlab-ci/libinput.spec.in
meson.build
tools/libinput-test.c [new file with mode: 0644]
tools/libinput-test.man [new file with mode: 0644]
tools/libinput.man

index 5b5f0a0..61f440f 100644 (file)
@@ -132,7 +132,9 @@ intended to be run by users.
 %{_mandir}/man1/libinput-analyze-touch-down-state.1*
 
 %files test
+%{_libexecdir}/libinput/libinput-test
 %{_libexecdir}/libinput/libinput-test-suite
+%{_mandir}/man1/libinput-test.1*
 %{_mandir}/man1/libinput-test-suite.1*
 
 %changelog
index 1407aac..c4e01d2 100644 (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')
 endif
 
+config_h.set10('HAVE_INSTALLED_TESTS', get_option('install-tests'))
+
 # Dependencies
 pkgconfig = import('pkgconfig')
 dep_udev = dependency('libudev')
@@ -697,6 +699,15 @@ if add_languages('cpp', required: false)
                   install : false)
 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
 # dependencies
 if get_option('tests')
@@ -954,6 +965,11 @@ endif
 man_config = configuration_data()
 man_config.set('LIBINPUT_VERSION', meson.project_version())
 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(
        'tools/libinput.man',
        'tools/libinput-analyze.man',
@@ -972,6 +988,7 @@ src_man += files(
        'tools/libinput-quirks.man',
        'tools/libinput-record.man',
        'tools/libinput-replay.man',
+       'tools/libinput-test.man',
 )
 
 foreach m : src_man
diff --git a/tools/libinput-test.c b/tools/libinput-test.c
new file mode 100644 (file)
index 0000000..aff6d56
--- /dev/null
@@ -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);
+}
diff --git a/tools/libinput-test.man b/tools/libinput-test.man
new file mode 100644 (file)
index 0000000..491a7ec
--- /dev/null
@@ -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
index 7c09dd0..effe763 100644 (file)
@@ -56,6 +56,9 @@ Replay the events from a device
 .TP 8
 .B libinput\-analyze(1)
 Analyze events from a device
+.TP 8
+.B libinput\-test(1)
+Test libinput itself.
 .SH LIBINPUT
 Part of the
 .B libinput(1)