dc6abe87b418b59e106fa701e136f27958636f39
[miniexpect.git] / tests.h
1 /* miniexpect test suite
2  * Copyright (C) 2014-2022 Red Hat Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #ifndef TESTS_H_
20 #define TESTS_H_
21
22 #include <stdio.h>
23 #include <sys/wait.h>
24
25 static inline int
26 test_is_sighup (int status)
27 {
28   return WIFSIGNALED (status) && WTERMSIG (status) == SIGHUP;
29 }
30
31 static inline void
32 test_diagnose (int status)
33 {
34   if (WIFEXITED (status))
35     fprintf (stderr, "exited with code %d", WEXITSTATUS (status));
36   else if (WIFSIGNALED (status))
37     fprintf (stderr, "terminated by signal %d", WTERMSIG (status));
38   else if (WIFSTOPPED (status))
39     fprintf (stderr, "stopped by signal %d", WSTOPSIG (status));
40 }
41
42 __attribute__((__unused__))
43 static pcre2_code *
44 test_compile_re (const char *rex)
45 {
46   int errorcode;
47   PCRE2_SIZE erroroffset;
48   char errormsg[256];
49   pcre2_code *ret;
50
51   ret = pcre2_compile ((PCRE2_SPTR) rex, PCRE2_ZERO_TERMINATED,
52                        0, &errorcode, &erroroffset, NULL);
53   if (ret == NULL) {
54     pcre2_get_error_message (errorcode,
55                              (PCRE2_UCHAR *) errormsg, sizeof errormsg);
56     fprintf (stderr, "error: "
57              "failed to compile regular expression '%s': "
58              "%s at offset %zu\n",
59              rex, errormsg, erroroffset);
60     exit (EXIT_FAILURE);
61   }
62   return ret;
63 }
64
65 #endif /* TESTS_H_ */