1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  *  Copyright (C) 2007-2014  Kouhei Sutou <kou@clear-code.com>
4  *
5  *  This library is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Lesser General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef __CUT_PUBLIC_H__
21 #define __CUT_PUBLIC_H__
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include <cutter/cut-config.h>
28 
29 #include <stdarg.h>
30 #include <stdlib.h>
31 #include <setjmp.h>
32 #ifdef CUT_HAVE_INTTYPES_H
33 #  include <inttypes.h>
34 #elif defined(CUT_HAVE_STDINT_H)
35 #  include <stdint.h>
36 #endif
37 
38 #ifndef CUT_DISABLE_SOCKET_SUPPORT
39 #  ifdef CUT_HAVE_WINSOCK2_H
40 #    include <winsock2.h>
41 #    include <ws2tcpip.h>
42 #  else
43 #    include <sys/socket.h>
44 #    ifdef CUT_HAVE_SYS_UN_H
45 #      include <sys/un.h>
46 #    endif
47 #  endif
48 #endif
49 
50 #include <cutter/cut-types.h>
51 #include <cutter/cut-macros.h>
52 #include <cutter/cut-multi-process.h>
53 
54 typedef struct _CutTestContext     CutTestContext;
55 
56 typedef enum {
57     CUT_TEST_RESULT_INVALID = -1,
58     CUT_TEST_RESULT_SUCCESS,
59     CUT_TEST_RESULT_NOTIFICATION,
60     CUT_TEST_RESULT_OMISSION,
61     CUT_TEST_RESULT_PENDING,
62     CUT_TEST_RESULT_FAILURE,
63     CUT_TEST_RESULT_ERROR,
64     CUT_TEST_RESULT_CRASH,
65     CUT_TEST_RESULT_LAST
66 } CutTestResultStatus;
67 
68 void            cut_test_context_current_push(CutTestContext *context);
69 CutTestContext *cut_test_context_current_pop (void);
70 CutTestContext *cut_test_context_current_peek(void);
71 
72 void  cut_test_context_keep_user_message    (CutTestContext *context);
73 void  cut_test_context_set_user_message     (CutTestContext *context,
74                                              const char *format,
75                                              ...) CUT_GNUC_PRINTF(2, 3);
76 void  cut_test_context_set_user_message_backward_compatibility
77                                             (CutTestContext *context,
78                                              const char *format,
79                                              ...);
80 void  cut_test_context_set_user_message_va_list
81                                             (CutTestContext *context,
82                                              const char *format,
83                                              va_list args);
84 void  cut_test_context_check_optional_assertion_message
85                                             (CutTestContext *context);
86 void  cut_test_context_set_expected         (CutTestContext *context,
87                                              const char *expected);
88 void  cut_test_context_set_actual           (CutTestContext *context,
89                                              const char *actual);
90 void  cut_test_context_pass_assertion       (CutTestContext *context);
91 void  cut_test_context_set_current_result   (CutTestContext *context,
92                                              CutTestResultStatus status,
93                                              const char *system_message);
94 void  cut_test_context_set_current_result_user_message
95                                             (CutTestContext *context,
96                                              const char *user_message);
97 void  cut_test_context_process_current_result
98                                             (CutTestContext *context);
99 cut_boolean
100       cut_test_context_get_have_current_result
101                                             (CutTestContext *context);
102 void  cut_test_context_register_result      (CutTestContext *context,
103                                              CutTestResultStatus status,
104                                              const char *system_message);
105 void         cut_test_context_start_user_message_jump
106                                             (CutTestContext *context);
107 void         cut_test_context_finish_user_message_jump
108                                             (CutTestContext *context);
109 cut_boolean  cut_test_context_in_user_message_jump
110                                             (CutTestContext *context);
111 void         cut_test_context_set_jump_buffer
112                                             (CutTestContext *context,
113                                              jmp_buf        *buffer);
114 jmp_buf     *cut_test_context_get_jump_buffer
115                                             (CutTestContext *context);
116 void         cut_test_context_long_jump     (CutTestContext *context);
117 
118 const void *cut_test_context_take           (CutTestContext *context,
119                                              void           *object,
120                                              CutDestroyFunction destroy_function);
121 const void *cut_test_context_take_memory    (CutTestContext *context,
122                                              void           *memory);
123 const char *cut_test_context_take_string    (CutTestContext *context,
124                                              char           *string);
125 const char *cut_test_context_take_strdup    (CutTestContext *context,
126                                              const char     *string);
127 const char *cut_test_context_take_strndup   (CutTestContext *context,
128                                              const char     *string,
129                                              size_t          size);
130 const void *cut_test_context_take_memdup    (CutTestContext *context,
131                                              const void     *memory,
132                                              size_t          size);
133 const char *cut_test_context_take_printf    (CutTestContext *context,
134                                              const char     *format,
135                                              ...) CUT_GNUC_PRINTF(2, 3);
136 const char **cut_test_context_take_string_array
137                                             (CutTestContext *context,
138                                              char          **strings);
139 
140 char        *cut_utils_inspect_memory       (const void *memory,
141                                              size_t      size);
142 
143 cut_boolean  cut_utils_equal_string         (const char *string1,
144                                              const char *string2);
145 cut_boolean  cut_utils_equal_substring      (const char *string1,
146                                              const char *string2,
147                                              size_t      length);
148 cut_boolean  cut_utils_equal_double         (double double1,
149                                              double double2,
150                                              double error);
151 cut_boolean  cut_utils_equal_string_array   (char **strings1,
152                                              char **strings2);
153 char        *cut_utils_inspect_string_array (char **strings);
154 char        *cut_utils_inspect_string       (const char *string);
155 
156 #ifndef CUT_DISABLE_SOCKET_SUPPORT
157 cut_boolean  cut_utils_equal_sockaddr       (const struct sockaddr *address1,
158                                              const struct sockaddr *address2);
159 char        *cut_utils_inspect_sockaddr     (const struct sockaddr *address);
160 #endif
161 
162 cut_boolean  cut_utils_path_exist           (const char *path);
163 char        *cut_utils_build_path           (const char *path,
164                                              ...) CUT_GNUC_NULL_TERMINATED;
165 char        *cut_utils_build_path_va_list   (const char *path,
166                                              va_list args);
167 char        *cut_utils_build_path_array     (const char **paths);
168 void         cut_utils_remove_path_recursive_force
169                                             (const char *path);
170 void         cut_utils_make_directory_recursive_force
171                                             (const char *path);
172 cut_boolean  cut_utils_regex_match          (const char *pattern,
173                                              const char *string);
174 char        *cut_utils_fold                 (const char *string);
175 char        *cut_utils_append_diff          (const char *message,
176                                              const char *from,
177                                              const char *to);
178 
179 const char *cut_test_context_build_fixture_path
180                                             (CutTestContext *context,
181                                              const char     *path,
182                                              ...) CUT_GNUC_NULL_TERMINATED;
183 
184 const char *cut_utils_get_fixture_data      (CutTestContext *context,
185                                              const char **fixture_path,
186                                              size_t *size,
187                                              const char *path,
188                                              ...) CUT_GNUC_NULL_TERMINATED;
189 const char *cut_utils_get_fixture_data_va_list
190                                             (CutTestContext *context,
191                                              const char **fixture_path,
192                                              size_t *size,
193                                              const char *path,
194                                              va_list args);
195 
196 void  cut_test_context_add_data             (CutTestContext *context,
197                                              const char     *first_data_name,
198                                              ...) CUT_GNUC_NULL_TERMINATED;
199 
200 void  cut_test_context_set_attributes       (CutTestContext *context,
201                                              const char     *first_attribute_name,
202                                              ...) CUT_GNUC_NULL_TERMINATED;
203 
204 int   cut_test_context_trap_fork            (CutTestContext *context);
205 int   cut_test_context_wait_process         (CutTestContext *context,
206                                              int             pid,
207                                              unsigned int    usec_timeout);
208 const char *cut_test_context_get_forked_stdout_message
209                                             (CutTestContext *context,
210                                              int             pid);
211 const char *cut_test_context_get_forked_stderr_message
212                                             (CutTestContext *context,
213                                              int             pid);
214 
215 void  cut_test_context_set_fixture_data_dir (CutTestContext *context,
216                                              const char     *path,
217                                              ...) CUT_GNUC_NULL_TERMINATED;
218 
219 void        cut_test_context_push_backtrace (CutTestContext *context,
220                                              const char     *relative_path,
221                                              const char     *file_name,
222                                              unsigned int    line,
223                                              const char     *function_name,
224                                              const char     *info);
225 void        cut_test_context_pop_backtrace  (CutTestContext *context);
226 void        cut_test_context_get_last_backtrace
227                                             (CutTestContext *context,
228                                              const char    **filename,
229                                              unsigned int   *line,
230                                              const char    **function_name,
231                                              const char    **info);
232 
233 char       *cut_diff_readable               (const char     *from,
234                                              const char     *to);
235 char       *cut_diff_readable_folded        (const char     *from,
236                                              const char     *to);
237 char       *cut_diff_unified                (const char     *from,
238                                              const char     *to,
239                                              const char     *from_label,
240                                              const char     *to_label);
241 
242 CutSubProcess *cut_utils_take_new_sub_process     (const char     *test_directory,
243                                                    CutTestContext *test_context);
244 
245 CutSubProcessGroup *cut_utils_take_new_sub_process_group (CutTestContext *test_context);
246 
247 #ifdef __cplusplus
248 }
249 #endif
250 
251 #endif /* __CUT_PUBLIC_H__ */
252 
253 /*
254 vi:ts=4:nowrap:ai:expandtab:sw=4
255 */
256