/* * Copyright © 2013 Red Hat, Inc. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #include #include #include #include #include #include #include #include "test-common.h" extern Suite *event_name_suite(void); extern Suite *event_code_suite(void); extern Suite *libevdev_init_test(void); extern Suite *queue_suite(void); extern Suite *libevdev_has_event_test(void); extern Suite *libevdev_events(void); extern Suite *uinput_suite(void); static int is_debugger_attached(void) { int status; int rc; int pid = fork(); if (pid == -1) return 0; if (pid == 0) { int ppid = getppid(); if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) { waitpid(ppid, NULL, 0); ptrace(PTRACE_CONT, NULL, NULL); ptrace(PTRACE_DETACH, ppid, NULL, NULL); rc = 0; } else rc = 1; _exit(rc); } else { waitpid(pid, &status, 0); rc = WEXITSTATUS(status); } return rc; } int main(int argc, char **argv) { int failed; if (is_debugger_attached()) setenv("CK_FORK", "no", 0); libevdev_set_log_function(test_logfunc_abort_on_error, NULL); Suite *s = libevdev_has_event_test(); SRunner *sr = srunner_create(s); srunner_add_suite(sr, libevdev_events()); srunner_add_suite(sr, libevdev_init_test()); srunner_add_suite(sr, queue_suite()); srunner_add_suite(sr, event_name_suite()); srunner_add_suite(sr, event_code_suite()); srunner_add_suite(sr, uinput_suite()); srunner_run_all(sr, CK_NORMAL); failed = srunner_ntests_failed(sr); srunner_free(sr); return failed; }