Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 #ifndef UMOCK_C_H
XinZhangMS 0:f7f1f0d76dd6 5 #define UMOCK_C_H
XinZhangMS 0:f7f1f0d76dd6 6
XinZhangMS 0:f7f1f0d76dd6 7 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 8 extern "C" {
XinZhangMS 0:f7f1f0d76dd6 9 #include <cstdlib>
XinZhangMS 0:f7f1f0d76dd6 10 #else
XinZhangMS 0:f7f1f0d76dd6 11 #include <stdlib.h>
XinZhangMS 0:f7f1f0d76dd6 12 #endif
XinZhangMS 0:f7f1f0d76dd6 13 #include "macro_utils.h"
XinZhangMS 0:f7f1f0d76dd6 14 #include "umockcallrecorder.h"
XinZhangMS 0:f7f1f0d76dd6 15
XinZhangMS 0:f7f1f0d76dd6 16 /* Define UMOCK_STATIC to static to make mocks private to compilation unit */
XinZhangMS 0:f7f1f0d76dd6 17 #ifndef UMOCK_STATIC
XinZhangMS 0:f7f1f0d76dd6 18 #define UMOCK_STATIC
XinZhangMS 0:f7f1f0d76dd6 19 #endif
XinZhangMS 0:f7f1f0d76dd6 20
XinZhangMS 0:f7f1f0d76dd6 21 #define UMOCK_C_ERROR_CODE_VALUES \
XinZhangMS 0:f7f1f0d76dd6 22 UMOCK_C_ARG_INDEX_OUT_OF_RANGE, \
XinZhangMS 0:f7f1f0d76dd6 23 UMOCK_C_MALLOC_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 24 UMOCK_C_INVALID_ARGUMENT_BUFFER, \
XinZhangMS 0:f7f1f0d76dd6 25 UMOCK_C_COMPARE_CALL_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 26 UMOCK_C_RESET_CALLS_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 27 UMOCK_C_CAPTURE_RETURN_ALREADY_USED, \
XinZhangMS 0:f7f1f0d76dd6 28 UMOCK_C_NULL_ARGUMENT, \
XinZhangMS 0:f7f1f0d76dd6 29 UMOCK_C_INVALID_PAIRED_CALLS, \
XinZhangMS 0:f7f1f0d76dd6 30 UMOCK_C_REGISTER_TYPE_FAILED, \
XinZhangMS 0:f7f1f0d76dd6 31 UMOCK_C_ERROR
XinZhangMS 0:f7f1f0d76dd6 32
XinZhangMS 0:f7f1f0d76dd6 33 DEFINE_ENUM(UMOCK_C_ERROR_CODE, UMOCK_C_ERROR_CODE_VALUES)
XinZhangMS 0:f7f1f0d76dd6 34
XinZhangMS 0:f7f1f0d76dd6 35 /* This is the type for the error callback by which umock_c shall indicate errors to the user */
XinZhangMS 0:f7f1f0d76dd6 36 typedef void(*ON_UMOCK_C_ERROR)(UMOCK_C_ERROR_CODE error_code);
XinZhangMS 0:f7f1f0d76dd6 37
XinZhangMS 0:f7f1f0d76dd6 38 #define IGNORED_PTR_ARG (NULL)
XinZhangMS 0:f7f1f0d76dd6 39 #define IGNORED_NUM_ARG (0)
XinZhangMS 0:f7f1f0d76dd6 40
XinZhangMS 0:f7f1f0d76dd6 41 #define REGISTER_GLOBAL_MOCK_HOOK(mock_function, mock_hook_function) \
XinZhangMS 0:f7f1f0d76dd6 42 C2(set_global_mock_hook_,mock_function)(mock_hook_function);
XinZhangMS 0:f7f1f0d76dd6 43
XinZhangMS 0:f7f1f0d76dd6 44 #define REGISTER_GLOBAL_MOCK_RETURN(mock_function, return_value) \
XinZhangMS 0:f7f1f0d76dd6 45 C2(set_global_mock_return_,mock_function)(return_value);
XinZhangMS 0:f7f1f0d76dd6 46
XinZhangMS 0:f7f1f0d76dd6 47 #define REGISTER_GLOBAL_MOCK_FAIL_RETURN(mock_function, fail_return_value) \
XinZhangMS 0:f7f1f0d76dd6 48 C2(set_global_mock_fail_return_,mock_function)(fail_return_value);
XinZhangMS 0:f7f1f0d76dd6 49
XinZhangMS 0:f7f1f0d76dd6 50 #define REGISTER_GLOBAL_MOCK_RETURNS(mock_function, return_value, fail_return_value) \
XinZhangMS 0:f7f1f0d76dd6 51 C2(set_global_mock_returns_,mock_function)(return_value, fail_return_value);
XinZhangMS 0:f7f1f0d76dd6 52
XinZhangMS 0:f7f1f0d76dd6 53 /* Codes_SRS_UMOCK_C_LIB_01_013: [STRICT_EXPECTED_CALL shall record that a certain call is expected.] */
XinZhangMS 0:f7f1f0d76dd6 54 #define STRICT_EXPECTED_CALL(call) \
XinZhangMS 0:f7f1f0d76dd6 55 C2(get_auto_ignore_args_function_, call)(C2(umock_c_strict_expected_,call), #call)
XinZhangMS 0:f7f1f0d76dd6 56
XinZhangMS 0:f7f1f0d76dd6 57 #define EXPECTED_CALL(call) \
XinZhangMS 0:f7f1f0d76dd6 58 C2(umock_c_expected_,call)
XinZhangMS 0:f7f1f0d76dd6 59
XinZhangMS 0:f7f1f0d76dd6 60 #define DECLARE_UMOCK_POINTER_TYPE_FOR_TYPE(value_type, alias) \
XinZhangMS 0:f7f1f0d76dd6 61 char* C3(stringify_func_,alias,ptr)(const value_type** value) \
XinZhangMS 0:f7f1f0d76dd6 62 { \
XinZhangMS 0:f7f1f0d76dd6 63 char temp_buffer[32]; \
XinZhangMS 0:f7f1f0d76dd6 64 char* result; \
XinZhangMS 0:f7f1f0d76dd6 65 size_t length = sprintf(temp_buffer, "%p", (void*)*value); \
XinZhangMS 0:f7f1f0d76dd6 66 if (length < 0) \
XinZhangMS 0:f7f1f0d76dd6 67 { \
XinZhangMS 0:f7f1f0d76dd6 68 result = NULL; \
XinZhangMS 0:f7f1f0d76dd6 69 } \
XinZhangMS 0:f7f1f0d76dd6 70 else \
XinZhangMS 0:f7f1f0d76dd6 71 { \
XinZhangMS 0:f7f1f0d76dd6 72 result = (char*)malloc(length + 1); \
XinZhangMS 0:f7f1f0d76dd6 73 if (result != NULL) \
XinZhangMS 0:f7f1f0d76dd6 74 { \
XinZhangMS 0:f7f1f0d76dd6 75 (void)memcpy(result, temp_buffer, length + 1); \
XinZhangMS 0:f7f1f0d76dd6 76 } \
XinZhangMS 0:f7f1f0d76dd6 77 } \
XinZhangMS 0:f7f1f0d76dd6 78 return result; \
XinZhangMS 0:f7f1f0d76dd6 79 } \
XinZhangMS 0:f7f1f0d76dd6 80 int C3(are_equal_func_,alias,ptr)(const value_type** left, const value_type** right) \
XinZhangMS 0:f7f1f0d76dd6 81 { \
XinZhangMS 0:f7f1f0d76dd6 82 return *left == *right; \
XinZhangMS 0:f7f1f0d76dd6 83 } \
XinZhangMS 0:f7f1f0d76dd6 84 int C3(copy_func_,alias,ptr)(value_type** destination, const value_type** source) \
XinZhangMS 0:f7f1f0d76dd6 85 { \
XinZhangMS 0:f7f1f0d76dd6 86 *destination = (value_type*)*source; \
XinZhangMS 0:f7f1f0d76dd6 87 return 0; \
XinZhangMS 0:f7f1f0d76dd6 88 } \
XinZhangMS 0:f7f1f0d76dd6 89 void C3(free_func_,alias,ptr)(value_type** value) \
XinZhangMS 0:f7f1f0d76dd6 90 { \
XinZhangMS 0:f7f1f0d76dd6 91 (void)value; \
XinZhangMS 0:f7f1f0d76dd6 92 } \
XinZhangMS 0:f7f1f0d76dd6 93
XinZhangMS 0:f7f1f0d76dd6 94 extern void umock_c_indicate_error(UMOCK_C_ERROR_CODE error_code);
XinZhangMS 0:f7f1f0d76dd6 95 extern int umock_c_init(ON_UMOCK_C_ERROR on_umock_c_error);
XinZhangMS 0:f7f1f0d76dd6 96 extern void umock_c_deinit(void);
XinZhangMS 0:f7f1f0d76dd6 97 extern void umock_c_reset_all_calls(void);
XinZhangMS 0:f7f1f0d76dd6 98 extern const char* umock_c_get_actual_calls(void);
XinZhangMS 0:f7f1f0d76dd6 99 extern const char* umock_c_get_expected_calls(void);
XinZhangMS 0:f7f1f0d76dd6 100 extern UMOCKCALLRECORDER_HANDLE umock_c_get_call_recorder(void);
XinZhangMS 0:f7f1f0d76dd6 101 extern int umock_c_set_call_recorder(UMOCKCALLRECORDER_HANDLE umockc_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 102
XinZhangMS 0:f7f1f0d76dd6 103 /* Codes_SRS_UMOCK_C_LIB_01_065: [REGISTER_UMOCK_VALUE_TYPE shall register the type identified by value_type to be usable by umock_c for argument and return types and instruct umock_c which functions to use for getting the stringify, are_equal, copy and free.]*/
XinZhangMS 0:f7f1f0d76dd6 104 /* Codes_SRS_UMOCK_C_LIB_01_197: [ If REGISTER_UMOCK_VALUE_TYPE fails, the on_error callback shall be called with UMOCK_C_REGISTER_TYPE_FAILED. ]*/
XinZhangMS 0:f7f1f0d76dd6 105 #define REGISTER_UMOCK_VALUE_TYPE_ALL(value_type, stringify_func, are_equal_func, copy_func, free_func) \
XinZhangMS 0:f7f1f0d76dd6 106 { \
XinZhangMS 0:f7f1f0d76dd6 107 char* stringify_func(const value_type* value); \
XinZhangMS 0:f7f1f0d76dd6 108 int are_equal_func(const value_type* left, const value_type* right); \
XinZhangMS 0:f7f1f0d76dd6 109 int copy_func(value_type* destination, const value_type* source); \
XinZhangMS 0:f7f1f0d76dd6 110 void free_func(value_type* value); \
XinZhangMS 0:f7f1f0d76dd6 111 if (umocktypes_register_type(TOSTRING(value_type), (UMOCKTYPE_STRINGIFY_FUNC)stringify_func, (UMOCKTYPE_ARE_EQUAL_FUNC)are_equal_func, (UMOCKTYPE_COPY_FUNC)copy_func, (UMOCKTYPE_FREE_FUNC)free_func) != 0) \
XinZhangMS 0:f7f1f0d76dd6 112 { \
XinZhangMS 0:f7f1f0d76dd6 113 umock_c_indicate_error(UMOCK_C_REGISTER_TYPE_FAILED); \
XinZhangMS 0:f7f1f0d76dd6 114 } \
XinZhangMS 0:f7f1f0d76dd6 115 }
XinZhangMS 0:f7f1f0d76dd6 116
XinZhangMS 0:f7f1f0d76dd6 117 /* Codes_SRS_UMOCK_C_LIB_01_066: [If only the value_type is specified in the macro invocation then the stringify, are_equal, copy and free function names shall be automatically derived from the type as: umockvalue_stringify_value_type, umockvalue_are_equal_value_type, umockvalue_copy_value_type, umockvalue_free_value_type.]*/
XinZhangMS 0:f7f1f0d76dd6 118 #define REGISTER_UMOCK_VALUE_TYPE_ONLY_TYPE(value_type) \
XinZhangMS 0:f7f1f0d76dd6 119 REGISTER_UMOCK_VALUE_TYPE_ALL (value_type, C2(umock_stringify_,value_type), C2(umock_are_equal_,value_type), C2(umock_copy_,value_type), C2(umock_free_,value_type))
XinZhangMS 0:f7f1f0d76dd6 120
XinZhangMS 0:f7f1f0d76dd6 121 #if _MSC_VER
XinZhangMS 0:f7f1f0d76dd6 122 #define REGISTER_UMOCK_VALUE_TYPE(...) \
XinZhangMS 0:f7f1f0d76dd6 123 IF(DIV2(COUNT_ARG(__VA_ARGS__)), REGISTER_UMOCK_VALUE_TYPE_ALL, REGISTER_UMOCK_VALUE_TYPE_ONLY_TYPE) LPAREN __VA_ARGS__)
XinZhangMS 0:f7f1f0d76dd6 124 #else
XinZhangMS 0:f7f1f0d76dd6 125 #define REGISTER_UMOCK_VALUE_TYPE(...) \
XinZhangMS 0:f7f1f0d76dd6 126 IF(DIV2(COUNT_ARG(__VA_ARGS__)), REGISTER_UMOCK_VALUE_TYPE_ALL, REGISTER_UMOCK_VALUE_TYPE_ONLY_TYPE) (__VA_ARGS__)
XinZhangMS 0:f7f1f0d76dd6 127 #endif
XinZhangMS 0:f7f1f0d76dd6 128
XinZhangMS 0:f7f1f0d76dd6 129 /* Codes_SRS_UMOCK_C_LIB_01_149: [ REGISTER_UMOCK_ALIAS_TYPE registers a new alias type for another type. ]*/
XinZhangMS 0:f7f1f0d76dd6 130 /* Codes_SRS_UMOCK_C_LIB_01_198: [ If REGISTER_UMOCK_ALIAS_TYPE fails, the on_error callback shall be called with UMOCK_C_REGISTER_TYPE_FAILED. ]*/
XinZhangMS 0:f7f1f0d76dd6 131 #define REGISTER_UMOCK_ALIAS_TYPE(value_type, is_value_type) \
XinZhangMS 0:f7f1f0d76dd6 132 if (umocktypes_register_alias_type(TOSTRING(value_type), TOSTRING(is_value_type)) != 0) \
XinZhangMS 0:f7f1f0d76dd6 133 { \
XinZhangMS 0:f7f1f0d76dd6 134 umock_c_indicate_error(UMOCK_C_REGISTER_TYPE_FAILED); \
XinZhangMS 0:f7f1f0d76dd6 135 } \
XinZhangMS 0:f7f1f0d76dd6 136
XinZhangMS 0:f7f1f0d76dd6 137 #define UMOCK_TYPE(value_type) \
XinZhangMS 0:f7f1f0d76dd6 138 (const char*)(const void*)(const value_type*)(const void*)TOSTRING(value_type)
XinZhangMS 0:f7f1f0d76dd6 139
XinZhangMS 0:f7f1f0d76dd6 140 #include "umock_c_internal.h"
XinZhangMS 0:f7f1f0d76dd6 141 #include "umock_c_prod.h"
XinZhangMS 0:f7f1f0d76dd6 142
XinZhangMS 0:f7f1f0d76dd6 143 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 144 }
XinZhangMS 0:f7f1f0d76dd6 145 #endif
XinZhangMS 0:f7f1f0d76dd6 146
XinZhangMS 0:f7f1f0d76dd6 147 #endif /* UMOCK_C_H */