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 #include "umock_c.h"
XinZhangMS 0:f7f1f0d76dd6 5 #include "umockcall.h"
XinZhangMS 0:f7f1f0d76dd6 6 #include "umocktypes.h"
XinZhangMS 0:f7f1f0d76dd6 7 #include "umocktypes_c.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "umockcallrecorder.h"
XinZhangMS 0:f7f1f0d76dd6 9 #include "umock_log.h"
XinZhangMS 0:f7f1f0d76dd6 10
XinZhangMS 0:f7f1f0d76dd6 11 typedef enum UMOCK_C_STATE_TAG
XinZhangMS 0:f7f1f0d76dd6 12 {
XinZhangMS 0:f7f1f0d76dd6 13 UMOCK_C_STATE_NOT_INITIALIZED,
XinZhangMS 0:f7f1f0d76dd6 14 UMOCK_C_STATE_INITIALIZED
XinZhangMS 0:f7f1f0d76dd6 15 } UMOCK_C_STATE;
XinZhangMS 0:f7f1f0d76dd6 16
XinZhangMS 0:f7f1f0d76dd6 17 static ON_UMOCK_C_ERROR on_umock_c_error_function;
XinZhangMS 0:f7f1f0d76dd6 18 static UMOCK_C_STATE umock_c_state = UMOCK_C_STATE_NOT_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 19 static UMOCKCALLRECORDER_HANDLE umock_call_recorder = NULL;
XinZhangMS 0:f7f1f0d76dd6 20
XinZhangMS 0:f7f1f0d76dd6 21 int umock_c_init(ON_UMOCK_C_ERROR on_umock_c_error)
XinZhangMS 0:f7f1f0d76dd6 22 {
XinZhangMS 0:f7f1f0d76dd6 23 int result;
XinZhangMS 0:f7f1f0d76dd6 24
XinZhangMS 0:f7f1f0d76dd6 25 if (umock_c_state != UMOCK_C_STATE_NOT_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 26 {
XinZhangMS 0:f7f1f0d76dd6 27 /* Codes_SRS_UMOCK_C_01_007: [ umock_c_init when umock is already initialized shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 28 UMOCK_LOG("umock_c: umock_c already initialized.");
XinZhangMS 0:f7f1f0d76dd6 29 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 30 }
XinZhangMS 0:f7f1f0d76dd6 31 else
XinZhangMS 0:f7f1f0d76dd6 32 {
XinZhangMS 0:f7f1f0d76dd6 33 /* Codes_SRS_UMOCK_C_LIB_01_144: [ Out of the box umock_c shall support the following types through the header umocktypes_c.h: ]*/
XinZhangMS 0:f7f1f0d76dd6 34 /* Codes_SRS_UMOCK_C_LIB_01_028: [**char**] */
XinZhangMS 0:f7f1f0d76dd6 35 /* Codes_SRS_UMOCK_C_LIB_01_029 : [**unsigned char**] */
XinZhangMS 0:f7f1f0d76dd6 36 /* Codes_SRS_UMOCK_C_LIB_01_030 : [**short**] */
XinZhangMS 0:f7f1f0d76dd6 37 /* Codes_SRS_UMOCK_C_LIB_01_031 : [**unsigned short**] */
XinZhangMS 0:f7f1f0d76dd6 38 /* Codes_SRS_UMOCK_C_LIB_01_032 : [**int**] */
XinZhangMS 0:f7f1f0d76dd6 39 /* Codes_SRS_UMOCK_C_LIB_01_033 : [**unsigned int**] */
XinZhangMS 0:f7f1f0d76dd6 40 /* Codes_SRS_UMOCK_C_LIB_01_034 : [**long**] */
XinZhangMS 0:f7f1f0d76dd6 41 /* Codes_SRS_UMOCK_C_LIB_01_035 : [**unsigned long**] */
XinZhangMS 0:f7f1f0d76dd6 42 /* Codes_SRS_UMOCK_C_LIB_01_036 : [**long long**] */
XinZhangMS 0:f7f1f0d76dd6 43 /* Codes_SRS_UMOCK_C_LIB_01_037 : [**unsigned long long**] */
XinZhangMS 0:f7f1f0d76dd6 44 /* Codes_SRS_UMOCK_C_LIB_01_038 : [**float**] */
XinZhangMS 0:f7f1f0d76dd6 45 /* Codes_SRS_UMOCK_C_LIB_01_039 : [**double**] */
XinZhangMS 0:f7f1f0d76dd6 46 /* Codes_SRS_UMOCK_C_LIB_01_040 : [**long double**] */
XinZhangMS 0:f7f1f0d76dd6 47 /* Codes_SRS_UMOCK_C_LIB_01_041 : [**size_t**] */
XinZhangMS 0:f7f1f0d76dd6 48 /* Codes_SRS_UMOCK_C_LIB_01_151: [ void\* ]*/
XinZhangMS 0:f7f1f0d76dd6 49 /* Codes_SRS_UMOCK_C_LIB_01_152: [ const void\* ]*/
XinZhangMS 0:f7f1f0d76dd6 50 /* Codes_SRS_UMOCK_C_01_023: [ umock_c_init shall initialize the umock types by calling umocktypes_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 51 if ((umocktypes_init() != 0) ||
XinZhangMS 0:f7f1f0d76dd6 52 /* Codes_SRS_UMOCK_C_01_002: [ umock_c_init shall register the C naive types by calling umocktypes_c_register_types. ]*/
XinZhangMS 0:f7f1f0d76dd6 53 (umocktypes_c_register_types() != 0))
XinZhangMS 0:f7f1f0d76dd6 54 {
XinZhangMS 0:f7f1f0d76dd6 55 /* Codes_SRS_UMOCK_C_01_005: [ If any of the calls fails, umock_c_init shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 56 UMOCK_LOG("umock_c: Could not register standard C types with umock_c.");
XinZhangMS 0:f7f1f0d76dd6 57 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 58 }
XinZhangMS 0:f7f1f0d76dd6 59 else
XinZhangMS 0:f7f1f0d76dd6 60 {
XinZhangMS 0:f7f1f0d76dd6 61 /* Codes_SRS_UMOCK_C_01_003: [ umock_c_init shall create a call recorder by calling umockcallrecorder_create. ]*/
XinZhangMS 0:f7f1f0d76dd6 62 umock_call_recorder = umockcallrecorder_create();
XinZhangMS 0:f7f1f0d76dd6 63 if (umock_call_recorder == NULL)
XinZhangMS 0:f7f1f0d76dd6 64 {
XinZhangMS 0:f7f1f0d76dd6 65 /* Codes_SRS_UMOCK_C_01_005: [ If any of the calls fails, umock_c_init shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 66 UMOCK_LOG("umock_c: Could not create the call recorder.");
XinZhangMS 0:f7f1f0d76dd6 67 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 68 }
XinZhangMS 0:f7f1f0d76dd6 69 else
XinZhangMS 0:f7f1f0d76dd6 70 {
XinZhangMS 0:f7f1f0d76dd6 71 /* Codes_SRS_UMOCK_C_01_024: [ on_umock_c_error shall be optional. ]*/
XinZhangMS 0:f7f1f0d76dd6 72 /* Codes_SRS_UMOCK_C_01_006: [ The on_umock_c_error callback shall be stored to be used for later error callbacks. ]*/
XinZhangMS 0:f7f1f0d76dd6 73 on_umock_c_error_function = on_umock_c_error;
XinZhangMS 0:f7f1f0d76dd6 74
XinZhangMS 0:f7f1f0d76dd6 75 /* Codes_SRS_UMOCK_C_01_001: [umock_c_init shall initialize the umock library.] */
XinZhangMS 0:f7f1f0d76dd6 76 umock_c_state = UMOCK_C_STATE_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 77
XinZhangMS 0:f7f1f0d76dd6 78 /* Codes_SRS_UMOCK_C_01_004: [ On success, umock_c_init shall return 0. ]*/
XinZhangMS 0:f7f1f0d76dd6 79 result = 0;
XinZhangMS 0:f7f1f0d76dd6 80 }
XinZhangMS 0:f7f1f0d76dd6 81 }
XinZhangMS 0:f7f1f0d76dd6 82 }
XinZhangMS 0:f7f1f0d76dd6 83
XinZhangMS 0:f7f1f0d76dd6 84 return result;
XinZhangMS 0:f7f1f0d76dd6 85 }
XinZhangMS 0:f7f1f0d76dd6 86
XinZhangMS 0:f7f1f0d76dd6 87 void umock_c_deinit(void)
XinZhangMS 0:f7f1f0d76dd6 88 {
XinZhangMS 0:f7f1f0d76dd6 89 /* Codes_SRS_UMOCK_C_LIB_01_012: [If umock_c was not initialized, umock_c_deinit shall do nothing.] */
XinZhangMS 0:f7f1f0d76dd6 90 /* Codes_SRS_UMOCK_C_01_010: [ If the module is not initialized, umock_c_deinit shall do nothing. ] */
XinZhangMS 0:f7f1f0d76dd6 91 if (umock_c_state == UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 92 {
XinZhangMS 0:f7f1f0d76dd6 93 /* Codes_SRS_UMOCK_C_01_009: [ umock_c_deinit shall free the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 94 umockcallrecorder_destroy(umock_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 95 umock_c_state = UMOCK_C_STATE_NOT_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 96
XinZhangMS 0:f7f1f0d76dd6 97 /* Codes_SRS_UMOCK_C_01_008: [ umock_c_deinit shall deinitialize the umock types by calling umocktypes_deinit. ]*/
XinZhangMS 0:f7f1f0d76dd6 98 umocktypes_deinit();
XinZhangMS 0:f7f1f0d76dd6 99 }
XinZhangMS 0:f7f1f0d76dd6 100 }
XinZhangMS 0:f7f1f0d76dd6 101
XinZhangMS 0:f7f1f0d76dd6 102 void umock_c_reset_all_calls(void)
XinZhangMS 0:f7f1f0d76dd6 103 {
XinZhangMS 0:f7f1f0d76dd6 104 /* Codes_SRS_UMOCK_C_01_012: [ If the module is not initialized, umock_c_reset_all_calls shall do nothing. ]*/
XinZhangMS 0:f7f1f0d76dd6 105 if (umock_c_state == UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 106 {
XinZhangMS 0:f7f1f0d76dd6 107 /* Codes_SRS_UMOCK_C_01_011: [ umock_c_reset_all_calls shall reset all calls by calling umockcallrecorder_reset_all_calls on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 108 if (umockcallrecorder_reset_all_calls(umock_call_recorder) != 0)
XinZhangMS 0:f7f1f0d76dd6 109 {
XinZhangMS 0:f7f1f0d76dd6 110 /* Codes_SRS_UMOCK_C_01_025: [ If the underlying umockcallrecorder_reset_all_calls fails, the on_umock_c_error callback shall be triggered with UMOCK_C_RESET_CALLS_ERROR. ]*/
XinZhangMS 0:f7f1f0d76dd6 111 umock_c_indicate_error(UMOCK_C_RESET_CALLS_ERROR);
XinZhangMS 0:f7f1f0d76dd6 112 }
XinZhangMS 0:f7f1f0d76dd6 113 }
XinZhangMS 0:f7f1f0d76dd6 114 }
XinZhangMS 0:f7f1f0d76dd6 115
XinZhangMS 0:f7f1f0d76dd6 116 int umock_c_add_expected_call(UMOCKCALL_HANDLE mock_call)
XinZhangMS 0:f7f1f0d76dd6 117 {
XinZhangMS 0:f7f1f0d76dd6 118 int result;
XinZhangMS 0:f7f1f0d76dd6 119
XinZhangMS 0:f7f1f0d76dd6 120 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 121 {
XinZhangMS 0:f7f1f0d76dd6 122 /* Codes_SRS_UMOCK_C_01_020: [ If the module is not initialized, umock_c_add_expected_call shall return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 123 UMOCK_LOG("umock_c: Cannot add an expected call, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 124 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 125 }
XinZhangMS 0:f7f1f0d76dd6 126 else
XinZhangMS 0:f7f1f0d76dd6 127 {
XinZhangMS 0:f7f1f0d76dd6 128 /* Codes_SRS_UMOCK_C_01_019: [ umock_c_add_expected_call shall add an expected call by calling umockcallrecorder_add_expected_call on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 129 result = umockcallrecorder_add_expected_call(umock_call_recorder, mock_call);
XinZhangMS 0:f7f1f0d76dd6 130 }
XinZhangMS 0:f7f1f0d76dd6 131
XinZhangMS 0:f7f1f0d76dd6 132 return result;
XinZhangMS 0:f7f1f0d76dd6 133 }
XinZhangMS 0:f7f1f0d76dd6 134
XinZhangMS 0:f7f1f0d76dd6 135 int umock_c_add_actual_call(UMOCKCALL_HANDLE mock_call, UMOCKCALL_HANDLE* matched_call)
XinZhangMS 0:f7f1f0d76dd6 136 {
XinZhangMS 0:f7f1f0d76dd6 137 int result;
XinZhangMS 0:f7f1f0d76dd6 138
XinZhangMS 0:f7f1f0d76dd6 139 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 140 {
XinZhangMS 0:f7f1f0d76dd6 141 /* Codes_SRS_UMOCK_C_01_022: [ If the module is not initialized, umock_c_add_actual_call shall return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 142 UMOCK_LOG("umock_c: Cannot add an actual call, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 143 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 144 }
XinZhangMS 0:f7f1f0d76dd6 145 else
XinZhangMS 0:f7f1f0d76dd6 146 {
XinZhangMS 0:f7f1f0d76dd6 147 /* Codes_SRS_UMOCK_C_01_021: [ umock_c_add_actual_call shall add an actual call by calling umockcallrecorder_add_actual_call on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 148 result = umockcallrecorder_add_actual_call(umock_call_recorder, mock_call, matched_call);
XinZhangMS 0:f7f1f0d76dd6 149 }
XinZhangMS 0:f7f1f0d76dd6 150
XinZhangMS 0:f7f1f0d76dd6 151 return result;
XinZhangMS 0:f7f1f0d76dd6 152 }
XinZhangMS 0:f7f1f0d76dd6 153
XinZhangMS 0:f7f1f0d76dd6 154 const char* umock_c_get_expected_calls(void)
XinZhangMS 0:f7f1f0d76dd6 155 {
XinZhangMS 0:f7f1f0d76dd6 156 const char* result;
XinZhangMS 0:f7f1f0d76dd6 157
XinZhangMS 0:f7f1f0d76dd6 158 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 159 {
XinZhangMS 0:f7f1f0d76dd6 160 /* Codes_SRS_UMOCK_C_01_016: [ If the module is not initialized, umock_c_get_expected_calls shall return NULL. ]*/
XinZhangMS 0:f7f1f0d76dd6 161 UMOCK_LOG("umock_c: Cannot get the expected calls, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 162 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 163 }
XinZhangMS 0:f7f1f0d76dd6 164 else
XinZhangMS 0:f7f1f0d76dd6 165 {
XinZhangMS 0:f7f1f0d76dd6 166 /* Codes_SRS_UMOCK_C_01_015: [ umock_c_get_expected_calls shall return the string for the recorded expected calls by calling umockcallrecorder_get_expected_calls on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 167 result = umockcallrecorder_get_expected_calls(umock_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 168 }
XinZhangMS 0:f7f1f0d76dd6 169
XinZhangMS 0:f7f1f0d76dd6 170 return result;
XinZhangMS 0:f7f1f0d76dd6 171 }
XinZhangMS 0:f7f1f0d76dd6 172
XinZhangMS 0:f7f1f0d76dd6 173 const char* umock_c_get_actual_calls(void)
XinZhangMS 0:f7f1f0d76dd6 174 {
XinZhangMS 0:f7f1f0d76dd6 175 const char* result;
XinZhangMS 0:f7f1f0d76dd6 176
XinZhangMS 0:f7f1f0d76dd6 177 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 178 {
XinZhangMS 0:f7f1f0d76dd6 179 /* Codes_SRS_UMOCK_C_01_014: [ If the module is not initialized, umock_c_get_actual_calls shall return NULL. ]*/
XinZhangMS 0:f7f1f0d76dd6 180 UMOCK_LOG("umock_c: Cannot get the actual calls, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 181 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 182 }
XinZhangMS 0:f7f1f0d76dd6 183 else
XinZhangMS 0:f7f1f0d76dd6 184 {
XinZhangMS 0:f7f1f0d76dd6 185 /* Codes_SRS_UMOCK_C_01_013: [ umock_c_get_actual_calls shall return the string for the recorded actual calls by calling umockcallrecorder_get_actual_calls on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 186 result = umockcallrecorder_get_actual_calls(umock_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 187 }
XinZhangMS 0:f7f1f0d76dd6 188
XinZhangMS 0:f7f1f0d76dd6 189 return result;
XinZhangMS 0:f7f1f0d76dd6 190 }
XinZhangMS 0:f7f1f0d76dd6 191
XinZhangMS 0:f7f1f0d76dd6 192 UMOCKCALL_HANDLE umock_c_get_last_expected_call(void)
XinZhangMS 0:f7f1f0d76dd6 193 {
XinZhangMS 0:f7f1f0d76dd6 194 UMOCKCALL_HANDLE result;
XinZhangMS 0:f7f1f0d76dd6 195
XinZhangMS 0:f7f1f0d76dd6 196 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 197 {
XinZhangMS 0:f7f1f0d76dd6 198 /* Codes_SRS_UMOCK_C_01_018: [ If the module is not initialized, umock_c_get_last_expected_call shall return NULL. ]*/
XinZhangMS 0:f7f1f0d76dd6 199 UMOCK_LOG("umock_c: Cannot get the last expected call, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 200 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 201 }
XinZhangMS 0:f7f1f0d76dd6 202 else
XinZhangMS 0:f7f1f0d76dd6 203 {
XinZhangMS 0:f7f1f0d76dd6 204 /* Codes_SRS_UMOCK_C_01_017: [ umock_c_get_last_expected_call shall return the last expected call by calling umockcallrecorder_get_last_expected_call on the call recorder created in umock_c_init. ]*/
XinZhangMS 0:f7f1f0d76dd6 205 result = umockcallrecorder_get_last_expected_call(umock_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 206 }
XinZhangMS 0:f7f1f0d76dd6 207
XinZhangMS 0:f7f1f0d76dd6 208 return result;
XinZhangMS 0:f7f1f0d76dd6 209 }
XinZhangMS 0:f7f1f0d76dd6 210
XinZhangMS 0:f7f1f0d76dd6 211 void umock_c_indicate_error(UMOCK_C_ERROR_CODE error_code)
XinZhangMS 0:f7f1f0d76dd6 212 {
XinZhangMS 0:f7f1f0d76dd6 213 if (on_umock_c_error_function != NULL)
XinZhangMS 0:f7f1f0d76dd6 214 {
XinZhangMS 0:f7f1f0d76dd6 215 on_umock_c_error_function(error_code);
XinZhangMS 0:f7f1f0d76dd6 216 }
XinZhangMS 0:f7f1f0d76dd6 217 }
XinZhangMS 0:f7f1f0d76dd6 218
XinZhangMS 0:f7f1f0d76dd6 219 UMOCKCALLRECORDER_HANDLE umock_c_get_call_recorder(void)
XinZhangMS 0:f7f1f0d76dd6 220 {
XinZhangMS 0:f7f1f0d76dd6 221 UMOCKCALLRECORDER_HANDLE result;
XinZhangMS 0:f7f1f0d76dd6 222
XinZhangMS 0:f7f1f0d76dd6 223 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 224 {
XinZhangMS 0:f7f1f0d76dd6 225 /* Codes_SRS_UMOCK_C_01_027: [ If the module is not initialized, umock_c_get_call_recorder shall return NULL. ]*/
XinZhangMS 0:f7f1f0d76dd6 226 UMOCK_LOG("umock_c_get_call_recorder: Cannot get the call recorder, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 227 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 228 }
XinZhangMS 0:f7f1f0d76dd6 229 else
XinZhangMS 0:f7f1f0d76dd6 230 {
XinZhangMS 0:f7f1f0d76dd6 231 /* Codes_SRS_UMOCK_C_01_026: [ umock_c_get_call_recorder shall return the handle to the currently used call recorder. ]*/
XinZhangMS 0:f7f1f0d76dd6 232 result = umock_call_recorder;
XinZhangMS 0:f7f1f0d76dd6 233 }
XinZhangMS 0:f7f1f0d76dd6 234
XinZhangMS 0:f7f1f0d76dd6 235 return result;
XinZhangMS 0:f7f1f0d76dd6 236 }
XinZhangMS 0:f7f1f0d76dd6 237
XinZhangMS 0:f7f1f0d76dd6 238 int umock_c_set_call_recorder(UMOCKCALLRECORDER_HANDLE call_recorder)
XinZhangMS 0:f7f1f0d76dd6 239 {
XinZhangMS 0:f7f1f0d76dd6 240 int result;
XinZhangMS 0:f7f1f0d76dd6 241
XinZhangMS 0:f7f1f0d76dd6 242 if (umock_c_state != UMOCK_C_STATE_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 243 {
XinZhangMS 0:f7f1f0d76dd6 244 /* Codes_SRS_UMOCK_C_01_033: [ If the module is not initialized, umock_c_set_call_recorder shall return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 245 UMOCK_LOG("umock_c_set_call_recorder: Cannot set the call recorder, umock_c not initialized.");
XinZhangMS 0:f7f1f0d76dd6 246 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 247 }
XinZhangMS 0:f7f1f0d76dd6 248 else if (call_recorder == NULL)
XinZhangMS 0:f7f1f0d76dd6 249 {
XinZhangMS 0:f7f1f0d76dd6 250 /* Codes_SRS_UMOCK_C_01_030: [ If call_recorder is NULL, umock_c_set_call_recorder shall return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 251 UMOCK_LOG("umock_c_set_call_recorder: NULL call_recorder.");
XinZhangMS 0:f7f1f0d76dd6 252 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 253 }
XinZhangMS 0:f7f1f0d76dd6 254 else
XinZhangMS 0:f7f1f0d76dd6 255 {
XinZhangMS 0:f7f1f0d76dd6 256 UMOCKCALLRECORDER_HANDLE new_call_recorder;
XinZhangMS 0:f7f1f0d76dd6 257
XinZhangMS 0:f7f1f0d76dd6 258 /* Codes_SRS_UMOCK_C_01_028: [ umock_c_set_call_recorder shall replace the currently used call recorder with the one identified by the call_recorder argument. ]*/
XinZhangMS 0:f7f1f0d76dd6 259 /* Codes_SRS_UMOCK_C_01_031: [ umock_c_set_call_recorder shall make a copy of call_recorder by calling umockcallrecorder_clone and use the copy for future actions. ]*/
XinZhangMS 0:f7f1f0d76dd6 260 new_call_recorder = umockcallrecorder_clone(call_recorder);
XinZhangMS 0:f7f1f0d76dd6 261 if (new_call_recorder == NULL)
XinZhangMS 0:f7f1f0d76dd6 262 {
XinZhangMS 0:f7f1f0d76dd6 263 /* Codes_SRS_UMOCK_C_01_032: [ If umockcallrecorder_clone fails, umock_c_set_call_recorder shall return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 264 UMOCK_LOG("umock_c_set_call_recorder: Failed cloning call recorder.");
XinZhangMS 0:f7f1f0d76dd6 265 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 266 }
XinZhangMS 0:f7f1f0d76dd6 267 else
XinZhangMS 0:f7f1f0d76dd6 268 {
XinZhangMS 0:f7f1f0d76dd6 269 /* Codes_SRS_UMOCK_C_01_034: [ The previously used call recorder shall be destroyed by calling umockcallrecorder_destroy. ]*/
XinZhangMS 0:f7f1f0d76dd6 270 umockcallrecorder_destroy(umock_call_recorder);
XinZhangMS 0:f7f1f0d76dd6 271 umock_call_recorder = new_call_recorder;
XinZhangMS 0:f7f1f0d76dd6 272
XinZhangMS 0:f7f1f0d76dd6 273 /* Codes_SRS_UMOCK_C_01_029: [ On success, umock_c_set_call_recorder shall return 0. ]*/
XinZhangMS 0:f7f1f0d76dd6 274 result = 0;
XinZhangMS 0:f7f1f0d76dd6 275 }
XinZhangMS 0:f7f1f0d76dd6 276 }
XinZhangMS 0:f7f1f0d76dd6 277
XinZhangMS 0:f7f1f0d76dd6 278 return result;
XinZhangMS 0:f7f1f0d76dd6 279 }