From 2094f0e30cbdfc67dd6f5ebe4081c1346af7c0e0 Mon Sep 17 00:00:00 2001 From: Marie Brunet Carteaux <marie.brunet@insa-rennes.fr> Date: Thu, 21 Apr 2016 16:51:44 +0200 Subject: [PATCH] Modifications du fichier ElderInternalIgnition.cbp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Intégration de la librairie Cmocka au dossier Libs - Configuration du projet pour permettre d'utiliser Cmocka --- .../ElderInternalIgnition.cbp | 7 +- .../CMake/cmocka/cmocka-config-version.cmake | 11 + .../CMake/cmocka/cmocka-config.cmake | 11 + Libs/cmocka-1.0.0/bin/libcmocka.dll | Bin 0 -> 167599 bytes Libs/cmocka-1.0.0/include/cmocka.h | 2044 +++++++++++++++++ Libs/cmocka-1.0.0/include/cmocka_pbc.h | 62 + Libs/cmocka-1.0.0/lib/cmocka.dll.a | Bin 0 -> 28648 bytes Libs/cmocka-1.0.0/lib/pkgconfig/cmocka.pc | 6 + 8 files changed, 2139 insertions(+), 2 deletions(-) create mode 100644 Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config-version.cmake create mode 100644 Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config.cmake create mode 100644 Libs/cmocka-1.0.0/bin/libcmocka.dll create mode 100644 Libs/cmocka-1.0.0/include/cmocka.h create mode 100644 Libs/cmocka-1.0.0/include/cmocka_pbc.h create mode 100644 Libs/cmocka-1.0.0/lib/cmocka.dll.a create mode 100644 Libs/cmocka-1.0.0/lib/pkgconfig/cmocka.pc diff --git a/ElderInternalIgnition/ElderInternalIgnition.cbp b/ElderInternalIgnition/ElderInternalIgnition.cbp index 8f30a66..e9f1db8 100644 --- a/ElderInternalIgnition/ElderInternalIgnition.cbp +++ b/ElderInternalIgnition/ElderInternalIgnition.cbp @@ -32,11 +32,14 @@ <Add directory="./../Libs/libroxml-2.3.0/src" /> <Add directory="./../src" /> <Add directory="./../Libs/SDL-1.2.15/include" /> + <Add directory="../Libs/cmocka-1.0.0/include" /> </Compiler> <Linker> - <Add library="..\Libs\libroxml-2.3.0\Build\libroxml.dll" /> - <Add library=".\..\Libs\SDL-1.2.15\bin\SDL.dll" /> + <Add library="../Libs/libroxml-2.3.0/Build/libroxml.dll" /> + <Add library="./../Libs/SDL-1.2.15/bin/SDL.dll" /> + <Add library="../Libs/cmocka-1.0.0/lib/cmocka.dll.a" /> <Add directory="./../Libs" /> + <Add directory="../Libs/cmocka-1.0.0/lib" /> </Linker> <Unit filename="../src/AffichageConsole.c"> <Option compilerVar="CC" /> diff --git a/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config-version.cmake b/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config-version.cmake new file mode 100644 index 0000000..71fee38 --- /dev/null +++ b/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config-version.cmake @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION 1.0.0) + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config.cmake b/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config.cmake new file mode 100644 index 0000000..607ef23 --- /dev/null +++ b/Libs/cmocka-1.0.0/CMake/cmocka/cmocka-config.cmake @@ -0,0 +1,11 @@ +get_filename_component(CMOCKA_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +if (EXISTS "${CMOCKA_CMAKE_DIR}/CMakeCache.txt") + # In build tree + include(${CMOCKA_CMAKE_DIR}/cmocka-build-tree-settings.cmake) +else() + set(CMOCKA_INCLUDE_DIR include) +endif() + +set(CMOCKA_LIBRARY lib/libcmocka.dll) +set(CMOCKA_LIBRARIES lib/libcmocka.dll) diff --git a/Libs/cmocka-1.0.0/bin/libcmocka.dll b/Libs/cmocka-1.0.0/bin/libcmocka.dll new file mode 100644 index 0000000000000000000000000000000000000000..37ca81266625f069e6631dff0a9b9fd120f51039 GIT binary patch literal 167599 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 Xlg(5~>S!)}d)0{b93KkYLn;3SvV4-G literal 0 HcmV?d00001 diff --git a/Libs/cmocka-1.0.0/include/cmocka.h b/Libs/cmocka-1.0.0/include/cmocka.h new file mode 100644 index 0000000..303d0ae --- /dev/null +++ b/Libs/cmocka-1.0.0/include/cmocka.h @@ -0,0 +1,2044 @@ +/* + * Copyright 2008 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef CMOCKA_H_ +#define CMOCKA_H_ + +#ifdef _WIN32 +# ifdef _MSC_VER + +# ifndef inline +#define inline __inline +# endif /* inline */ + +# if _MSC_VER < 1500 +# ifdef __cplusplus +extern "C" { +# endif /* __cplusplus */ +int __stdcall IsDebuggerPresent(); +# ifdef __cplusplus +} /* extern "C" */ +# endif /* __cplusplus */ +# endif /* _MSC_VER < 1500 */ +# endif /* _MSC_VER */ +#endif /* _WIN32 */ + +/** + * @defgroup cmocka The CMocka API + * + * These headers or their equivalents should be included prior to including + * this header file. + * @code + * #include <stdarg.h> + * #include <stddef.h> + * #include <setjmp.h> + * @endcode + * + * This allows test applications to use custom definitions of C standard + * library functions and types. + * + * @{ + */ + +/* For those who are used to __func__ from gcc. */ +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif + +/* If __WORDSIZE is not set, try to figure it out and default to 32 bit. */ +#ifndef __WORDSIZE +# if defined(__x86_64__) && !defined(__ILP32__) +# define __WORDSIZE 64 +# else +# define __WORDSIZE 32 +# endif +#endif + +#ifdef DOXYGEN +/** + * Largest integral type. This type should be large enough to hold any + * pointer or integer supported by the compiler. + */ +typedef uintmax_t LargestIntegralType; +#else /* DOXGEN */ +#ifndef LargestIntegralType +# if __WORDSIZE == 64 +# define LargestIntegralType unsigned long int +# else +# define LargestIntegralType unsigned long long int +# endif +#endif /* LargestIntegralType */ +#endif /* DOXYGEN */ + +/* Printf format used to display LargestIntegralType. */ +#ifndef LargestIntegralTypePrintfFormat +# ifdef _WIN32 +# define LargestIntegralTypePrintfFormat "0x%I64x" +# else +# if __WORDSIZE == 64 +# define LargestIntegralTypePrintfFormat "%#lx" +# else +# define LargestIntegralTypePrintfFormat "%#llx" +# endif +# endif /* _WIN32 */ +#endif /* LargestIntegralTypePrintfFormat */ + +/* Perform an unsigned cast to LargestIntegralType. */ +#define cast_to_largest_integral_type(value) \ + ((LargestIntegralType)(value)) + +/* Smallest integral type capable of holding a pointer. */ +#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED) +# if defined(_WIN32) + /* WIN32 is an ILP32 platform */ + typedef unsigned int uintptr_t; +# elif defined(_WIN64) + typedef unsigned long int uintptr_t +# else /* _WIN32 */ + +/* ILP32 and LP64 platforms */ +# ifdef __WORDSIZE /* glibc */ +# if __WORDSIZE == 64 + typedef unsigned long int uintptr_t; +# else + typedef unsigned int uintptr_t; +# endif /* __WORDSIZE == 64 */ +# else /* __WORDSIZE */ +# if defined(_LP64) || defined(_I32LPx) + typedef unsigned long int uintptr_t; +# else + typedef unsigned int uintptr_t; +# endif +# endif /* __WORDSIZE */ +# endif /* _WIN32 */ + +# define _UINTPTR_T +# define _UINTPTR_T_DEFINED +#endif /* !defined(_UINTPTR_T) || !defined(_UINTPTR_T_DEFINED) */ + +/* Perform an unsigned cast to uintptr_t. */ +#define cast_to_pointer_integral_type(value) \ + ((uintptr_t)((size_t)(value))) + +/* Perform a cast of a pointer to LargestIntegralType */ +#define cast_ptr_to_largest_integral_type(value) \ +cast_to_largest_integral_type(cast_to_pointer_integral_type(value)) + +/* GCC have printf type attribute check. */ +#ifdef __GNUC__ +#define CMOCKA_PRINTF_ATTRIBUTE(a,b) \ + __attribute__ ((__format__ (__printf__, a, b))) +#else +#define CMOCKA_PRINTF_ATTRIBUTE(a,b) +#endif /* __GNUC__ */ + +#if defined(__GNUC__) +#define CMOCKA_DEPRECATED __attribute__ ((deprecated)) +#elif defined(_MSC_VER) +#define CMOCKA_DEPRECATED __declspec(deprecated) +#else +#define CMOCKA_DEPRECATED +#endif + +/** + * @defgroup cmocka_mock Mock Objects + * @ingroup cmocka + * + * Mock objects mock objects are simulated objects that mimic the behavior of + * real objects. Instead of calling the real objects, the tested object calls a + * mock object that merely asserts that the correct methods were called, with + * the expected parameters, in the correct order. + * + * <ul> + * <li><strong>will_return(function, value)</strong> - The will_return() macro + * pushes a value onto a stack of mock values. This macro is intended to be + * used by the unit test itself, while programming the behaviour of the mocked + * object.</li> + * + * <li><strong>mock()</strong> - the mock macro pops a value from a stack of + * test values. The user of the mock() macro is the mocked object that uses it + * to learn how it should behave.</li> + * </ul> + * + * Because the will_return() and mock() are intended to be used in pairs, the + * cmocka library would fail the test if there are more values pushed onto the + * stack using will_return() than consumed with mock() and vice-versa. + * + * The following unit test stub illustrates how would a unit test instruct the + * mock object to return a particular value: + * + * @code + * will_return(chef_cook, "hotdog"); + * will_return(chef_cook, 0); + * @endcode + * + * Now the mock object can check if the parameter it received is the parameter + * which is expected by the test driver. This can be done the following way: + * + * @code + * int chef_cook(const char *order, char **dish_out) + * { + * check_expected(order); + * } + * @endcode + * + * For a complete example please at a look + * <a href="http://git.cryptomilk.org/projects/cmocka.git/tree/example/chef_wrap/waiter_test_wrap.c">here</a>. + * + * @{ + */ + +#ifdef DOXYGEN +/** + * @brief Retrieve a return value of the current function. + * + * @return The value which was stored to return by this function. + * + * @see will_return() + */ +LargestIntegralType mock(void); +#else +#define mock() _mock(__func__, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Retrieve a typed return value of the current function. + * + * The value would be casted to type internally to avoid having the + * caller to do the cast manually. + * + * @param[in] #type The expected type of the return value + * + * @return The value which was stored to return by this function. + * + * @code + * int param; + * + * param = mock_type(int); + * @endcode + * + * @see will_return() + * @see mock() + * @see mock_ptr_type() + */ +#type mock_type(#type); +#else +#define mock_type(type) ((type) mock()) +#endif + +#ifdef DOXYGEN +/** + * @brief Retrieve a typed return value of the current function. + * + * The value would be casted to type internally to avoid having the + * caller to do the cast manually but also casted to uintptr_t to make + * sure the result has a valid size to be used as a pointer. + * + * @param[in] #type The expected type of the return value + * + * @return The value which was stored to return by this function. + * + * @code + * char *param; + * + * param = mock_ptr_type(char *); + * @endcode + * + * @see will_return() + * @see mock() + * @see mock_type() + */ +type mock_ptr_type(#type); +#else +#define mock_ptr_type(type) ((type) (uintptr_t) mock()) +#endif + + +#ifdef DOXYGEN +/** + * @brief Store a value to be returned by mock() later. + * + * @param[in] #function The function which should return the given value. + * + * @param[in] value The value to be returned by mock(). + * + * @code + * int return_integer(void) + * { + * return (int)mock(); + * } + * + * static void test_integer_return(void **state) + * { + * will_return(return_integer, 42); + * + * assert_int_equal(my_function_calling_return_integer(), 42); + * } + * @endcode + * + * @see mock() + * @see will_return_count() + */ +void will_return(#function, LargestIntegralType value); +#else +#define will_return(function, value) \ + _will_return(#function, __FILE__, __LINE__, \ + cast_to_largest_integral_type(value), 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Store a value to be returned by mock() later. + * + * @param[in] #function The function which should return the given value. + * + * @param[in] value The value to be returned by mock(). + * + * @param[in] count The parameter returns the number of times the value should + * be returned by mock(). If count is set to -1 the value will + * always be returned. + * + * @see mock() + */ +void will_return_count(#function, LargestIntegralType value, int count); +#else +#define will_return_count(function, value, count) \ + _will_return(#function, __FILE__, __LINE__, \ + cast_to_largest_integral_type(value), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Store a value that will be always returned by mock(). + * + * @param[in] #function The function which should return the given value. + * + * @param[in] #value The value to be returned by mock(). + * + * This is equivalent to: + * @code + * will_return_count(function, value, -1); + * @endcode + * + * @see will_return_count() + * @see mock() + */ +void will_return_always(#function, LargestIntegralType value); +#else +#define will_return_always(function, value) \ + will_return_count(function, (value), -1) +#endif + +/** @} */ + +/** + * @defgroup cmocka_param Checking Parameters + * @ingroup cmocka + * + * Functionality to store expected values for mock function parameters. + * + * In addition to storing the return values of mock functions, cmocka provides + * functionality to store expected values for mock function parameters using + * the expect_*() functions provided. A mock function parameter can then be + * validated using the check_expected() macro. + * + * Successive calls to expect_*() macros for a parameter queues values to check + * the specified parameter. check_expected() checks a function parameter + * against the next value queued using expect_*(), if the parameter check fails + * a test failure is signalled. In addition if check_expected() is called and + * no more parameter values are queued a test failure occurs. + * + * The following test stub illustrates how to do this. First is the the function + * we call in the test driver: + * + * @code + * static void test_driver(void **state) + * { + * expect_string(chef_cook, order, "hotdog"); + * } + * @endcode + * + * Now the chef_cook function can check if the parameter we got passed is the + * parameter which is expected by the test driver. This can be done the + * following way: + * + * @code + * int chef_cook(const char *order, char **dish_out) + * { + * check_expected(order); + * } + * @endcode + * + * For a complete example please at a look at + * <a href="http://git.cryptomilk.org/projects/cmocka.git/tree/example/chef_wrap/waiter_test_wrap.c">here</a> + * + * @{ + */ + +/* + * Add a custom parameter checking function. If the event parameter is NULL + * the event structure is allocated internally by this function. If event + * parameter is provided it must be allocated on the heap and doesn't need to + * be deallocated by the caller. + */ +#ifdef DOXYGEN +/** + * @brief Add a custom parameter checking function. + * + * If the event parameter is NULL the event structure is allocated internally + * by this function. If the parameter is provided it must be allocated on the + * heap and doesn't need to be deallocated by the caller. + * + * @param[in] #function The function to add a custom parameter checking + * function for. + * + * @param[in] #parameter The parameters passed to the function. + * + * @param[in] #check_function The check function to call. + * + * @param[in] check_data The data to pass to the check function. + */ +void expect_check(#function, #parameter, #check_function, const void *check_data); +#else +#define expect_check(function, parameter, check_function, check_data) \ + _expect_check(#function, #parameter, __FILE__, __LINE__, check_function, \ + cast_to_largest_integral_type(check_data), NULL, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is part of the provided + * array. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value_array[] The array to check for the value. + * + * @see check_expected(). + */ +void expect_in_set(#function, #parameter, LargestIntegralType value_array[]); +#else +#define expect_in_set(function, parameter, value_array) \ + expect_in_set_count(function, parameter, value_array, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is part of the provided + * array. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value_array[] The array to check for the value. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_in_set_count(#function, #parameter, LargestIntegralType value_array[], size_t count); +#else +#define expect_in_set_count(function, parameter, value_array, count) \ + _expect_in_set(#function, #parameter, __FILE__, __LINE__, value_array, \ + sizeof(value_array) / sizeof((value_array)[0]), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is not part of the + * provided array. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value_array[] The array to check for the value. + * + * @see check_expected(). + */ +void expect_not_in_set(#function, #parameter, LargestIntegralType value_array[]); +#else +#define expect_not_in_set(function, parameter, value_array) \ + expect_not_in_set_count(function, parameter, value_array, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is not part of the + * provided array. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value_array[] The array to check for the value. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_not_in_set_count(#function, #parameter, LargestIntegralType value_array[], size_t count); +#else +#define expect_not_in_set_count(function, parameter, value_array, count) \ + _expect_not_in_set( \ + #function, #parameter, __FILE__, __LINE__, value_array, \ + sizeof(value_array) / sizeof((value_array)[0]), count) +#endif + + +#ifdef DOXYGEN +/** + * @brief Add an event to check a parameter is inside a numerical range. + * The check would succeed if minimum <= value <= maximum. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] minimum The lower boundary of the interval to check against. + * + * @param[in] maximum The upper boundary of the interval to check against. + * + * @see check_expected(). + */ +void expect_in_range(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum); +#else +#define expect_in_range(function, parameter, minimum, maximum) \ + expect_in_range_count(function, parameter, minimum, maximum, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check a parameter is inside a + * numerical range. The check would succeed if minimum <= value <= maximum. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] minimum The lower boundary of the interval to check against. + * + * @param[in] maximum The upper boundary of the interval to check against. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_in_range_count(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum, size_t count); +#else +#define expect_in_range_count(function, parameter, minimum, maximum, count) \ + _expect_in_range(#function, #parameter, __FILE__, __LINE__, minimum, \ + maximum, count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check a parameter is outside a numerical range. + * The check would succeed if minimum > value > maximum. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] minimum The lower boundary of the interval to check against. + * + * @param[in] maximum The upper boundary of the interval to check against. + * + * @see check_expected(). + */ +void expect_not_in_range(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum); +#else +#define expect_not_in_range(function, parameter, minimum, maximum) \ + expect_not_in_range_count(function, parameter, minimum, maximum, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check a parameter is outside a + * numerical range. The check would succeed if minimum > value > maximum. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] minimum The lower boundary of the interval to check against. + * + * @param[in] maximum The upper boundary of the interval to check against. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_not_in_range_count(#function, #parameter, LargestIntegralType minimum, LargestIntegralType maximum, size_t count); +#else +#define expect_not_in_range_count(function, parameter, minimum, maximum, \ + count) \ + _expect_not_in_range(#function, #parameter, __FILE__, __LINE__, \ + minimum, maximum, count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if a parameter is the given value. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value The value to check. + * + * @see check_expected(). + */ +void expect_value(#function, #parameter, LargestIntegralType value); +#else +#define expect_value(function, parameter, value) \ + expect_value_count(function, parameter, value, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check if a parameter is the given value. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value The value to check. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_value_count(#function, #parameter, LargestIntegralType value, size_t count); +#else +#define expect_value_count(function, parameter, value, count) \ + _expect_value(#function, #parameter, __FILE__, __LINE__, \ + cast_to_largest_integral_type(value), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if a parameter isn't the given value. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value The value to check. + * + * @see check_expected(). + */ +void expect_not_value(#function, #parameter, LargestIntegralType value); +#else +#define expect_not_value(function, parameter, value) \ + expect_not_value_count(function, parameter, value, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check if a parameter isn't the given value. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] value The value to check. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_not_value_count(#function, #parameter, LargestIntegralType value, size_t count); +#else +#define expect_not_value_count(function, parameter, value, count) \ + _expect_not_value(#function, #parameter, __FILE__, __LINE__, \ + cast_to_largest_integral_type(value), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is equal to the + * provided string. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] string The string value to compare. + * + * @see check_expected(). + */ +void expect_string(#function, #parameter, const char *string); +#else +#define expect_string(function, parameter, string) \ + expect_string_count(function, parameter, string, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value is equal to the + * provided string. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] string The string value to compare. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_string_count(#function, #parameter, const char *string, size_t count); +#else +#define expect_string_count(function, parameter, string, count) \ + _expect_string(#function, #parameter, __FILE__, __LINE__, \ + (const char*)(string), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value isn't equal to the + * provided string. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] string The string value to compare. + * + * @see check_expected(). + */ +void expect_not_string(#function, #parameter, const char *string); +#else +#define expect_not_string(function, parameter, string) \ + expect_not_string_count(function, parameter, string, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter value isn't equal to the + * provided string. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] string The string value to compare. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_not_string_count(#function, #parameter, const char *string, size_t count); +#else +#define expect_not_string_count(function, parameter, string, count) \ + _expect_not_string(#function, #parameter, __FILE__, __LINE__, \ + (const char*)(string), count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter does match an area of memory. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] memory The memory to compare. + * + * @param[in] size The size of the memory to compare. + * + * @see check_expected(). + */ +void expect_memory(#function, #parameter, void *memory, size_t size); +#else +#define expect_memory(function, parameter, memory, size) \ + expect_memory_count(function, parameter, memory, size, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check if the parameter does match an area + * of memory. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] memory The memory to compare. + * + * @param[in] size The size of the memory to compare. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_memory_count(#function, #parameter, void *memory, size_t size, size_t count); +#else +#define expect_memory_count(function, parameter, memory, size, count) \ + _expect_memory(#function, #parameter, __FILE__, __LINE__, \ + (const void*)(memory), size, count) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to check if the parameter doesn't match an area of + * memory. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] memory The memory to compare. + * + * @param[in] size The size of the memory to compare. + * + * @see check_expected(). + */ +void expect_not_memory(#function, #parameter, void *memory, size_t size); +#else +#define expect_not_memory(function, parameter, memory, size) \ + expect_not_memory_count(function, parameter, memory, size, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check if the parameter doesn't match an + * area of memory. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] memory The memory to compare. + * + * @param[in] size The size of the memory to compare. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_not_memory_count(#function, #parameter, void *memory, size_t size, size_t count); +#else +#define expect_not_memory_count(function, parameter, memory, size, count) \ + _expect_not_memory(#function, #parameter, __FILE__, __LINE__, \ + (const void*)(memory), size, count) +#endif + + +#ifdef DOXYGEN +/** + * @brief Add an event to check if a parameter (of any value) has been passed. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @see check_expected(). + */ +void expect_any(#function, #parameter); +#else +#define expect_any(function, parameter) \ + expect_any_count(function, parameter, 1) +#endif + +#ifdef DOXYGEN +/** + * @brief Add an event to repeatedly check if a parameter (of any value) has + * been passed. + * + * The event is triggered by calling check_expected() in the mocked function. + * + * @param[in] #function The function to add the check for. + * + * @param[in] #parameter The name of the parameter passed to the function. + * + * @param[in] count The count parameter returns the number of times the value + * should be returned by check_expected(). If count is set + * to -1 the value will always be returned. + * + * @see check_expected(). + */ +void expect_any_count(#function, #parameter, size_t count); +#else +#define expect_any_count(function, parameter, count) \ + _expect_any(#function, #parameter, __FILE__, __LINE__, count) +#endif + +#ifdef DOXYGEN +/** + * @brief Determine whether a function parameter is correct. + * + * This ensures the next value queued by one of the expect_*() macros matches + * the specified variable. + * + * This function needs to be called in the mock object. + * + * @param[in] #parameter The parameter to check. + */ +void check_expected(#parameter); +#else +#define check_expected(parameter) \ + _check_expected(__func__, #parameter, __FILE__, __LINE__, \ + cast_to_largest_integral_type(parameter)) +#endif + +#ifdef DOXYGEN +/** + * @brief Determine whether a function parameter is correct. + * + * This ensures the next value queued by one of the expect_*() macros matches + * the specified variable. + * + * This function needs to be called in the mock object. + * + * @param[in] #parameter The pointer to check. + */ +void check_expected_ptr(#parameter); +#else +#define check_expected_ptr(parameter) \ + _check_expected(__func__, #parameter, __FILE__, __LINE__, \ + cast_ptr_to_largest_integral_type(parameter)) +#endif + +/** @} */ + +/** + * @defgroup cmocka_asserts Assert Macros + * @ingroup cmocka + * + * This is a set of useful assert macros like the standard C libary's + * assert(3) macro. + * + * On an assertion failure a cmocka assert macro will write the failure to the + * standard error stream and signal a test failure. Due to limitations of the C + * language the general C standard library assert() and cmocka's assert_true() + * and assert_false() macros can only display the expression that caused the + * assert failure. cmocka's type specific assert macros, assert_{type}_equal() + * and assert_{type}_not_equal(), display the data that caused the assertion + * failure which increases data visibility aiding debugging of failing test + * cases. + * + * @{ + */ + +#ifdef DOXYGEN +/** + * @brief Assert that the given expression is true. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if expression is false (i.e., compares equal to + * zero). + * + * @param[in] expression The expression to evaluate. + * + * @see assert_int_equal() + * @see assert_string_equal() + */ +void assert_true(scalar expression); +#else +#define assert_true(c) _assert_true(cast_to_largest_integral_type(c), #c, \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the given expression is false. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if expression is true. + * + * @param[in] expression The expression to evaluate. + * + * @see assert_int_equal() + * @see assert_string_equal() + */ +void assert_false(scalar expression); +#else +#define assert_false(c) _assert_true(!(cast_to_largest_integral_type(c)), #c, \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the return_code is greater than or equal to 0. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the return code is smaller than 0. If the function + * you check sets an errno if it fails you can pass it to the function and + * it will be printed as part of the error message. + * + * @param[in] rc The return code to evaluate. + * + * @param[in] error Pass errno here or 0. + */ +void assert_return_code(int rc, int error); +#else +#define assert_return_code(rc, error) \ + _assert_return_code(cast_to_largest_integral_type(rc), \ + sizeof(rc), \ + cast_to_largest_integral_type(error), \ + #rc, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the given pointer is non-NULL. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the pointer is non-NULL. + * + * @param[in] pointer The pointer to evaluate. + * + * @see assert_null() + */ +void assert_non_null(void *pointer); +#else +#define assert_non_null(c) _assert_true(cast_ptr_to_largest_integral_type(c), #c, \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the given pointer is NULL. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the pointer is non-NULL. + * + * @param[in] pointer The pointer to evaluate. + * + * @see assert_non_null() + */ +void assert_null(void *pointer); +#else +#define assert_null(c) _assert_true(!(cast_ptr_to_largest_integral_type(c)), #c, \ +__FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given integers are equal. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the integers are not equal. + * + * @param[in] a The first integer to compare. + * + * @param[in] b The integer to compare against the first one. + */ +void assert_int_equal(int a, int b); +#else +#define assert_int_equal(a, b) \ + _assert_int_equal(cast_to_largest_integral_type(a), \ + cast_to_largest_integral_type(b), \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given integers are not equal. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the integers are equal. + * + * @param[in] a The first integer to compare. + * + * @param[in] b The integer to compare against the first one. + * + * @see assert_int_equal() + */ +void assert_int_not_equal(int a, int b); +#else +#define assert_int_not_equal(a, b) \ + _assert_int_not_equal(cast_to_largest_integral_type(a), \ + cast_to_largest_integral_type(b), \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given strings are equal. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the strings are not equal. + * + * @param[in] a The string to check. + * + * @param[in] b The other string to compare. + */ +void assert_string_equal(const char *a, const char *b); +#else +#define assert_string_equal(a, b) \ + _assert_string_equal((const char*)(a), (const char*)(b), __FILE__, \ + __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given strings are not equal. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the strings are equal. + * + * @param[in] a The string to check. + * + * @param[in] b The other string to compare. + */ +void assert_string_not_equal(const char *a, const char *b); +#else +#define assert_string_not_equal(a, b) \ + _assert_string_not_equal((const char*)(a), (const char*)(b), __FILE__, \ + __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given areas of memory are equal, otherwise fail. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the memory is not equal. + * + * @param[in] a The first memory area to compare + * (interpreted as unsigned char). + * + * @param[in] b The second memory area to compare + * (interpreted as unsigned char). + * + * @param[in] size The first n bytes of the memory areas to compare. + */ +void assert_memory_equal(const void *a, const void *b, size_t size); +#else +#define assert_memory_equal(a, b, size) \ + _assert_memory_equal((const void*)(a), (const void*)(b), size, __FILE__, \ + __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the two given areas of memory are not equal. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if the memory is equal. + * + * @param[in] a The first memory area to compare + * (interpreted as unsigned char). + * + * @param[in] b The second memory area to compare + * (interpreted as unsigned char). + * + * @param[in] size The first n bytes of the memory areas to compare. + */ +void assert_memory_not_equal(const void *a, const void *b, size_t size); +#else +#define assert_memory_not_equal(a, b, size) \ + _assert_memory_not_equal((const void*)(a), (const void*)(b), size, \ + __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the specified value is not smaller than the minimum + * and and not greater than the maximum. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if value is not in range. + * + * @param[in] value The value to check. + * + * @param[in] minimum The minimum value allowed. + * + * @param[in] maximum The maximum value allowed. + */ +void assert_in_range(LargestIntegralType value, LargestIntegralType minimum, LargestIntegralType maximum); +#else +#define assert_in_range(value, minimum, maximum) \ + _assert_in_range( \ + cast_to_largest_integral_type(value), \ + cast_to_largest_integral_type(minimum), \ + cast_to_largest_integral_type(maximum), __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the specified value is smaller than the minimum or + * greater than the maximum. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if value is in range. + * + * @param[in] value The value to check. + * + * @param[in] minimum The minimum value to compare. + * + * @param[in] maximum The maximum value to compare. + */ +void assert_not_in_range(LargestIntegralType value, LargestIntegralType minimum, LargestIntegralType maximum); +#else +#define assert_not_in_range(value, minimum, maximum) \ + _assert_not_in_range( \ + cast_to_largest_integral_type(value), \ + cast_to_largest_integral_type(minimum), \ + cast_to_largest_integral_type(maximum), __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the specified value is within a set. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if value is not within a set. + * + * @param[in] value The value to look up + * + * @param[in] values[] The array to check for the value. + * + * @param[in] count The size of the values array. + */ +void assert_in_set(LargestIntegralType value, LargestIntegralType values[], size_t count); +#else +#define assert_in_set(value, values, number_of_values) \ + _assert_in_set(value, values, number_of_values, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Assert that the specified value is not within a set. + * + * The function prints an error message to standard error and terminates the + * test by calling fail() if value is within a set. + * + * @param[in] value The value to look up + * + * @param[in] values[] The array to check for the value. + * + * @param[in] count The size of the values array. + */ +void assert_not_in_set(LargestIntegralType value, LargestIntegralType values[], size_t count); +#else +#define assert_not_in_set(value, values, number_of_values) \ + _assert_not_in_set(value, values, number_of_values, __FILE__, __LINE__) +#endif + +/** @} */ + +/** + * @defgroup cmocka_exec Running Tests + * @ingroup cmocka + * + * This is the way tests are executed with CMocka. + * + * The following example illustrates this macro's use with the unit_test macro. + * + * @code + * void Test0(void **state); + * void Test1(void **state); + * + * int main(void) + * { + * const struct CMUnitTest tests[] = { + * cmocka_unit_test(Test0), + * cmocka_unit_test(Test1), + * }; + * + * return cmocka_run_group_tests(tests, NULL, NULL); + * } + * @endcode + * + * @{ + */ + +#ifdef DOXYGEN +/** + * @brief Forces the test to fail immediately and quit. + */ +void fail(void); +#else +#define fail() _fail(__FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Forces the test to not be executed, but marked as skipped + */ +void skip(void); +#else +#define skip() _skip(__FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Forces the test to fail immediately and quit, printing the reason. + * + * @code + * fail_msg("This is some error message for test"); + * @endcode + * + * or + * + * @code + * char *error_msg = "This is some error message for test"; + * fail_msg("%s", error_msg); + * @endcode + */ +void fail_msg(const char *msg, ...); +#else +#define fail_msg(msg, ...) do { \ + print_error("ERROR: " msg "\n", ##__VA_ARGS__); \ + fail(); \ +} while (0) +#endif + +#ifdef DOXYGEN +/** + * @brief Generic method to run a single test. + * + * @deprecated This function was deprecated in favor of cmocka_run_group_tests + * + * @param[in] #function The function to test. + * + * @return 0 on success, 1 if an error occured. + * + * @code + * // A test case that does nothing and succeeds. + * void null_test_success(void **state) { + * } + * + * int main(void) { + * return run_test(null_test_success); + * } + * @endcode + */ +int run_test(#function); +#else +#define run_test(f) _run_test(#f, f, NULL, UNIT_TEST_FUNCTION_TYPE_TEST, NULL) +#endif + +static inline void _unit_test_dummy(void **state) { + (void)state; +} + +/** Initializes a UnitTest structure. + * + * @deprecated This function was deprecated in favor of cmocka_unit_test + */ +#define unit_test(f) { #f, f, UNIT_TEST_FUNCTION_TYPE_TEST } + +#define _unit_test_setup(test, setup) \ + { #test "_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_SETUP } + +/** Initializes a UnitTest structure with a setup function. + * + * @deprecated This function was deprecated in favor of cmocka_unit_test_setup + */ +#define unit_test_setup(test, setup) \ + _unit_test_setup(test, setup), \ + unit_test(test), \ + _unit_test_teardown(test, _unit_test_dummy) + +#define _unit_test_teardown(test, teardown) \ + { #test "_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_TEARDOWN } + +/** Initializes a UnitTest structure with a teardown function. + * + * @deprecated This function was deprecated in favor of cmocka_unit_test_teardown + */ +#define unit_test_teardown(test, teardown) \ + _unit_test_setup(test, _unit_test_dummy), \ + unit_test(test), \ + _unit_test_teardown(test, teardown) + +/** Initializes a UnitTest structure for a group setup function. + * + * @deprecated This function was deprecated in favor of cmocka_run_group_tests + */ +#define group_test_setup(setup) \ + { "group_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_GROUP_SETUP } + +/** Initializes a UnitTest structure for a group teardown function. + * + * @deprecated This function was deprecated in favor of cmocka_run_group_tests + */ +#define group_test_teardown(teardown) \ + { "group_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_GROUP_TEARDOWN } + +/** + * Initialize an array of UnitTest structures with a setup function for a test + * and a teardown function. Either setup or teardown can be NULL. + * + * @deprecated This function was deprecated in favor of + * cmocka_unit_test_setup_teardown + */ +#define unit_test_setup_teardown(test, setup, teardown) \ + _unit_test_setup(test, setup), \ + unit_test(test), \ + _unit_test_teardown(test, teardown) + + +/** Initializes a CMUnitTest structure. */ +#define cmocka_unit_test(f) { #f, f, NULL, NULL } + +/** Initializes a CMUnitTest structure with a setup function. */ +#define cmocka_unit_test_setup(f, setup) { #f, f, setup, NULL } + +/** Initializes a CMUnitTest structure with a teardown function. */ +#define cmocka_unit_test_teardown(f, teardown) { #f, f, NULL, teardown } + +/** + * Initialize an array of CMUnitTest structures with a setup function for a test + * and a teardown function. Either setup or teardown can be NULL. + */ +#define cmocka_unit_test_setup_teardown(f, setup, teardown) { #f, f, setup, teardown } + +#define run_tests(tests) _run_tests(tests, sizeof(tests) / sizeof(tests)[0]) +#define run_group_tests(tests) _run_group_tests(tests, sizeof(tests) / sizeof(tests)[0]) + +#ifdef DOXYGEN +/** + * @brief Run tests specified by an array of CMUnitTest structures. + * + * @param[in] group_tests[] The array of unit tests to execute. + * + * @param[in] group_setup The setup function which should be called before + * all unit tests are executed. + * + * @param[in] group_teardown The teardown function to be called after all + * tests have finished. + * + * @return 0 on success, or the number of failed tests. + * + * @code + * static int setup(void **state) { + * int *answer = malloc(sizeof(int)); + * if (*answer == NULL) { + * return -1; + * } + * *answer = 42; + * + * *state = answer; + * + * return 0; + * } + * + * static void teardown(void **state) { + * free(*state); + * + * return 0; + * } + * + * static void null_test_success(void **state) { + * (void) state; + * } + * + * static void int_test_success(void **state) { + * int *answer = *state; + * assert_int_equal(*answer, 42); + * } + * + * int main(void) { + * const struct CMUnitTest tests[] = { + * cmocka_unit_test(null_test_success), + * cmocka_unit_test_setup_teardown(int_test_success, setup, teardown), + * }; + * + * return cmocka_run_group_tests(tests, NULL, NULL); + * } + * @endcode + * + * @see cmocka_unit_test + * @see cmocka_unit_test_setup + * @see cmocka_unit_test_teardown + * @see cmocka_unit_test_setup_teardown + */ +int cmocka_run_group_tests(const struct CMUnitTest group_tests[], + CMFixtureFunction group_setup, + CMFixtureFunction group_teardown); +#else +# define cmocka_run_group_tests(group_tests, group_setup, group_teardown) \ + _cmocka_run_group_tests(#group_tests, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown) +#endif + +#ifdef DOXYGEN +/** + * @brief Run tests specified by an array of CMUnitTest structures and specify + * a name. + * + * @param[in] group_name The name of the group test. + * + * @param[in] group_tests[] The array of unit tests to execute. + * + * @param[in] group_setup The setup function which should be called before + * all unit tests are executed. + * + * @param[in] group_teardown The teardown function to be called after all + * tests have finished. + * + * @return 0 on success, or the number of failed tests. + * + * @code + * static int setup(void **state) { + * int *answer = malloc(sizeof(int)); + * if (*answer == NULL) { + * return -1; + * } + * *answer = 42; + * + * *state = answer; + * + * return 0; + * } + * + * static void teardown(void **state) { + * free(*state); + * + * return 0; + * } + * + * static void null_test_success(void **state) { + * (void) state; + * } + * + * static void int_test_success(void **state) { + * int *answer = *state; + * assert_int_equal(*answer, 42); + * } + * + * int main(void) { + * const struct CMUnitTest tests[] = { + * cmocka_unit_test(null_test_success), + * cmocka_unit_test_setup_teardown(int_test_success, setup, teardown), + * }; + * + * return cmocka_run_group_tests_name("success_test", tests, NULL, NULL); + * } + * @endcode + * + * @see cmocka_unit_test + * @see cmocka_unit_test_setup + * @see cmocka_unit_test_teardown + * @see cmocka_unit_test_setup_teardown + */ +int cmocka_run_group_tests_name(const char *group_name, + const struct CMUnitTest group_tests[], + CMFixtureFunction group_setup, + CMFixtureFunction group_teardown); +#else +# define cmocka_run_group_tests_name(group_name, group_tests, group_setup, group_teardown) \ + _cmocka_run_group_tests(group_name, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown) +#endif + +/** @} */ + +/** + * @defgroup cmocka_alloc Dynamic Memory Allocation + * @ingroup cmocka + * + * Memory leaks, buffer overflows and underflows can be checked using cmocka. + * + * To test for memory leaks, buffer overflows and underflows a module being + * tested by cmocka should replace calls to malloc(), calloc() and free() to + * test_malloc(), test_calloc() and test_free() respectively. Each time a block + * is deallocated using test_free() it is checked for corruption, if a corrupt + * block is found a test failure is signalled. All blocks allocated using the + * test_*() allocation functions are tracked by the cmocka library. When a test + * completes if any allocated blocks (memory leaks) remain they are reported + * and a test failure is signalled. + * + * For simplicity cmocka currently executes all tests in one process. Therefore + * all test cases in a test application share a single address space which + * means memory corruption from a single test case could potentially cause the + * test application to exit prematurely. + * + * @{ + */ + +#ifdef DOXYGEN +/** + * @brief Test function overriding malloc. + * + * @param[in] size The bytes which should be allocated. + * + * @return A pointer to the allocated memory or NULL on error. + * + * @code + * #ifdef UNIT_TESTING + * extern void* _test_malloc(const size_t size, const char* file, const int line); + * + * #define malloc(size) _test_malloc(size, __FILE__, __LINE__) + * #endif + * + * void leak_memory() { + * int * const temporary = (int*)malloc(sizeof(int)); + * *temporary = 0; + * } + * @endcode + * + * @see malloc(3) + */ +void *test_malloc(size_t size); +#else +#define test_malloc(size) _test_malloc(size, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Test function overriding calloc. + * + * The memory is set to zero. + * + * @param[in] nmemb The number of elements for an array to be allocated. + * + * @param[in] size The size in bytes of each array element to allocate. + * + * @return A pointer to the allocated memory, NULL on error. + * + * @see calloc(3) + */ +void *test_calloc(size_t nmemb, size_t size); +#else +#define test_calloc(num, size) _test_calloc(num, size, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Test function overriding realloc which detects buffer overruns + * and memoery leaks. + * + * @param[in] ptr The memory block which should be changed. + * + * @param[in] size The bytes which should be allocated. + * + * @return The newly allocated memory block, NULL on error. + */ +void *test_realloc(void *ptr, size_t size); +#else +#define test_realloc(ptr, size) _test_realloc(ptr, size, __FILE__, __LINE__) +#endif + +#ifdef DOXYGEN +/** + * @brief Test function overriding free(3). + * + * @param[in] ptr The pointer to the memory space to free. + * + * @see free(3). + */ +void test_free(void *ptr); +#else +#define test_free(ptr) _test_free(ptr, __FILE__, __LINE__) +#endif + +/* Redirect malloc, calloc and free to the unit test allocators. */ +#ifdef UNIT_TESTING +#define malloc test_malloc +#define realloc test_realloc +#define calloc test_calloc +#define free test_free +#endif /* UNIT_TESTING */ + +/** @} */ + + +/** + * @defgroup cmocka_mock_assert Standard Assertions + * @ingroup cmocka + * + * How to handle assert(3) of the standard C library. + * + * Runtime assert macros like the standard C library's assert() should be + * redefined in modules being tested to use cmocka's mock_assert() function. + * Normally mock_assert() signals a test failure. If a function is called using + * the expect_assert_failure() macro, any calls to mock_assert() within the + * function will result in the execution of the test. If no calls to + * mock_assert() occur during the function called via expect_assert_failure() a + * test failure is signalled. + * + * @{ + */ + +/** + * @brief Function to replace assert(3) in tested code. + * + * In conjuction with check_assert() it's possible to determine whether an + * assert condition has failed without stopping a test. + * + * @param[in] result The expression to assert. + * + * @param[in] expression The expression as string. + * + * @param[in] file The file mock_assert() is called. + * + * @param[in] line The line mock_assert() is called. + * + * @code + * #ifdef UNIT_TESTING + * extern void mock_assert(const int result, const char* const expression, + * const char * const file, const int line); + * + * #undef assert + * #define assert(expression) \ + * mock_assert((int)(expression), #expression, __FILE__, __LINE__); + * #endif + * + * void increment_value(int * const value) { + * assert(value); + * (*value) ++; + * } + * @endcode + * + * @see assert(3) + * @see expect_assert_failure + */ +void mock_assert(const int result, const char* const expression, + const char * const file, const int line); + +#ifdef DOXYGEN +/** + * @brief Ensure that mock_assert() is called. + * + * If mock_assert() is called the assert expression string is returned. + * + * @param[in] fn_call The function will will call mock_assert(). + * + * @code + * #define assert mock_assert + * + * void showmessage(const char *message) { + * assert(message); + * } + * + * int main(int argc, const char* argv[]) { + * expect_assert_failure(show_message(NULL)); + * printf("succeeded\n"); + * return 0; + * } + * @endcode + * + */ +void expect_assert_failure(function fn_call); +#else +#define expect_assert_failure(function_call) \ + { \ + const int result = setjmp(global_expect_assert_env); \ + global_expecting_assert = 1; \ + if (result) { \ + print_message("Expected assertion %s occurred\n", \ + global_last_failed_assert); \ + global_expecting_assert = 0; \ + } else { \ + function_call ; \ + global_expecting_assert = 0; \ + print_error("Expected assert in %s\n", #function_call); \ + _fail(__FILE__, __LINE__); \ + } \ + } +#endif + +/** @} */ + +/* Function prototype for setup, test and teardown functions. */ +typedef void (*UnitTestFunction)(void **state); + +/* Function that determines whether a function parameter value is correct. */ +typedef int (*CheckParameterValue)(const LargestIntegralType value, + const LargestIntegralType check_value_data); + +/* Type of the unit test function. */ +typedef enum UnitTestFunctionType { + UNIT_TEST_FUNCTION_TYPE_TEST = 0, + UNIT_TEST_FUNCTION_TYPE_SETUP, + UNIT_TEST_FUNCTION_TYPE_TEARDOWN, + UNIT_TEST_FUNCTION_TYPE_GROUP_SETUP, + UNIT_TEST_FUNCTION_TYPE_GROUP_TEARDOWN, +} UnitTestFunctionType; + +/* + * Stores a unit test function with its name and type. + * NOTE: Every setup function must be paired with a teardown function. It's + * possible to specify NULL function pointers. + */ +typedef struct UnitTest { + const char* name; + UnitTestFunction function; + UnitTestFunctionType function_type; +} UnitTest; + +typedef struct GroupTest { + UnitTestFunction setup; + UnitTestFunction teardown; + const UnitTest *tests; + const size_t number_of_tests; +} GroupTest; + +/* Function prototype for test functions. */ +typedef void (*CMUnitTestFunction)(void **state); + +/* Function prototype for setup and teardown functions. */ +typedef int (*CMFixtureFunction)(void **state); + +struct CMUnitTest { + const char *name; + CMUnitTestFunction test_func; + CMFixtureFunction setup_func; + CMFixtureFunction teardown_func; +}; + +/* Location within some source code. */ +typedef struct SourceLocation { + const char* file; + int line; +} SourceLocation; + +/* Event that's called to check a parameter value. */ +typedef struct CheckParameterEvent { + SourceLocation location; + const char *parameter_name; + CheckParameterValue check_value; + LargestIntegralType check_value_data; +} CheckParameterEvent; + +/* Used by expect_assert_failure() and mock_assert(). */ +extern int global_expecting_assert; +extern jmp_buf global_expect_assert_env; +extern const char * global_last_failed_assert; + +/* Retrieves a value for the given function, as set by "will_return". */ +LargestIntegralType _mock(const char * const function, const char* const file, + const int line); + +void _expect_check( + const char* const function, const char* const parameter, + const char* const file, const int line, + const CheckParameterValue check_function, + const LargestIntegralType check_data, CheckParameterEvent * const event, + const int count); + +void _expect_in_set( + const char* const function, const char* const parameter, + const char* const file, const int line, const LargestIntegralType values[], + const size_t number_of_values, const int count); +void _expect_not_in_set( + const char* const function, const char* const parameter, + const char* const file, const int line, const LargestIntegralType values[], + const size_t number_of_values, const int count); + +void _expect_in_range( + const char* const function, const char* const parameter, + const char* const file, const int line, + const LargestIntegralType minimum, + const LargestIntegralType maximum, const int count); +void _expect_not_in_range( + const char* const function, const char* const parameter, + const char* const file, const int line, + const LargestIntegralType minimum, + const LargestIntegralType maximum, const int count); + +void _expect_value( + const char* const function, const char* const parameter, + const char* const file, const int line, const LargestIntegralType value, + const int count); +void _expect_not_value( + const char* const function, const char* const parameter, + const char* const file, const int line, const LargestIntegralType value, + const int count); + +void _expect_string( + const char* const function, const char* const parameter, + const char* const file, const int line, const char* string, + const int count); +void _expect_not_string( + const char* const function, const char* const parameter, + const char* const file, const int line, const char* string, + const int count); + +void _expect_memory( + const char* const function, const char* const parameter, + const char* const file, const int line, const void* const memory, + const size_t size, const int count); +void _expect_not_memory( + const char* const function, const char* const parameter, + const char* const file, const int line, const void* const memory, + const size_t size, const int count); + +void _expect_any( + const char* const function, const char* const parameter, + const char* const file, const int line, const int count); + +void _check_expected( + const char * const function_name, const char * const parameter_name, + const char* file, const int line, const LargestIntegralType value); + +void _will_return(const char * const function_name, const char * const file, + const int line, const LargestIntegralType value, + const int count); +void _assert_true(const LargestIntegralType result, + const char* const expression, + const char * const file, const int line); +void _assert_return_code(const LargestIntegralType result, + size_t rlen, + const LargestIntegralType error, + const char * const expression, + const char * const file, + const int line); +void _assert_int_equal( + const LargestIntegralType a, const LargestIntegralType b, + const char * const file, const int line); +void _assert_int_not_equal( + const LargestIntegralType a, const LargestIntegralType b, + const char * const file, const int line); +void _assert_string_equal(const char * const a, const char * const b, + const char * const file, const int line); +void _assert_string_not_equal(const char * const a, const char * const b, + const char *file, const int line); +void _assert_memory_equal(const void * const a, const void * const b, + const size_t size, const char* const file, + const int line); +void _assert_memory_not_equal(const void * const a, const void * const b, + const size_t size, const char* const file, + const int line); +void _assert_in_range( + const LargestIntegralType value, const LargestIntegralType minimum, + const LargestIntegralType maximum, const char* const file, const int line); +void _assert_not_in_range( + const LargestIntegralType value, const LargestIntegralType minimum, + const LargestIntegralType maximum, const char* const file, const int line); +void _assert_in_set( + const LargestIntegralType value, const LargestIntegralType values[], + const size_t number_of_values, const char* const file, const int line); +void _assert_not_in_set( + const LargestIntegralType value, const LargestIntegralType values[], + const size_t number_of_values, const char* const file, const int line); + +void* _test_malloc(const size_t size, const char* file, const int line); +void* _test_realloc(void *ptr, const size_t size, const char* file, const int line); +void* _test_calloc(const size_t number_of_elements, const size_t size, + const char* file, const int line); +void _test_free(void* const ptr, const char* file, const int line); + +void _fail(const char * const file, const int line); + +void _skip(const char * const file, const int line); + +int _run_test( + const char * const function_name, const UnitTestFunction Function, + void ** const volatile state, const UnitTestFunctionType function_type, + const void* const heap_check_point); +CMOCKA_DEPRECATED int _run_tests(const UnitTest * const tests, + const size_t number_of_tests); +CMOCKA_DEPRECATED int _run_group_tests(const UnitTest * const tests, + const size_t number_of_tests); + +/* Test runner */ +int _cmocka_run_group_tests(const char *group_name, + const struct CMUnitTest * const tests, + const size_t num_tests, + CMFixtureFunction group_setup, + CMFixtureFunction group_teardown); + +/* Standard output and error print methods. */ +void print_message(const char* const format, ...) CMOCKA_PRINTF_ATTRIBUTE(1, 2); +void print_error(const char* const format, ...) CMOCKA_PRINTF_ATTRIBUTE(1, 2); +void vprint_message(const char* const format, va_list args) CMOCKA_PRINTF_ATTRIBUTE(1, 0); +void vprint_error(const char* const format, va_list args) CMOCKA_PRINTF_ATTRIBUTE(1, 0); + +enum cm_message_output { + CM_OUTPUT_STDOUT, + CM_OUTPUT_SUBUNIT, + CM_OUTPUT_TAP, + CM_OUTPUT_XML, +}; + +/** + * @brief Function to set the output format for a test. + * + * The ouput format for the test can either be set globally using this + * function or overriden with environment variable CMOCKA_MESSAGE_OUTPUT. + * + * The environment variable can be set to either STDOUT, SUBUNIT, TAP or XML. + * + * @param[in] output The output format to use for the test. + * + */ +void cmocka_set_message_output(enum cm_message_output output); + +/** @} */ + +#endif /* CMOCKA_H_ */ diff --git a/Libs/cmocka-1.0.0/include/cmocka_pbc.h b/Libs/cmocka-1.0.0/include/cmocka_pbc.h new file mode 100644 index 0000000..a2a1bc1 --- /dev/null +++ b/Libs/cmocka-1.0.0/include/cmocka_pbc.h @@ -0,0 +1,62 @@ +/* + * Copyright 2014 Luis Pabon, Jr. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Programming by Contract is a programming methodology + * which binds the caller and the function called to a + * contract. The contract is represented using Hoare Triple: + * {P} C {Q} + * where {P} is the precondition before executing command C, + * and {Q} is the postcondition. + * + * See also: + * http://en.wikipedia.org/wiki/Design_by_contract + * http://en.wikipedia.org/wiki/Hoare_logic + * http://dlang.org/dbc.html + */ +#ifndef CMOCKA_PBC_H_ +#define CMOCKA_PBC_H_ + +#if defined(UNIT_TESTING) || defined (DEBUG) + +#include <assert.h> + +/* + * Checks caller responsibility against contract + */ +#define REQUIRE(cond) assert(cond) + +/* + * Checks function reponsability against contract. + */ +#define ENSURE(cond) assert(cond) + +/* + * While REQUIRE and ENSURE apply to functions, INVARIANT + * applies to classes/structs. It ensures that intances + * of the class/struct are consistent. In other words, + * that the instance has not been corrupted. + */ +#define INVARIANT(invariant_fnc) do{ (invariant_fnc) } while (0); + +#else +#define REQUIRE(cond) do { } while (0); +#define ENSURE(cond) do { } while (0); +#define INVARIANT(invariant_fnc) do{ } while (0); + +#endif /* defined(UNIT_TESTING) || defined (DEBUG) */ +#endif /* CMOCKA_PBC_H_ */ + diff --git a/Libs/cmocka-1.0.0/lib/cmocka.dll.a b/Libs/cmocka-1.0.0/lib/cmocka.dll.a new file mode 100644 index 0000000000000000000000000000000000000000..1293efcf0824b34d9b8ee900ae3b314c16b255bc GIT binary patch literal 28648 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 Suh<AEzkoplXU6>cNctb{!dN8$ literal 0 HcmV?d00001 diff --git a/Libs/cmocka-1.0.0/lib/pkgconfig/cmocka.pc b/Libs/cmocka-1.0.0/lib/pkgconfig/cmocka.pc new file mode 100644 index 0000000..654416e --- /dev/null +++ b/Libs/cmocka-1.0.0/lib/pkgconfig/cmocka.pc @@ -0,0 +1,6 @@ +Name: cmocka +Description: The cmocka unit testing library +Version: 1.0.0 +Libs: -Llib -lcmocka +Cflags: -Iinclude + -- GitLab