diff --git a/resources/header/stub.h b/resources/header/stub.h new file mode 100644 index 0000000..f1e70e1 --- /dev/null +++ b/resources/header/stub.h @@ -0,0 +1,33 @@ +/*! + * @file + * @brief General definitions for stubs + * + * Project: + * Subsystem: + * Module: unit_tests + * Code: GNU-C + * + * @date 06.07.2016 + * @author Martin Winkler + */ +#ifndef STUB_H_ +#define STUB_H_ + +/*! + * @name Stub run definitions + * Definitions if a stub call should be a PASS or FAIL + * @{*/ +#define STUB_CALL_FAIL 0 +#define STUB_CALL_PASS 1 +/*!@}*/ + +/*! @brief How to handle pointer parameter */ +typedef enum _STUB_PARAMETER_POINTER_HANDLING_T +{ + STUB_PARAMETER_POINTER_HANDLING_ADDRESS, /*!< @brief Compare addresses */ + STUB_PARAMETER_POINTER_HANDLING_CONTENT, /*!< @brief Compare content byte wise at given address */ + STUB_PARAMETER_POINTER_HANDLING_INJECT, /*!< @brief Use init. parameter to inject values to test subject */ + STUB_PARAMETER_POINTER_HANDLING_LAST_ENUM +} stub_parameter_pointer_handling_t; + +#endif /* STUB_H_ */ diff --git a/resources/header/xasserts.h b/resources/header/xasserts.h new file mode 100644 index 0000000..707bfe6 --- /dev/null +++ b/resources/header/xasserts.h @@ -0,0 +1,117 @@ +/*! + * @file xasserts.h + * @brief Extended asserts for use with CUnit + * @details + * Project: + * Subsystem: + * Module: + * Code: GNU-C + * + * @date 08.03.2017 + * @author Martin Winkler + */ +#ifndef XASSERTS_H_ +#define XASSERTS_H_ + +#include "CUnit/TestRun.h" + +/*! + * @brief Assert a failed test with variable name and value + * @param Msg Custom string displayed before variable + * @param Name Name of the variable to display + * @param Format printf format string for variable (e.g. "%u", "0x%.2X", ...) + */ +#define CU_FAIL_OUTPUT(Msg,Name,Format)\ + {\ + char aErrMsg[255];\ + sprintf(aErrMsg, "CU_FAIL_OUTPUT - %s%s: "Format, Msg ,#Name, Name);\ + CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ + } + +/*! + * @brief Assert a failed test only with variable value and custom text + * @param Msg Custom string displayed before variable + * @param Name Name of the variable to display + * @param Format printf format string for variable (e.g. "%u", "0x%.2X", ...) + */ +#define CU_FAIL_OUTPUT_LESS(Msg,Name,Format)\ + {\ + char aErrMsg[255];\ + sprintf(aErrMsg, "CU_FAIL_OUTPUT - %s"Format, Msg, Name);\ + CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ + } + +/*! + * @brief Compare inputs and output actual value in error message + * @attention Do NOT place function calls as parameter actual, as it will be executed twice + */ +#define CU_ASSERT_EQUAL_OUTPUT(actual, expected, format)\ + {\ + char aErrMsg[255];\ + sprintf(aErrMsg, ("CU_ASSERT_EQUAL(" #actual "," #expected ") "format), actual);\ + CU_assertImplementation(((actual) == (expected)), __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ + } + +/*! + * @brief Assert definition of macro for array check. + * @param pData Pointer on test data + * @param pExpected_data Pointer on expected test data + * @param u32Size Amount of array elements + * + * Macro checks if all array members in the array range defined by parameter size are equal. + * If not an error message is generated. + */ +#define CU_ASSERT_ARRAY_CHECK(Name, pData, pExpected_data, u32Size)\ + {\ + uint8_t bError = 0;\ + uint32_t u32MemCnt;\ + char aErrMsg[255];\ + for (u32MemCnt = 0; u32MemCnt < u32Size; u32MemCnt++)\ + {\ + if (*(pData + u32MemCnt) != *(pExpected_data + u32MemCnt))\ + {\ + bError = 1;\ + sprintf(aErrMsg, "CU_ASSERT_ARRAY_CHECK - %s[%d], act: 0x%.2X, exp: 0x%.2X", \ + Name, u32MemCnt, *(pData + u32MemCnt), *(pExpected_data + u32MemCnt));\ + CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ + break;\ + }\ + }\ + if (0 == bError)\ + {\ + CU_ASSERT(1);\ + }\ + } + +/*! + * @brief Assert definition of macro for memory check. + * @param pData Pointer on test data + * @param pExpected_data Pointer on expected test data + * @param u32Size Memory size in bytes + * + * Macro checks if all bytes in the memory range defined by parameter size are equal. + * If not an error message is generated. + */ +#define CU_ASSERT_MEMORY_CHECK(Name, pData, pExpected_data, u32Size)\ + {\ + uint8_t bError = 0;\ + uint32_t u32MemCnt;\ + char aErrMsg[255];\ + for (u32MemCnt = 0; u32MemCnt < u32Size; u32MemCnt++)\ + {\ + if (*((uint8_t*)pData + u32MemCnt) != *((uint8_t*)pExpected_data + u32MemCnt))\ + {\ + bError = 1;\ + sprintf(aErrMsg, "CU_ASSERT_MEMORY_CHECK - %s, Offset: %d, act: 0x%.2X, exp: 0x%.2X", \ + Name, u32MemCnt, *((uint8_t*)pData + u32MemCnt), *((uint8_t*)pExpected_data + u32MemCnt));\ + CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ + break;\ + }\ + }\ + if (0 == bError)\ + {\ + CU_ASSERT(1);\ + }\ + } + +#endif /* XASSERTS_H_ */