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