tizen 2.4 release
[framework/uifw/libevdev.git] / test / test-main.c
1 /*
2  * Copyright © 2013 Red Hat, Inc.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that copyright
7  * notice and this permission notice appear in supporting documentation, and
8  * that the name of the copyright holders not be used in advertising or
9  * publicity pertaining to distribution of the software without specific,
10  * written prior permission.  The copyright holders make no representations
11  * about the suitability of this software for any purpose.  It is provided "as
12  * is" without express or implied warranty.
13  *
14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20  * OF THIS SOFTWARE.
21  */
22
23 #include <config.h>
24 #include <check.h>
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <sys/ptrace.h>
28 #include <sys/wait.h>
29 #include <libevdev/libevdev.h>
30
31 #include "test-common.h"
32
33 extern Suite *event_name_suite(void);
34 extern Suite *event_code_suite(void);
35 extern Suite *libevdev_init_test(void);
36 extern Suite *queue_suite(void);
37 extern Suite *libevdev_has_event_test(void);
38 extern Suite *libevdev_events(void);
39 extern Suite *uinput_suite(void);
40
41 static int
42 is_debugger_attached(void)
43 {
44         int status;
45         int rc;
46         int pid = fork();
47
48         if (pid == -1)
49                 return 0;
50
51         if (pid == 0) {
52                 int ppid = getppid();
53                 if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) {
54                         waitpid(ppid, NULL, 0);
55                         ptrace(PTRACE_CONT, NULL, NULL);
56                         ptrace(PTRACE_DETACH, ppid, NULL, NULL);
57                         rc = 0;
58                 } else
59                         rc = 1;
60                 _exit(rc);
61         } else {
62                 waitpid(pid, &status, 0);
63                 rc = WEXITSTATUS(status);
64         }
65
66         return rc;
67 }
68
69 int main(int argc, char **argv)
70 {
71         int failed;
72
73         if (is_debugger_attached())
74                 setenv("CK_FORK", "no", 0);
75
76         libevdev_set_log_function(test_logfunc_abort_on_error, NULL);
77
78         Suite *s = libevdev_has_event_test();
79         SRunner *sr = srunner_create(s);
80         srunner_add_suite(sr, libevdev_events());
81         srunner_add_suite(sr, libevdev_init_test());
82         srunner_add_suite(sr, queue_suite());
83         srunner_add_suite(sr, event_name_suite());
84         srunner_add_suite(sr, event_code_suite());
85         srunner_add_suite(sr, uinput_suite());
86         srunner_run_all(sr, CK_NORMAL);
87
88         failed = srunner_ntests_failed(sr);
89         srunner_free(sr);
90
91         return failed;
92 }