00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef CMOCKA_H_
00017 #define CMOCKA_H_
00018
00019 #ifdef _WIN32
00020 # ifdef _MSC_VER
00021
00022 #define __func__ __FUNCTION__
00023
00024 # ifndef inline
00025 #define inline __inline
00026 # endif
00027
00028 # if _MSC_VER < 1500
00029 # ifdef __cplusplus
00030 extern "C" {
00031 # endif
00032 int __stdcall IsDebuggerPresent();
00033 # ifdef __cplusplus
00034 }
00035 # endif
00036 # endif
00037 # endif
00038 #endif
00039
00057
00058 #ifndef __WORDSIZE
00059 # if defined(__x86_64__) && !defined(__ILP32__)
00060 # define __WORDSIZE 64
00061 # else
00062 # define __WORDSIZE 32
00063 # endif
00064 #endif
00065
00066 #ifdef DOXYGEN
00067
00071 typedef uintmax_t LargestIntegralType;
00072 #else
00073 #ifndef LargestIntegralType
00074 # if __WORDSIZE == 64
00075 # define LargestIntegralType unsigned long int
00076 # else
00077 # define LargestIntegralType unsigned long long int
00078 # endif
00079 #endif
00080 #endif
00081
00082
00083 #ifndef LargestIntegralTypePrintfFormat
00084 # ifdef _WIN32
00085 # define LargestIntegralTypePrintfFormat "0x%I64x"
00086 # else
00087 # if __WORDSIZE == 64
00088 # define LargestIntegralTypePrintfFormat "%#lx"
00089 # else
00090 # define LargestIntegralTypePrintfFormat "%#llx"
00091 # endif
00092 # endif
00093 #endif
00094
00095
00096 #ifndef LargestIntegralTypePrintfFormatDecimal
00097 # ifdef _WIN32
00098 # define LargestIntegralTypePrintfFormatDecimal "%I64u"
00099 # else
00100 # if __WORDSIZE == 64
00101 # define LargestIntegralTypePrintfFormatDecimal "%lu"
00102 # else
00103 # define LargestIntegralTypePrintfFormatDecimal "%llu"
00104 # endif
00105 # endif
00106 #endif
00107
00108
00109 #define cast_to_largest_integral_type(value) \
00110 ((LargestIntegralType)(value))
00111
00112
00113 #if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED)
00114 # if defined(_WIN32)
00115
00116 typedef unsigned int uintptr_t;
00117 # elif defined(_WIN64)
00118 typedef unsigned long int uintptr_t
00119 # else
00120
00121
00122 # ifdef __WORDSIZE
00123 # if __WORDSIZE == 64
00124 typedef unsigned long int uintptr_t;
00125 # else
00126 typedef unsigned int uintptr_t;
00127 # endif
00128 # else
00129 # if defined(_LP64) || defined(_I32LPx)
00130 typedef unsigned long int uintptr_t;
00131 # else
00132 typedef unsigned int uintptr_t;
00133 # endif
00134 # endif
00135 # endif
00136
00137 # define _UINTPTR_T
00138 # define _UINTPTR_T_DEFINED
00139 #endif
00140
00141
00142 #define cast_to_pointer_integral_type(value) \
00143 ((uintptr_t)((size_t)(value)))
00144
00145
00146 #define cast_ptr_to_largest_integral_type(value) \
00147 cast_to_largest_integral_type(cast_to_pointer_integral_type(value))
00148
00149
00150 #ifdef __GNUC__
00151 #define CMOCKA_PRINTF_ATTRIBUTE(a,b) \
00152 __attribute__ ((__format__ (__printf__, a, b)))
00153 #else
00154 #define CMOCKA_PRINTF_ATTRIBUTE(a,b)
00155 #endif
00156
00157 #if defined(__GNUC__)
00158 #define CMOCKA_DEPRECATED __attribute__ ((deprecated))
00159 #elif defined(_MSC_VER)
00160 #define CMOCKA_DEPRECATED __declspec(deprecated)
00161 #else
00162 #define CMOCKA_DEPRECATED
00163 #endif
00164
00165 #define WILL_RETURN_ALWAYS -1
00166 #define WILL_RETURN_ONCE -2
00167
00216 #ifdef DOXYGEN
00217
00224 LargestIntegralType mock(void);
00225 #else
00226 #define mock() _mock(__func__, __FILE__, __LINE__)
00227 #endif
00228
00229 #ifdef DOXYGEN
00230
00250 #type mock_type(#type);
00251 #else
00252 #define mock_type(type) ((type) mock())
00253 #endif
00254
00255 #ifdef DOXYGEN
00256
00277 type mock_ptr_type(#type);
00278 #else
00279 #define mock_ptr_type(type) ((type) (uintptr_t) mock())
00280 #endif
00281
00282
00283 #ifdef DOXYGEN
00284
00308 void will_return(#function, LargestIntegralType value);
00309 #else
00310 #define will_return(function, value) \
00311 _will_return(#function, __FILE__, __LINE__, \
00312 cast_to_largest_integral_type(value), 1)
00313 #endif
00314
00315 #ifdef DOXYGEN
00316
00331 void will_return_count(#function, LargestIntegralType value, int count);
00332 #else
00333 #define will_return_count(function, value, count) \
00334 _will_return(#function, __FILE__, __LINE__, \
00335 cast_to_largest_integral_type(value), count)
00336 #endif
00337
00338 #ifdef DOXYGEN
00339
00354 void will_return_always(#function, LargestIntegralType value);
00355 #else
00356 #define will_return_always(function, value) \
00357 will_return_count(function, (value), WILL_RETURN_ALWAYS)
00358 #endif
00359
00360 #ifdef DOXYGEN
00361
00382 void will_return_maybe(#function, LargestIntegralType value);
00383 #else
00384 #define will_return_maybe(function, value) \
00385 will_return_count(function, (value), WILL_RETURN_ONCE)
00386 #endif
00387
00433
00434
00435
00436
00437
00438
00439 #ifdef DOXYGEN
00440
00456 void expect_check(#function, #parameter, #check_function, const void *check_data);
00457 #else
00458 #define expect_check(function, parameter, check_function, check_data) \
00459 _expect_check(#function, #parameter, __FILE__, __LINE__, check_function, \
00460 cast_to_largest_integral_type(check_data), NULL, 1)
00461 #endif
00462
00463 #ifdef DOXYGEN
00464
00478 void expect_in_set(#function, #parameter, LargestIntegralType value_array[]);
00479 #else
00480 #define expect_in_set(function, parameter, value_array) \
00481 expect_in_set_count(function, parameter, value_array, 1)
00482 #endif
00483
00484 #ifdef DOXYGEN
00485
00503 void expect_in_set_count(#function, #parameter, LargestIntegralType value_array[], size_t count);
00504 #else
00505 #define expect_in_set_count(function, parameter, value_array, count) \
00506 _expect_in_set(#function, #parameter, __FILE__, __LINE__, value_array, \
00507 sizeof(value_array) / sizeof((value_array)[0]), count)
00508 #endif
00509
00510 #ifdef DOXYGEN
00511
00525 void expect_not_in_set(#function, #parameter, LargestIntegralType value_array[]);
00526 #else
00527 #define expect_not_in_set(function, parameter, value_array) \
00528 expect_not_in_set_count(function, parameter, value_array, 1)
00529 #endif
00530
00531 #ifdef DOXYGEN
00532
00550 void expect_not_in_set_count(#function, #parameter, LargestIntegralType value_array[], size_t count);
00551 #else
00552 #define expect_not_in_set_count(function, parameter, value_array, count) \
00553 _expect_not_in_set( \
00554 #function, #parameter, __FILE__, __LINE__, value_array, \
00555 sizeof(value_array) / sizeof((value_array)[0]), count)
00556 #endif
00557
00558
00559 #ifdef DOXYGEN
00560
00576 void expect_in_range(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum);
00577 #else
00578 #define expect_in_range(function, parameter, minimum, maximum) \
00579 expect_in_range_count(function, parameter, minimum, maximum, 1)
00580 #endif
00581
00582 #ifdef DOXYGEN
00583
00603 void expect_in_range_count(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum, size_t count);
00604 #else
00605 #define expect_in_range_count(function, parameter, minimum, maximum, count) \
00606 _expect_in_range(#function, #parameter, __FILE__, __LINE__, minimum, \
00607 maximum, count)
00608 #endif
00609
00610 #ifdef DOXYGEN
00611
00627 void expect_not_in_range(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum);
00628 #else
00629 #define expect_not_in_range(function, parameter, minimum, maximum) \
00630 expect_not_in_range_count(function, parameter, minimum, maximum, 1)
00631 #endif
00632
00633 #ifdef DOXYGEN
00634
00654 void expect_not_in_range_count(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum, size_t count);
00655 #else
00656 #define expect_not_in_range_count(function, parameter, minimum, maximum, \
00657 count) \
00658 _expect_not_in_range(#function, #parameter, __FILE__, __LINE__, \
00659 minimum, maximum, count)
00660 #endif
00661
00662 #ifdef DOXYGEN
00663
00676 void expect_value(#function, #parameter, LargestIntegralType value);
00677 #else
00678 #define expect_value(function, parameter, value) \
00679 expect_value_count(function, parameter, value, 1)
00680 #endif
00681
00682 #ifdef DOXYGEN
00683
00700 void expect_value_count(#function, #parameter, LargestIntegralType value, size_t count);
00701 #else
00702 #define expect_value_count(function, parameter, value, count) \
00703 _expect_value(#function, #parameter, __FILE__, __LINE__, \
00704 cast_to_largest_integral_type(value), count)
00705 #endif
00706
00707 #ifdef DOXYGEN
00708
00721 void expect_not_value(#function, #parameter, LargestIntegralType value);
00722 #else
00723 #define expect_not_value(function, parameter, value) \
00724 expect_not_value_count(function, parameter, value, 1)
00725 #endif
00726
00727 #ifdef DOXYGEN
00728
00745 void expect_not_value_count(#function, #parameter, LargestIntegralType value, size_t count);
00746 #else
00747 #define expect_not_value_count(function, parameter, value, count) \
00748 _expect_not_value(#function, #parameter, __FILE__, __LINE__, \
00749 cast_to_largest_integral_type(value), count)
00750 #endif
00751
00752 #ifdef DOXYGEN
00753
00767 void expect_string(#function, #parameter, const char *string);
00768 #else
00769 #define expect_string(function, parameter, string) \
00770 expect_string_count(function, parameter, string, 1)
00771 #endif
00772
00773 #ifdef DOXYGEN
00774
00792 void expect_string_count(#function, #parameter, const char *string, size_t count);
00793 #else
00794 #define expect_string_count(function, parameter, string, count) \
00795 _expect_string(#function, #parameter, __FILE__, __LINE__, \
00796 (const char*)(string), count)
00797 #endif
00798
00799 #ifdef DOXYGEN
00800
00814 void expect_not_string(#function, #parameter, const char *string);
00815 #else
00816 #define expect_not_string(function, parameter, string) \
00817 expect_not_string_count(function, parameter, string, 1)
00818 #endif
00819
00820 #ifdef DOXYGEN
00821
00839 void expect_not_string_count(#function, #parameter, const char *string, size_t count);
00840 #else
00841 #define expect_not_string_count(function, parameter, string, count) \
00842 _expect_not_string(#function, #parameter, __FILE__, __LINE__, \
00843 (const char*)(string), count)
00844 #endif
00845
00846 #ifdef DOXYGEN
00847
00862 void expect_memory(#function, #parameter, void *memory, size_t size);
00863 #else
00864 #define expect_memory(function, parameter, memory, size) \
00865 expect_memory_count(function, parameter, memory, size, 1)
00866 #endif
00867
00868 #ifdef DOXYGEN
00869
00889 void expect_memory_count(#function, #parameter, void *memory, size_t size, size_t count);
00890 #else
00891 #define expect_memory_count(function, parameter, memory, size, count) \
00892 _expect_memory(#function, #parameter, __FILE__, __LINE__, \
00893 (const void*)(memory), size, count)
00894 #endif
00895
00896 #ifdef DOXYGEN
00897
00913 void expect_not_memory(#function, #parameter, void *memory, size_t size);
00914 #else
00915 #define expect_not_memory(function, parameter, memory, size) \
00916 expect_not_memory_count(function, parameter, memory, size, 1)
00917 #endif
00918
00919 #ifdef DOXYGEN
00920
00940 void expect_not_memory_count(#function, #parameter, void *memory, size_t size, size_t count);
00941 #else
00942 #define expect_not_memory_count(function, parameter, memory, size, count) \
00943 _expect_not_memory(#function, #parameter, __FILE__, __LINE__, \
00944 (const void*)(memory), size, count)
00945 #endif
00946
00947
00948 #ifdef DOXYGEN
00949
00960 void expect_any(#function, #parameter);
00961 #else
00962 #define expect_any(function, parameter) \
00963 expect_any_count(function, parameter, 1)
00964 #endif
00965
00966 #ifdef DOXYGEN
00967
00983 void expect_any_count(#function, #parameter, size_t count);
00984 #else
00985 #define expect_any_count(function, parameter, count) \
00986 _expect_any(#function, #parameter, __FILE__, __LINE__, count)
00987 #endif
00988
00989 #ifdef DOXYGEN
00990
01000 void check_expected(#parameter);
01001 #else
01002 #define check_expected(parameter) \
01003 _check_expected(__func__, #parameter, __FILE__, __LINE__, \
01004 cast_to_largest_integral_type(parameter))
01005 #endif
01006
01007 #ifdef DOXYGEN
01008
01018 void check_expected_ptr(#parameter);
01019 #else
01020 #define check_expected_ptr(parameter) \
01021 _check_expected(__func__, #parameter, __FILE__, __LINE__, \
01022 cast_ptr_to_largest_integral_type(parameter))
01023 #endif
01024
01046 #ifdef DOXYGEN
01047
01059 void assert_true(scalar expression);
01060 #else
01061 #define assert_true(c) _assert_true(cast_to_largest_integral_type(c), #c, \
01062 __FILE__, __LINE__)
01063 #endif
01064
01065 #ifdef DOXYGEN
01066
01077 void assert_false(scalar expression);
01078 #else
01079 #define assert_false(c) _assert_true(!(cast_to_largest_integral_type(c)), #c, \
01080 __FILE__, __LINE__)
01081 #endif
01082
01083 #ifdef DOXYGEN
01084
01096 void assert_return_code(int rc, int error);
01097 #else
01098 #define assert_return_code(rc, error) \
01099 _assert_return_code(cast_to_largest_integral_type(rc), \
01100 sizeof(rc), \
01101 cast_to_largest_integral_type(error), \
01102 #rc, __FILE__, __LINE__)
01103 #endif
01104
01105 #ifdef DOXYGEN
01106
01116 void assert_non_null(void *pointer);
01117 #else
01118 #define assert_non_null(c) _assert_true(cast_ptr_to_largest_integral_type(c), #c, \
01119 __FILE__, __LINE__)
01120 #endif
01121
01122 #ifdef DOXYGEN
01123
01133 void assert_null(void *pointer);
01134 #else
01135 #define assert_null(c) _assert_true(!(cast_ptr_to_largest_integral_type(c)), #c, \
01136 __FILE__, __LINE__)
01137 #endif
01138
01139 #ifdef DOXYGEN
01140
01150 void assert_ptr_equal(void *a, void *b);
01151 #else
01152 #define assert_ptr_equal(a, b) \
01153 _assert_int_equal(cast_ptr_to_largest_integral_type(a), \
01154 cast_ptr_to_largest_integral_type(b), \
01155 __FILE__, __LINE__)
01156 #endif
01157
01158 #ifdef DOXYGEN
01159
01169 void assert_ptr_not_equal(void *a, void *b);
01170 #else
01171 #define assert_ptr_not_equal(a, b) \
01172 _assert_int_not_equal(cast_ptr_to_largest_integral_type(a), \
01173 cast_ptr_to_largest_integral_type(b), \
01174 __FILE__, __LINE__)
01175 #endif
01176
01177 #ifdef DOXYGEN
01178
01188 void assert_int_equal(int a, int b);
01189 #else
01190 #define assert_int_equal(a, b) \
01191 _assert_int_equal(cast_to_largest_integral_type(a), \
01192 cast_to_largest_integral_type(b), \
01193 __FILE__, __LINE__)
01194 #endif
01195
01196 #ifdef DOXYGEN
01197
01209 void assert_int_not_equal(int a, int b);
01210 #else
01211 #define assert_int_not_equal(a, b) \
01212 _assert_int_not_equal(cast_to_largest_integral_type(a), \
01213 cast_to_largest_integral_type(b), \
01214 __FILE__, __LINE__)
01215 #endif
01216
01217 #ifdef DOXYGEN
01218
01228 void assert_string_equal(const char *a, const char *b);
01229 #else
01230 #define assert_string_equal(a, b) \
01231 _assert_string_equal((const char*)(a), (const char*)(b), __FILE__, \
01232 __LINE__)
01233 #endif
01234
01235 #ifdef DOXYGEN
01236
01246 void assert_string_not_equal(const char *a, const char *b);
01247 #else
01248 #define assert_string_not_equal(a, b) \
01249 _assert_string_not_equal((const char*)(a), (const char*)(b), __FILE__, \
01250 __LINE__)
01251 #endif
01252
01253 #ifdef DOXYGEN
01254
01268 void assert_memory_equal(const void *a, const void *b, size_t size);
01269 #else
01270 #define assert_memory_equal(a, b, size) \
01271 _assert_memory_equal((const void*)(a), (const void*)(b), size, __FILE__, \
01272 __LINE__)
01273 #endif
01274
01275 #ifdef DOXYGEN
01276
01290 void assert_memory_not_equal(const void *a, const void *b, size_t size);
01291 #else
01292 #define assert_memory_not_equal(a, b, size) \
01293 _assert_memory_not_equal((const void*)(a), (const void*)(b), size, \
01294 __FILE__, __LINE__)
01295 #endif
01296
01297 #ifdef DOXYGEN
01298
01311 void assert_in_range(LargestIntegralType value, LargestIntegralType minimum, LargestIntegralType maximum);
01312 #else
01313 #define assert_in_range(value, minimum, maximum) \
01314 _assert_in_range( \
01315 cast_to_largest_integral_type(value), \
01316 cast_to_largest_integral_type(minimum), \
01317 cast_to_largest_integral_type(maximum), __FILE__, __LINE__)
01318 #endif
01319
01320 #ifdef DOXYGEN
01321
01334 void assert_not_in_range(LargestIntegralType value, LargestIntegralType minimum, LargestIntegralType maximum);
01335 #else
01336 #define assert_not_in_range(value, minimum, maximum) \
01337 _assert_not_in_range( \
01338 cast_to_largest_integral_type(value), \
01339 cast_to_largest_integral_type(minimum), \
01340 cast_to_largest_integral_type(maximum), __FILE__, __LINE__)
01341 #endif
01342
01343 #ifdef DOXYGEN
01344
01356 void assert_in_set(LargestIntegralType value, LargestIntegralType values[], size_t count);
01357 #else
01358 #define assert_in_set(value, values, number_of_values) \
01359 _assert_in_set(value, values, number_of_values, __FILE__, __LINE__)
01360 #endif
01361
01362 #ifdef DOXYGEN
01363
01375 void assert_not_in_set(LargestIntegralType value, LargestIntegralType values[], size_t count);
01376 #else
01377 #define assert_not_in_set(value, values, number_of_values) \
01378 _assert_not_in_set(value, values, number_of_values, __FILE__, __LINE__)
01379 #endif
01380
01441 #ifdef DOXYGEN
01442
01448 void function_called(void);
01449 #else
01450 #define function_called() _function_called(__func__, __FILE__, __LINE__)
01451 #endif
01452
01453 #ifdef DOXYGEN
01454
01464 void expect_function_calls(#function, const int times);
01465 #else
01466 #define expect_function_calls(function, times) \
01467 _expect_function_call(#function, __FILE__, __LINE__, times)
01468 #endif
01469
01470 #ifdef DOXYGEN
01471
01479 void expect_function_call(#function);
01480 #else
01481 #define expect_function_call(function) \
01482 _expect_function_call(#function, __FILE__, __LINE__, 1)
01483 #endif
01484
01485 #ifdef DOXYGEN
01486
01493 void expect_function_call_any(#function);
01494 #else
01495 #define expect_function_call_any(function) \
01496 _expect_function_call(#function, __FILE__, __LINE__, -1)
01497 #endif
01498
01499 #ifdef DOXYGEN
01500
01507 void ignore_function_calls(#function);
01508 #else
01509 #define ignore_function_calls(function) \
01510 _expect_function_call(#function, __FILE__, __LINE__, -2)
01511 #endif
01512
01541 #ifdef DOXYGEN
01542
01545 void fail(void);
01546 #else
01547 #define fail() _fail(__FILE__, __LINE__)
01548 #endif
01549
01550 #ifdef DOXYGEN
01551
01554 void skip(void);
01555 #else
01556 #define skip() _skip(__FILE__, __LINE__)
01557 #endif
01558
01559 #ifdef DOXYGEN
01560
01574 void fail_msg(const char *msg, ...);
01575 #else
01576 #define fail_msg(msg, ...) do { \
01577 print_error("ERROR: " msg "\n", ##__VA_ARGS__); \
01578 fail(); \
01579 } while (0)
01580 #endif
01581
01582 #ifdef DOXYGEN
01583
01602 int run_test(#function);
01603 #else
01604 #define run_test(f) _run_test(#f, f, NULL, UNIT_TEST_FUNCTION_TYPE_TEST, NULL)
01605 #endif
01606
01607 static inline void _unit_test_dummy(void **state) {
01608 (void)state;
01609 }
01610
01615 #define unit_test(f) { #f, f, UNIT_TEST_FUNCTION_TYPE_TEST }
01616
01617 #define _unit_test_setup(test, setup) \
01618 { #test "_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_SETUP }
01619
01624 #define unit_test_setup(test, setup) \
01625 _unit_test_setup(test, setup), \
01626 unit_test(test), \
01627 _unit_test_teardown(test, _unit_test_dummy)
01628
01629 #define _unit_test_teardown(test, teardown) \
01630 { #test "_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_TEARDOWN }
01631
01636 #define unit_test_teardown(test, teardown) \
01637 _unit_test_setup(test, _unit_test_dummy), \
01638 unit_test(test), \
01639 _unit_test_teardown(test, teardown)
01640
01645 #define group_test_setup(setup) \
01646 { "group_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_GROUP_SETUP }
01647
01652 #define group_test_teardown(teardown) \
01653 { "group_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_GROUP_TEARDOWN }
01654
01662 #define unit_test_setup_teardown(test, setup, teardown) \
01663 _unit_test_setup(test, setup), \
01664 unit_test(test), \
01665 _unit_test_teardown(test, teardown)
01666
01667
01669 #define cmocka_unit_test(f) { #f, f, NULL, NULL, NULL }
01670
01672 #define cmocka_unit_test_setup(f, setup) { #f, f, setup, NULL, NULL }
01673
01675 #define cmocka_unit_test_teardown(f, teardown) { #f, f, NULL, teardown, NULL }
01676
01681 #define cmocka_unit_test_setup_teardown(f, setup, teardown) { #f, f, setup, teardown, NULL }
01682
01690 #define cmocka_unit_test_prestate(f, state) { #f, f, NULL, NULL, state }
01691
01699 #define cmocka_unit_test_prestate_setup_teardown(f, setup, teardown, state) { #f, f, setup, teardown, state }
01700
01701 #define run_tests(tests) _run_tests(tests, sizeof(tests) / sizeof(tests)[0])
01702 #define run_group_tests(tests) _run_group_tests(tests, sizeof(tests) / sizeof(tests)[0])
01703
01704 #ifdef DOXYGEN
01705
01761 int cmocka_run_group_tests(const struct CMUnitTest group_tests[],
01762 CMFixtureFunction group_setup,
01763 CMFixtureFunction group_teardown);
01764 #else
01765 # define cmocka_run_group_tests(group_tests, group_setup, group_teardown) \
01766 _cmocka_run_group_tests(#group_tests, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown)
01767 #endif
01768
01769 #ifdef DOXYGEN
01770
01829 int cmocka_run_group_tests_name(const char *group_name,
01830 const struct CMUnitTest group_tests[],
01831 CMFixtureFunction group_setup,
01832 CMFixtureFunction group_teardown);
01833 #else
01834 # define cmocka_run_group_tests_name(group_name, group_tests, group_setup, group_teardown) \
01835 _cmocka_run_group_tests(group_name, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown)
01836 #endif
01837
01863 #ifdef DOXYGEN
01864
01886 void *test_malloc(size_t size);
01887 #else
01888 #define test_malloc(size) _test_malloc(size, __FILE__, __LINE__)
01889 #endif
01890
01891 #ifdef DOXYGEN
01892
01905 void *test_calloc(size_t nmemb, size_t size);
01906 #else
01907 #define test_calloc(num, size) _test_calloc(num, size, __FILE__, __LINE__)
01908 #endif
01909
01910 #ifdef DOXYGEN
01911
01921 void *test_realloc(void *ptr, size_t size);
01922 #else
01923 #define test_realloc(ptr, size) _test_realloc(ptr, size, __FILE__, __LINE__)
01924 #endif
01925
01926 #ifdef DOXYGEN
01927
01934 void test_free(void *ptr);
01935 #else
01936 #define test_free(ptr) _test_free(ptr, __FILE__, __LINE__)
01937 #endif
01938
01939
01940 #ifdef UNIT_TESTING
01941 #define malloc test_malloc
01942 #define realloc test_realloc
01943 #define calloc test_calloc
01944 #define free test_free
01945 #endif
01946
02000 void mock_assert(const int result, const char* const expression,
02001 const char * const file, const int line);
02002
02003 #ifdef DOXYGEN
02004
02026 void expect_assert_failure(function fn_call);
02027 #else
02028 #define expect_assert_failure(function_call) \
02029 { \
02030 const int result = setjmp(global_expect_assert_env); \
02031 global_expecting_assert = 1; \
02032 if (result) { \
02033 print_message("Expected assertion %s occurred\n", \
02034 global_last_failed_assert); \
02035 global_expecting_assert = 0; \
02036 } else { \
02037 function_call ; \
02038 global_expecting_assert = 0; \
02039 print_error("Expected assert in %s\n", #function_call); \
02040 _fail(__FILE__, __LINE__); \
02041 } \
02042 }
02043 #endif
02044
02047
02048 typedef void (*UnitTestFunction)(void **state);
02049
02050
02051 typedef int (*CheckParameterValue)(const LargestIntegralType value,
02052 const LargestIntegralType check_value_data);
02053
02054
02055 typedef enum UnitTestFunctionType {
02056 UNIT_TEST_FUNCTION_TYPE_TEST = 0,
02057 UNIT_TEST_FUNCTION_TYPE_SETUP,
02058 UNIT_TEST_FUNCTION_TYPE_TEARDOWN,
02059 UNIT_TEST_FUNCTION_TYPE_GROUP_SETUP,
02060 UNIT_TEST_FUNCTION_TYPE_GROUP_TEARDOWN,
02061 } UnitTestFunctionType;
02062
02063
02064
02065
02066
02067
02068 typedef struct UnitTest {
02069 const char* name;
02070 UnitTestFunction function;
02071 UnitTestFunctionType function_type;
02072 } UnitTest;
02073
02074 typedef struct GroupTest {
02075 UnitTestFunction setup;
02076 UnitTestFunction teardown;
02077 const UnitTest *tests;
02078 const size_t number_of_tests;
02079 } GroupTest;
02080
02081
02082 typedef void (*CMUnitTestFunction)(void **state);
02083
02084
02085 typedef int (*CMFixtureFunction)(void **state);
02086
02087 struct CMUnitTest {
02088 const char *name;
02089 CMUnitTestFunction test_func;
02090 CMFixtureFunction setup_func;
02091 CMFixtureFunction teardown_func;
02092 void *initial_state;
02093 };
02094
02095
02096 typedef struct SourceLocation {
02097 const char* file;
02098 int line;
02099 } SourceLocation;
02100
02101
02102 typedef struct CheckParameterEvent {
02103 SourceLocation location;
02104 const char *parameter_name;
02105 CheckParameterValue check_value;
02106 LargestIntegralType check_value_data;
02107 } CheckParameterEvent;
02108
02109
02110 extern int global_expecting_assert;
02111 extern jmp_buf global_expect_assert_env;
02112 extern const char * global_last_failed_assert;
02113
02114
02115 LargestIntegralType _mock(const char * const function, const char* const file,
02116 const int line);
02117
02118 void _expect_function_call(
02119 const char * const function_name,
02120 const char * const file,
02121 const int line,
02122 const int count);
02123
02124 void _function_called(const char * const function, const char* const file,
02125 const int line);
02126
02127 void _expect_check(
02128 const char* const function, const char* const parameter,
02129 const char* const file, const int line,
02130 const CheckParameterValue check_function,
02131 const LargestIntegralType check_data, CheckParameterEvent * const event,
02132 const int count);
02133
02134 void _expect_in_set(
02135 const char* const function, const char* const parameter,
02136 const char* const file, const int line, const LargestIntegralType values[],
02137 const size_t number_of_values, const int count);
02138 void _expect_not_in_set(
02139 const char* const function, const char* const parameter,
02140 const char* const file, const int line, const LargestIntegralType values[],
02141 const size_t number_of_values, const int count);
02142
02143 void _expect_in_range(
02144 const char* const function, const char* const parameter,
02145 const char* const file, const int line,
02146 const LargestIntegralType minimum,
02147 const LargestIntegralType maximum, const int count);
02148 void _expect_not_in_range(
02149 const char* const function, const char* const parameter,
02150 const char* const file, const int line,
02151 const LargestIntegralType minimum,
02152 const LargestIntegralType maximum, const int count);
02153
02154 void _expect_value(
02155 const char* const function, const char* const parameter,
02156 const char* const file, const int line, const LargestIntegralType value,
02157 const int count);
02158 void _expect_not_value(
02159 const char* const function, const char* const parameter,
02160 const char* const file, const int line, const LargestIntegralType value,
02161 const int count);
02162
02163 void _expect_string(
02164 const char* const function, const char* const parameter,
02165 const char* const file, const int line, const char* string,
02166 const int count);
02167 void _expect_not_string(
02168 const char* const function, const char* const parameter,
02169 const char* const file, const int line, const char* string,
02170 const int count);
02171
02172 void _expect_memory(
02173 const char* const function, const char* const parameter,
02174 const char* const file, const int line, const void* const memory,
02175 const size_t size, const int count);
02176 void _expect_not_memory(
02177 const char* const function, const char* const parameter,
02178 const char* const file, const int line, const void* const memory,
02179 const size_t size, const int count);
02180
02181 void _expect_any(
02182 const char* const function, const char* const parameter,
02183 const char* const file, const int line, const int count);
02184
02185 void _check_expected(
02186 const char * const function_name, const char * const parameter_name,
02187 const char* file, const int line, const LargestIntegralType value);
02188
02189 void _will_return(const char * const function_name, const char * const file,
02190 const int line, const LargestIntegralType value,
02191 const int count);
02192 void _assert_true(const LargestIntegralType result,
02193 const char* const expression,
02194 const char * const file, const int line);
02195 void _assert_return_code(const LargestIntegralType result,
02196 size_t rlen,
02197 const LargestIntegralType error,
02198 const char * const expression,
02199 const char * const file,
02200 const int line);
02201 void _assert_int_equal(
02202 const LargestIntegralType a, const LargestIntegralType b,
02203 const char * const file, const int line);
02204 void _assert_int_not_equal(
02205 const LargestIntegralType a, const LargestIntegralType b,
02206 const char * const file, const int line);
02207 void _assert_string_equal(const char * const a, const char * const b,
02208 const char * const file, const int line);
02209 void _assert_string_not_equal(const char * const a, const char * const b,
02210 const char *file, const int line);
02211 void _assert_memory_equal(const void * const a, const void * const b,
02212 const size_t size, const char* const file,
02213 const int line);
02214 void _assert_memory_not_equal(const void * const a, const void * const b,
02215 const size_t size, const char* const file,
02216 const int line);
02217 void _assert_in_range(
02218 const LargestIntegralType value, const LargestIntegralType minimum,
02219 const LargestIntegralType maximum, const char* const file, const int line);
02220 void _assert_not_in_range(
02221 const LargestIntegralType value, const LargestIntegralType minimum,
02222 const LargestIntegralType maximum, const char* const file, const int line);
02223 void _assert_in_set(
02224 const LargestIntegralType value, const LargestIntegralType values[],
02225 const size_t number_of_values, const char* const file, const int line);
02226 void _assert_not_in_set(
02227 const LargestIntegralType value, const LargestIntegralType values[],
02228 const size_t number_of_values, const char* const file, const int line);
02229
02230 void* _test_malloc(const size_t size, const char* file, const int line);
02231 void* _test_realloc(void *ptr, const size_t size, const char* file, const int line);
02232 void* _test_calloc(const size_t number_of_elements, const size_t size,
02233 const char* file, const int line);
02234 void _test_free(void* const ptr, const char* file, const int line);
02235
02236 void _fail(const char * const file, const int line);
02237
02238 void _skip(const char * const file, const int line);
02239
02240 int _run_test(
02241 const char * const function_name, const UnitTestFunction Function,
02242 void ** const volatile state, const UnitTestFunctionType function_type,
02243 const void* const heap_check_point);
02244 CMOCKA_DEPRECATED int _run_tests(const UnitTest * const tests,
02245 const size_t number_of_tests);
02246 CMOCKA_DEPRECATED int _run_group_tests(const UnitTest * const tests,
02247 const size_t number_of_tests);
02248
02249
02250 int _cmocka_run_group_tests(const char *group_name,
02251 const struct CMUnitTest * const tests,
02252 const size_t num_tests,
02253 CMFixtureFunction group_setup,
02254 CMFixtureFunction group_teardown);
02255
02256
02257 void print_message(const char* const format, ...) CMOCKA_PRINTF_ATTRIBUTE(1, 2);
02258 void print_error(const char* const format, ...) CMOCKA_PRINTF_ATTRIBUTE(1, 2);
02259 void vprint_message(const char* const format, va_list args) CMOCKA_PRINTF_ATTRIBUTE(1, 0);
02260 void vprint_error(const char* const format, va_list args) CMOCKA_PRINTF_ATTRIBUTE(1, 0);
02261
02262 enum cm_message_output {
02263 CM_OUTPUT_STDOUT,
02264 CM_OUTPUT_SUBUNIT,
02265 CM_OUTPUT_TAP,
02266 CM_OUTPUT_XML,
02267 };
02268
02280 void cmocka_set_message_output(enum cm_message_output output);
02281
02284 #endif