|
@@ -0,0 +1,7092 @@
|
|
|
|
|
+/*
|
|
|
|
|
+ * Copyright 2008 Google Inc.
|
|
|
|
|
+ * Copyright 2014-2022 Andreas Schneider <asn@cryptomilk.org>
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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 CMOCKA_STATIC
|
|
|
|
|
+# ifdef CMOCKA_EXPORTS
|
|
|
|
|
+#define CMOCKA_DLLEXTERN __declspec(dllexport)
|
|
|
|
|
+# else
|
|
|
|
|
+#define CMOCKA_DLLEXTERN __declspec(dllimport)
|
|
|
|
|
+# endif /* CMOCKA_EXPORTS */
|
|
|
|
|
+# endif /* ndef CMOCKA_STATIC */
|
|
|
|
|
+
|
|
|
|
|
+#ifndef __func__
|
|
|
|
|
+#define __func__ __FUNCTION__
|
|
|
|
|
+#endif /* __func__ */
|
|
|
|
|
+
|
|
|
|
|
+#ifndef inline
|
|
|
|
|
+#define inline __inline
|
|
|
|
|
+#endif /* inline */
|
|
|
|
|
+
|
|
|
|
|
+# endif /* _MSC_VER */
|
|
|
|
|
+#endif /* _WIN32 */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @def CMOCKA_DLLEXTERN
|
|
|
|
|
+ * This attribute is needed when dynamically linking to a data object in a DLL.
|
|
|
|
|
+ * It's optional (but increases performance) for dynamically linking to
|
|
|
|
|
+ * functions in a DLL.
|
|
|
|
|
+ * @see
|
|
|
|
|
+ * https://github.com/MicrosoftDocs/cpp-docs/blob/bd5a4fbd8ea3dd47b5c7a228c266cdddcaca0e00/docs/cpp/dllexport-dllimport.md
|
|
|
|
|
+ */
|
|
|
|
|
+#ifndef CMOCKA_DLLEXTERN
|
|
|
|
|
+#define CMOCKA_DLLEXTERN // only needed on MSVC compiler when using a DLL
|
|
|
|
|
+#endif /* ndef CMOCKA_DLLEXTERN */
|
|
|
|
|
+
|
|
|
|
|
+#ifdef __cplusplus
|
|
|
|
|
+extern "C" {
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka 📚 The CMocka API
|
|
|
|
|
+ * @brief Unit testing framework for C with support for mock objects.
|
|
|
|
|
+ *
|
|
|
|
|
+ * cmocka is an elegant unit testing framework for C with support for mock
|
|
|
|
|
+ * objects. It only requires the standard C library, works on a lot of platforms
|
|
|
|
|
+ * (including embedded) and with different compilers.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @section cmocka-includes Standard includes
|
|
|
|
|
+ *
|
|
|
|
|
+ * CMocka requires the include of the following list of standard headers or
|
|
|
|
|
+ * their equivalent.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * #include <stdarg.h>
|
|
|
|
|
+ * #include <stdbool.h>
|
|
|
|
|
+ * #include <stddef.h>
|
|
|
|
|
+ * #include <stdint.h>
|
|
|
|
|
+ * #include <setjmp.h>
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * The header file 'cmocka.h' includes those headers already and in case your
|
|
|
|
|
+ * platform does not provide those header files, you must
|
|
|
|
|
+ * `#define CMOCKA_NO_STANDARD_INCLUDES` in order to prevent the include of
|
|
|
|
|
+ * those files.
|
|
|
|
|
+ *
|
|
|
|
|
+ * An example of how your code which uses CMocka could look like is given below.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * #include "path/to/cmocka_platform.h"
|
|
|
|
|
+ * #define CMOCKA_NO_STANDARD_INCLUDES
|
|
|
|
|
+ * #include <cmocka.h>
|
|
|
|
|
+ * // ... your test code goes here ...
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+#ifndef CMOCKA_NO_STANDARD_INCLUDES
|
|
|
|
|
+#include <stdarg.h>
|
|
|
|
|
+#include <stdbool.h>
|
|
|
|
|
+#include <stddef.h>
|
|
|
|
|
+#include <stdint.h>
|
|
|
|
|
+#include <setjmp.h>
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_util 🔨 Utility Macros and Types
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Type conversions, casting helpers, and common data structures.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Internal utilities and data types used throughout the CMocka API.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+/* Perform an signed cast to intmax_t. */
|
|
|
|
|
+#define cast_to_intmax_type(value) \
|
|
|
|
|
+ ((intmax_t)(value))
|
|
|
|
|
+
|
|
|
|
|
+/* Perform an unsigned cast to uintmax_t. */
|
|
|
|
|
+#define cast_to_uintmax_type(value) \
|
|
|
|
|
+ ((uintmax_t)(value))
|
|
|
|
|
+
|
|
|
|
|
+/* Perform a safe cast from pointer to uintmax_t. */
|
|
|
|
|
+#define cast_ptr_to_uintmax_type(value) \
|
|
|
|
|
+ ((uintmax_t)(uintptr_t)(value))
|
|
|
|
|
+
|
|
|
|
|
+/* Perform cast to double. */
|
|
|
|
|
+#define cast_to_double_type(value) \
|
|
|
|
|
+ ((double)(value))
|
|
|
|
|
+
|
|
|
|
|
+/* Perform cast to float. */
|
|
|
|
|
+#define cast_to_float_type(value) \
|
|
|
|
|
+ ((float)(value))
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Perform cast to void pointer.
|
|
|
|
|
+ *
|
|
|
|
|
+ * ISO C forbids conversion between function pointers and void*. This macro
|
|
|
|
|
+ * provides a portable way to perform such conversions by casting through
|
|
|
|
|
+ * uintptr_t, which is allowed by POSIX and works on all practical platforms.
|
|
|
|
|
+ */
|
|
|
|
|
+#define cast_to_void_pointer(ptr) \
|
|
|
|
|
+ ((void *)(uintptr_t)(ptr))
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Perform a cast from an integer to CMockaValueData.
|
|
|
|
|
+ *
|
|
|
|
|
+ * For backwards compatibility reasons, this explicitly casts to `uintmax_t`.
|
|
|
|
|
+ * For most compilers, this will suppress warnings about passing float/intmax_t
|
|
|
|
|
+ * to this macro.
|
|
|
|
|
+ */
|
|
|
|
|
+#define cast_int_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .uint_val = (uintmax_t)(value) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/** Perform a cast from a pointer to CMockaValueData. */
|
|
|
|
|
+#define cast_ptr_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .const_ptr = (value) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/** Assign an integer value to CMockaValueData. */
|
|
|
|
|
+#define assign_int_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .int_val = (value) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/** Assign an unsigned integer value to CMockaValueData. */
|
|
|
|
|
+#define assign_uint_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .uint_val = (value) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/** Assign a floating point value to CMockaValueData. */
|
|
|
|
|
+#define assign_float_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .float_val = ((float)(value)) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/** Assign a double floating point value to CMockaValueData. */
|
|
|
|
|
+#define assign_double_to_cmocka_value(value) \
|
|
|
|
|
+ (CMockaValueData) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ .real_val = ((double)(value)) \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+/* Nested macros are not expanded when they appear along with # or ## */
|
|
|
|
|
+#define cmocka_tostring(val) #val
|
|
|
|
|
+
|
|
|
|
|
+/** @cond INTERNAL */
|
|
|
|
|
+/* 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(CMOCKA_DISABLE_DEPRECATION_WARNINGS) || defined(CMOCKA_DISABLE_DEPRECTATION_WARNINGS)
|
|
|
|
|
+#define CMOCKA_DEPRECATED
|
|
|
|
|
+#define CMOCKA_DEPRECATION_WARNING(msg)
|
|
|
|
|
+#else /* CMOCKA_DISABLE_DEPRECATION_WARNINGS */
|
|
|
|
|
+
|
|
|
|
|
+/* Deprecation warnings for functions */
|
|
|
|
|
+#if defined(__GNUC__)
|
|
|
|
|
+#define CMOCKA_DEPRECATED __attribute__ ((deprecated))
|
|
|
|
|
+#else
|
|
|
|
|
+/* MSVC requires __declspec(deprecated) before the function declaration,
|
|
|
|
|
+ * not after it. Since we already use CMOCKA_DEPRECATION_WARNING() in
|
|
|
|
|
+ * the macro wrappers, we don't need function-level deprecation for MSVC. */
|
|
|
|
|
+#define CMOCKA_DEPRECATED
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/* Deprecation warnings for macros */
|
|
|
|
|
+#if defined(__GNUC__) || defined(__clang__)
|
|
|
|
|
+/* Use a deprecated typedef in a statement expression to generate warnings
|
|
|
|
|
+ * that work even when the header is included as a system header (-isystem).
|
|
|
|
|
+ */
|
|
|
|
|
+#define CMOCKA_DEPRECATION_WARNING(msg) \
|
|
|
|
|
+ __extension__({ \
|
|
|
|
|
+ typedef int cmocka_macro __attribute__((deprecated(msg))); \
|
|
|
|
|
+ cmocka_macro cmocka_deprecated_var __attribute__((unused)) = 0; \
|
|
|
|
|
+ (void)sizeof(cmocka_deprecated_var); \
|
|
|
|
|
+ });
|
|
|
|
|
+#elif defined(_MSC_VER)
|
|
|
|
|
+#define CMOCKA_DEPRECATION_WARNING(msg) __pragma(message("warning: " msg))
|
|
|
|
|
+#else
|
|
|
|
|
+#define CMOCKA_DEPRECATION_WARNING(msg)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#endif /* CMOCKA_DISABLE_DEPRETATION_WARNINGS */
|
|
|
|
|
+
|
|
|
|
|
+#if defined(__GNUC__)
|
|
|
|
|
+#define CMOCKA_NORETURN __attribute__ ((noreturn))
|
|
|
|
|
+#elif defined(_MSC_VER)
|
|
|
|
|
+#define CMOCKA_NORETURN __declspec(noreturn)
|
|
|
|
|
+#else
|
|
|
|
|
+#define CMOCKA_NORETURN
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/* Function attribute that tells the compiler that we never access the value
|
|
|
|
|
+ * of a/b, just the pointer address.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Without this, newer compilers like GCC-12 will print
|
|
|
|
|
+ * `-Wmaybe-uninitialized` warnings.
|
|
|
|
|
+ *
|
|
|
|
|
+ * See:
|
|
|
|
|
+ * https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Common-Function-Attributes.html#Common-Function-Attributes
|
|
|
|
|
+ */
|
|
|
|
|
+#ifdef __has_attribute
|
|
|
|
|
+#if __has_attribute(access)
|
|
|
|
|
+#define CMOCKA_NO_ACCESS_ATTRIBUTE \
|
|
|
|
|
+ __attribute__((access(none, 1), access(none, 2)))
|
|
|
|
|
+#endif
|
|
|
|
|
+#endif
|
|
|
|
|
+#ifndef CMOCKA_NO_ACCESS_ATTRIBUTE
|
|
|
|
|
+#define CMOCKA_NO_ACCESS_ATTRIBUTE
|
|
|
|
|
+#endif
|
|
|
|
|
+/** @endcond */
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_util */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_mock 🎪 Mock Objects
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Simulate objects and control function return values in tests.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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 queue 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 queue 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
|
|
|
|
|
+ * queue 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_ptr_type(chef_cook, "hotdog", const char *);
|
|
|
|
|
+ * will_return_int(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)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *dish_out = mock_ptr_type(char *); // "hotdog"
|
|
|
|
|
+ * int return_code = mock_int(); // 0
|
|
|
|
|
+ * return return_code;
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * For a complete example please take a look
|
|
|
|
|
+ * <a
|
|
|
|
|
+ * href="https://git.cryptomilk.org/projects/cmocka.git/tree/example/mock">here</a>.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Return a value indefinitely when used with will_return_count().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This constant can be passed as the count parameter to will_return_count()
|
|
|
|
|
+ * and related functions to indicate that the specified value should be
|
|
|
|
|
+ * returned every time the mocked function is called, without limit.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_count()
|
|
|
|
|
+ * @see will_return_int_count()
|
|
|
|
|
+ * @see will_return_uint_count()
|
|
|
|
|
+ * @see will_return_ptr_count()
|
|
|
|
|
+ */
|
|
|
|
|
+#define WILL_RETURN_ALWAYS -1
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Return a value once when used with will_return_count().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This constant can be passed as the count parameter to will_return_count()
|
|
|
|
|
+ * and related functions to indicate that the specified value should be
|
|
|
|
|
+ * returned only the next time the mocked function is called. This is the
|
|
|
|
|
+ * default behavior of will_return() and related macros.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_count()
|
|
|
|
|
+ * @see will_return()
|
|
|
|
|
+ */
|
|
|
|
|
+#define WILL_RETURN_ONCE -2
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Check a parameter every time when used with expect_check_data_count().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This constant can be passed as the count parameter to expect_check_data_count()
|
|
|
|
|
+ * to indicate that the parameter check should be performed every time the mocked
|
|
|
|
|
+ * function is called. The test will fail if the function is never called.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_check_data_count()
|
|
|
|
|
+ */
|
|
|
|
|
+#define EXPECT_ALWAYS -1
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Optionally check a parameter when used with expect_check_data_count().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This constant can be passed as the count parameter to expect_check_data_count()
|
|
|
|
|
+ * to indicate that the parameter check is optional. The check will be performed
|
|
|
|
|
+ * if the function is called, but the test will not fail if it's never called.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_check_data_count()
|
|
|
|
|
+ */
|
|
|
|
|
+#define EXPECT_MAYBE -2
|
|
|
|
|
+
|
|
|
|
|
+#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()
|
|
|
|
|
+ */
|
|
|
|
|
+uintmax_t mock(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock() (_mock(__func__, __FILE__, __LINE__, NULL)).uint_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a value of the current function and cast it to given type.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The value would be casted to type internally to avoid having the
|
|
|
|
|
+ * caller to do the cast manually. Type safety checks are disabled with that
|
|
|
|
|
+ * function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #type The expected type of the return value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored to return by this function casted to the
|
|
|
|
|
+ * specified type.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_type(int);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return()
|
|
|
|
|
+ */
|
|
|
|
|
+type mock_type(#type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_type(type) ((type) mock())
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Check if data is available for the current mock function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This function checks if there is data available for the current mock function
|
|
|
|
|
+ * which calls has_mock() without consuming it. This is useful when you want to
|
|
|
|
|
+ * check if mock data has been set up before calling mock().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return true if mock data is available, false otherwise.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int example_mock_function(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * if (has_mock()) {
|
|
|
|
|
+ * return mock_int();
|
|
|
|
|
+ * }
|
|
|
|
|
+ * return default_value;
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock()
|
|
|
|
|
+ * @see mock_int()
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ * @see will_return()
|
|
|
|
|
+ */
|
|
|
|
|
+bool has_mock(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define has_mock() _has_mock(__func__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve an integer return value of the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * intmax_t param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_int();
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_int()
|
|
|
|
|
+ */
|
|
|
|
|
+intmax_t mock_int();
|
|
|
|
|
+#else
|
|
|
|
|
+/* TODO: Enable type safety check by passing intmax_t instead of NULL */
|
|
|
|
|
+#define mock_int() (_mock(__func__, __FILE__, __LINE__, NULL)).int_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve an unsigned integer return value of the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * uintmax_t param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_uint();
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+uintmax_t mock_uint(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_uint() (_mock(__func__, __FILE__, __LINE__, "uintmax_t")).uint_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a float return value of the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The float value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_float()
|
|
|
|
|
+ */
|
|
|
|
|
+float mock_float(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_float() (_mock(__func__, __FILE__, __LINE__, NULL)).float_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a double precision floating point return value of the
|
|
|
|
|
+ * current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The double value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_double()
|
|
|
|
|
+ */
|
|
|
|
|
+double mock_double(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_double() (_mock(__func__, __FILE__, __LINE__, NULL)).real_val
|
|
|
|
|
+#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. This macro does NOT perform type checking.
|
|
|
|
|
+ * For type-safe pointer retrieval, use mock_ptr_type_checked() instead.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_ptr()
|
|
|
|
|
+ * @see mock_ptr_type_checked()
|
|
|
|
|
+ */
|
|
|
|
|
+type mock_ptr_type(#type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_ptr_type(type) \
|
|
|
|
|
+ ((type)(_mock(__func__, __FILE__, __LINE__, NULL)).ptr)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a typed return value of the current function with type checking.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The value would be casted to type internally to avoid having the
|
|
|
|
|
+ * caller to do the cast manually. This macro DOES perform type checking
|
|
|
|
|
+ * and will fail the test if the type used with will_return_ptr_type()
|
|
|
|
|
+ * does not match the type passed to this macro.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_checked(char *);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_ptr_type()
|
|
|
|
|
+ * @see mock_ptr_type()
|
|
|
|
|
+ */
|
|
|
|
|
+type mock_ptr_type_checked(#type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_ptr_type_checked(type) \
|
|
|
|
|
+ ((type)(_mock(__func__, __FILE__, __LINE__, #type)).ptr)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named value for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored under the given name for this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int param;
|
|
|
|
|
+ * param = (int)mock_parameter(number);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock()
|
|
|
|
|
+ * @see mock_parameter_type()
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see mock_parameter_ptr_type()
|
|
|
|
|
+ * @see will_return()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter_count()
|
|
|
|
|
+ * @see will_set_parameter_always()
|
|
|
|
|
+ * @see will_set_parameter_maybe()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter_ptr_type()
|
|
|
|
|
+ * @see will_set_parameter_ptr_count()
|
|
|
|
|
+ * @see will_set_parameter_ptr_always()
|
|
|
|
|
+ * @see will_set_parameter_ptr_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+uintmax_t mock_parameter(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter(name) \
|
|
|
|
|
+ (_mock_parameter(__func__, #name, __FILE__, __LINE__, NULL)).uint_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named value for the current function and cast it to given type.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The value would be casted to type internally to avoid having the
|
|
|
|
|
+ * caller to do the cast manually. Type safety checks are disabled with that
|
|
|
|
|
+ * function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #type The expected type of the named value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored under name for this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_parameter_type(param, int);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+#type mock_parameter_type(#name, #type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_type(name, type) ((type) mock_parameter(#name))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named integer value for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The integer value which was stored under the given name for this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * intmax_t param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_parameter_int(param);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_int()
|
|
|
|
|
+ */
|
|
|
|
|
+intmax_t mock_parameter_int(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_int(name) \
|
|
|
|
|
+ (_mock_parameter(__func__, #name, __FILE__, __LINE__, "intmax_t")).int_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve an unsigned integer return value of the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * uintmax_t param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_parameter_uint(param);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+uintmax_t mock_parameter_uint(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_uint(name) \
|
|
|
|
|
+ (_mock_parameter(__func__, #name, __FILE__, __LINE__, "uintmax_t")).uint_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named float value for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The float value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * float param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_parameter_float(param);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_float()
|
|
|
|
|
+ */
|
|
|
|
|
+float mock_parameter_float(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_float(name) \
|
|
|
|
|
+ (_mock_parameter(__func__, #name, __FILE__, __LINE__, "float")).float_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named double precision floating point value for the
|
|
|
|
|
+ * current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the value
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The double value which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * double param;
|
|
|
|
|
+ *
|
|
|
|
|
+ * param = mock_parameter_double(param);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter_double()
|
|
|
|
|
+ */
|
|
|
|
|
+double mock_parameter_double(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_double(name) \
|
|
|
|
|
+ (_mock_parameter(__func__, #name, __FILE__, __LINE__, "double")).real_val
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named pointer for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the pointer
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The pointer which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int *result
|
|
|
|
|
+ * result = (int*)mock_parameter_ptr(result);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ */
|
|
|
|
|
+void *mock_parameter_ptr(#name);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_ptr(name) \
|
|
|
|
|
+ ((_mock_parameter(__func__, #name, __FILE__, __LINE__, NULL)).ptr)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Retrieve a named pointer for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * In addition it checks if if the type specified by the call to
|
|
|
|
|
+ * will_return_ptr_type() is the same.
|
|
|
|
|
+ * And casts it to that type.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which to look for the pointer
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return The pointer which was stored to return by this function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int *result
|
|
|
|
|
+ * result = mock_parameter_ptr_type(result, int*);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_ptr_type()
|
|
|
|
|
+ */
|
|
|
|
|
+type mock_parameter_ptr_type(#name, #type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_parameter_ptr_type(name, type) \
|
|
|
|
|
+ ((type)(_mock_parameter(__func__, #name, __FILE__, __LINE__, #type)).ptr)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief set errno for the current function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * mock_errno();
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ */
|
|
|
|
|
+void mock_errno(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define mock_errno() \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ intmax_t err = (_mock_parameter( \
|
|
|
|
|
+ __func__, \
|
|
|
|
|
+ "/errno", \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "errno")).int_val; \
|
|
|
|
|
+ if (err != 0) { \
|
|
|
|
|
+ errno = err; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#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 mock_int()
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ * @see will_return_int()
|
|
|
|
|
+ * @see will_return_uint()
|
|
|
|
|
+ * @see will_return_float()
|
|
|
|
|
+ * @see will_return_ptr_type()
|
|
|
|
|
+ * @see will_return_count()
|
|
|
|
|
+ * @see will_return_always()
|
|
|
|
|
+ * @see will_return_ptr_always()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return(function, value) \
|
|
|
|
|
+ _will_return(cmocka_tostring(function), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_int_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer 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
|
|
|
|
|
+ * int32_t return_int32(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return (int32_t)mock_int();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_int(return_int32, -42);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_int_equal(my_function_calling_return_int32(), -42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_int()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_int(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_int(function, value) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "intmax_t", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value to be returned a specified number of times 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 indicates the number of times the value
|
|
|
|
|
+ * should be returned by mock_int(). If count is set to -1, the value will
|
|
|
|
|
+ * always be returned but must be returned at least once. If count is set to -2,
|
|
|
|
|
+ * the value will always be returned by mock_int(), but is not required to be
|
|
|
|
|
+ * returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int32_t return_int32(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return (int32_t)mock_int();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_int_count(return_int32, -42, 3);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_int_equal(my_function_calling_return_int32(), -42);
|
|
|
|
|
+ * assert_int_equal(my_function_calling_return_int32(), -42);
|
|
|
|
|
+ * assert_int_equal(my_function_calling_return_int32(), -42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_int()
|
|
|
|
|
+ * @see will_return_int()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_int_count(#function, intmax_t value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_int_count(function, value, count) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "intmax_t", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a unsigned integer 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
|
|
|
|
|
+ * uint32_t return_uint32(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return (uint32_t)mock_uint();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_uint(return_uint32, 42);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_uint_equal(my_function_calling_return_uint32(), 42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ * @see will_return_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_uint(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_uint(function, value) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "uintmax_t", \
|
|
|
|
|
+ assign_uint_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an unsigned integer value to be returned a specified number of
|
|
|
|
|
+ * times 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 indicates the number of times the value
|
|
|
|
|
+ * should be returned by mock_uint(). If count is set to -1, the value will
|
|
|
|
|
+ * always be returned but must be returned at least once. If count is set to -2,
|
|
|
|
|
+ * the value will always be returned by mock_uint(), but is not required to be
|
|
|
|
|
+ * returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * uint32_t return_uint32(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return (uint32_t)mock_uint();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_uint_count(return_uint32, 42, 3);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_uint_equal(my_function_calling_return_uint32(), 42);
|
|
|
|
|
+ * assert_uint_equal(my_function_calling_return_uint32(), 42);
|
|
|
|
|
+ * assert_uint_equal(my_function_calling_return_uint32(), 42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ * @see will_return_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_uint_count(#function, uintmax_t value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_uint_count(function, value, count) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "uintmax_t", \
|
|
|
|
|
+ assign_uint_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a float value to be returned by mock() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The float value to be returned by mock().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * float return_float(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_float();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_float_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_float(return_float, 1.0f);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_float_equal(my_function_calling_return_float(), 1.0f, 0.01f);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ * @see mock_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_float(#function, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_float(function, value) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "float", \
|
|
|
|
|
+ assign_float_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a float value to be returned a specified number of times by
|
|
|
|
|
+ * mock() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The float value to be returned by mock().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned by mock_float(). If count is set to -1, the value will
|
|
|
|
|
+ * always be returned but must be returned at least once. If count is set to -2,
|
|
|
|
|
+ * the value will always be returned by mock_float(), but is not required to be
|
|
|
|
|
+ * returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * float return_float(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_float();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_float_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_float_count(return_float, 1.0f, 3);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_float_equal(my_function_calling_return_float(), 1.0f, 0.01f);
|
|
|
|
|
+ * assert_float_equal(my_function_calling_return_float(), 1.0f, 0.01f);
|
|
|
|
|
+ * assert_float_equal(my_function_calling_return_float(), 1.0f, 0.01f);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ * @see will_return_float()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_float_count(#function, float value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_float_count(function, value, count) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "float", \
|
|
|
|
|
+ assign_float_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a double precision floating point value to be returned by
|
|
|
|
|
+ * mock() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The double value to be returned by mock().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * double return_double(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_double();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_double_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_double(return_double, 2.5);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_double_equal(my_function_calling_return_double(), 2.5, 0.01);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_double(#function, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_double(function, value) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "double", \
|
|
|
|
|
+ assign_double_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a double precision floating point value to be returned a
|
|
|
|
|
+ * specified number of times by mock() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The double value to be returned by mock().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned by mock_double(). If count is set to -1, the value will
|
|
|
|
|
+ * always be returned but must be returned at least once. If count is set to -2,
|
|
|
|
|
+ * the value will always be returned by mock_double(), but is not required to be
|
|
|
|
|
+ * returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * double return_double(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_double();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_double_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_double_count(return_double, 2.5, 3);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_double_equal(my_function_calling_return_double(), 2.5, 0.01);
|
|
|
|
|
+ * assert_double_equal(my_function_calling_return_double(), 2.5, 0.01);
|
|
|
|
|
+ * assert_double_equal(my_function_calling_return_double(), 2.5, 0.01);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_double()
|
|
|
|
|
+ * @see will_return_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_double_count(#function, double value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_double_count(function, value, count) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "double", \
|
|
|
|
|
+ assign_double_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value that will always be returned by mock_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_int_count(function, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_int_count()
|
|
|
|
|
+ * @see mock_int()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_int_always(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_int_always(function, value) \
|
|
|
|
|
+ will_return_int_count(function, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an unsigned integer value that will always be returned by
|
|
|
|
|
+ * mock_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_uint_count(function, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_uint_count()
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_uint_always(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_uint_always(function, value) \
|
|
|
|
|
+ will_return_uint_count(function, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a float value that will always be returned by mock_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_float_count(function, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_float_count()
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_float_always(#function, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_float_always(function, value) \
|
|
|
|
|
+ will_return_float_count(function, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a double value that will always be returned by mock_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_double_count(function, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_double_count()
|
|
|
|
|
+ * @see mock_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_double_always(#function, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_double_always(function, value) \
|
|
|
|
|
+ will_return_double_count(function, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_return_int_count() or will_return_uint_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_count(#function, uintmax_t value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_count(function, value, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_return_count: use will_return_int_count or " \
|
|
|
|
|
+ "will_return_uint_count instead") \
|
|
|
|
|
+ _will_return(cmocka_tostring(function), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_int_to_cmocka_value(value), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_return_int_always() or will_return_uint_always()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_always(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_always(function, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_return_always: use will_return_int_always or " \
|
|
|
|
|
+ "will_return_uint_always instead") \
|
|
|
|
|
+ will_return_count(function, (value), WILL_RETURN_ALWAYS); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value that may always be returned by mock_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_int() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_int(). Therefore,
|
|
|
|
|
+ * in contrast to will_return_int_always() which causes a test failure if it
|
|
|
|
|
+ * is not returned at least once, will_return_int_maybe() will never cause a
|
|
|
|
|
+ * test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_int_count(function, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_int_count()
|
|
|
|
|
+ * @see mock_int()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_int_maybe(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_int_maybe(function, value) \
|
|
|
|
|
+ will_return_int_count(function, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an unsigned integer value that may always be returned by
|
|
|
|
|
+ * mock_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_uint() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_uint(). Therefore,
|
|
|
|
|
+ * in contrast to will_return_uint_always() which causes a test failure if it
|
|
|
|
|
+ * is not returned at least once, will_return_uint_maybe() will never cause a
|
|
|
|
|
+ * test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_uint_count(function, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_uint_count()
|
|
|
|
|
+ * @see mock_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_uint_maybe(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_uint_maybe(function, value) \
|
|
|
|
|
+ will_return_uint_count(function, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a float value that may always be returned by mock_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_float() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_float(). Therefore,
|
|
|
|
|
+ * in contrast to will_return_float_always() which causes a test failure if it
|
|
|
|
|
+ * is not returned at least once, will_return_float_maybe() will never cause a
|
|
|
|
|
+ * test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_float_count(function, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_float_count()
|
|
|
|
|
+ * @see mock_float()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_float_maybe(#function, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_float_maybe(function, value) \
|
|
|
|
|
+ will_return_float_count(function, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a double value that may always be returned by mock_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_double() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_double(). Therefore,
|
|
|
|
|
+ * in contrast to will_return_double_always() which causes a test failure if it
|
|
|
|
|
+ * is not returned at least once, will_return_double_maybe() will never cause a
|
|
|
|
|
+ * test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_double_count(function, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_double_count()
|
|
|
|
|
+ * @see mock_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_double_maybe(#function, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_double_maybe(function, value) \
|
|
|
|
|
+ will_return_double_count(function, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_return_int_maybe() or will_return_uint_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_maybe(#function, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_maybe(function, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_return_maybe: use will_return_int_maybe or " \
|
|
|
|
|
+ "will_return_uint_maybe instead") \
|
|
|
|
|
+ will_return_count(function, (value), WILL_RETURN_ONCE); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a pointer value to be returned by mock_ptr_type() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * const char * return_pointer(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_ptr_type(const char *);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_pointer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_ptr_type(return_pointer, "hello world", const char *);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_string_equal(my_func_calling_return_pointer(), "hello world");
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_ptr_type()
|
|
|
|
|
+ * @see will_return_ptr_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_ptr(#function, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_ptr(function, value) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a pointer value to be returned by mock_ptr_type_checked() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This will also check that the type matches and if not will fail(). The type
|
|
|
|
|
+ * checking only works when used in conjunction with mock_ptr_type_checked().
|
|
|
|
|
+ * If you use mock_ptr_type() to retrieve the value, no type checking will occur.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_ptr_type_checked().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #type The type of the pointer.
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * const char *return_pointer(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * return mock_ptr_type_checked(const char *);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_pointer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_return_ptr_type(return_pointer, "hello world", const char *);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_string_equal(my_func_calling_return_pointer(), "hello world");
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_ptr_type_checked()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_ptr_type(#function, void *value, type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_ptr_type(function, value, type) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ #type, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a pointer value to be returned by mock_ptr_type() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value should
|
|
|
|
|
+ * be returned by mock(). If count is set to -1, the value
|
|
|
|
|
+ * will always be returned but must be returned at least once.
|
|
|
|
|
+ * If count is set to -2, the value will always be returned
|
|
|
|
|
+ * by mock(), but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_ptr_type()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_ptr_count(#function, void *value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_ptr_count(function, value, count) \
|
|
|
|
|
+ _will_return(#function, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a value that will be always returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #value The value to be returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_ptr_count(function, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_ptr_count()
|
|
|
|
|
+ * @see mock_ptr_type()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_ptr_always(#function, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_ptr_always(function, value) \
|
|
|
|
|
+ will_return_ptr_count(function, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a value that may be always returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_ptr_type() but is
|
|
|
|
|
+ * not required to be returned by at least one call to mock_ptr_type().
|
|
|
|
|
+ * Therefore, in contrast to will_return_ptr_always() which causes a test
|
|
|
|
|
+ * failure if it is not returned at least once, will_return_ptr_maybe() will
|
|
|
|
|
+ * never cause a test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should return the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #value The value to be returned by mock_ptr_type().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_return_ptr_count(function, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see will_return_ptr_count()
|
|
|
|
|
+ * @see mock_ptr_type()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_return_ptr_maybe(#function, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_return_ptr_maybe(function, value) \
|
|
|
|
|
+ will_return_ptr_count(function, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named value to be returned by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_integer(int *result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = (int)mock_parameter(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter(return_integer, result, 42);
|
|
|
|
|
+ *
|
|
|
|
|
+ * int retVal = 0;
|
|
|
|
|
+ * my_function_calling_return_integer(&retVal);
|
|
|
|
|
+ * assert_int_equal(result, 42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see mock_parameter_ptr_type()
|
|
|
|
|
+ * @see will_set_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter_ptr_type()
|
|
|
|
|
+ * @see will_set_parameter_count()
|
|
|
|
|
+ * @see will_set_parameter_always()
|
|
|
|
|
+ * @see will_set_parameter_maybe()
|
|
|
|
|
+ * @see will_set_parameter_ptr_count()
|
|
|
|
|
+ * @see will_set_parameter_ptr_always()
|
|
|
|
|
+ * @see will_set_parameter_ptr_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(cmocka_tostring(function), \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_int_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named integer value to be returned by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * And adds some type checking information to be able to check
|
|
|
|
|
+ * with call to mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_int32(int32_t *result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = (int32_t)mock_parameter_int(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_int(return_int32, result, -42);
|
|
|
|
|
+ * int32_t result_param = 0;
|
|
|
|
|
+ * return_int32(&result_param);
|
|
|
|
|
+ * assert_int_equal(result_param, -42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_int(#function, #name, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_int(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "intmax_t", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named unsigned integer value to be returned by
|
|
|
|
|
+ * mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * And adds some type checking information to be able to check
|
|
|
|
|
+ * with call to mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_uint32(uint32_t *result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result =(uint32_t)mock_parameter_uint(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_integer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_uint(return_uint32, result, 42);
|
|
|
|
|
+ * uint32_t result_param = 0;
|
|
|
|
|
+ * return_uint32(&result_param);
|
|
|
|
|
+ * assert_uint_equal(result_param, 42);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_uint(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_uint(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "uintmax_t", \
|
|
|
|
|
+ assign_uint_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named float value to be returned by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * And adds some type checking information to be able to check
|
|
|
|
|
+ * with call to mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The float value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_float(float *result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = mock_parameter_float(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_float_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_float(return_float, result, 34.7f);
|
|
|
|
|
+ * float result_param = NAN;
|
|
|
|
|
+ * return_float(&result_param);
|
|
|
|
|
+ * assert_float_equal(result_param, 34.7f, 0.01f);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_float(#function, #name, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_float(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "float", \
|
|
|
|
|
+ assign_float_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named double precision floating point value to be returned
|
|
|
|
|
+ * by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * And adds some type checking information to be able to check
|
|
|
|
|
+ * with call to mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The double value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_double(double *result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = mock_parameter_double(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_double_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_double(return_double, result, 34.7);
|
|
|
|
|
+ * double result_param = NAN;
|
|
|
|
|
+ * return_double(&result_param);
|
|
|
|
|
+ * assert_double_equal(result_param, 34.7, 0.0);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_double()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_double(#function, #name, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_double(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "double", \
|
|
|
|
|
+ assign_double_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named integer value to be returned a specified number of times
|
|
|
|
|
+ * by mock_parameter_int() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned. If count is set to -1, the value will always be returned
|
|
|
|
|
+ * but must be returned at least once. If count is set to -2, the value will
|
|
|
|
|
+ * always be returned, but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter_int()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_int_count(#function, #name, intmax_t value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_int_count(function, name, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "intmax_t", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named unsigned integer value to be returned a specified
|
|
|
|
|
+ * number of times by mock_parameter_uint() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned. If count is set to -1, the value will always be returned
|
|
|
|
|
+ * but must be returned at least once. If count is set to -2, the value will
|
|
|
|
|
+ * always be returned, but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter_uint()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_uint_count(#function,
|
|
|
|
|
+ #name,
|
|
|
|
|
+ uintmax_t value,
|
|
|
|
|
+ int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_uint_count(function, name, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "uintmax_t", \
|
|
|
|
|
+ assign_uint_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named float value to be returned a specified number of times
|
|
|
|
|
+ * by mock_parameter_float() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned. If count is set to -1, the value will always be returned
|
|
|
|
|
+ * but must be returned at least once. If count is set to -2, the value will
|
|
|
|
|
+ * always be returned, but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter_float()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_float_count(#function, #name, float value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_float_count(function, name, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "float", \
|
|
|
|
|
+ assign_float_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named double value to be returned a specified number of times
|
|
|
|
|
+ * by mock_parameter_double() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value
|
|
|
|
|
+ * should be returned. If count is set to -1, the value will always be returned
|
|
|
|
|
+ * but must be returned at least once. If count is set to -2, the value will
|
|
|
|
|
+ * always be returned, but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_double()
|
|
|
|
|
+ * @see will_set_parameter_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_double_count(#function, #name, double value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_double_count(function, name, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "double", \
|
|
|
|
|
+ assign_double_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_set_parameter_int_count() or
|
|
|
|
|
+ * will_set_parameter_uint_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_count(#function, #name, uintmax_t value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_count(function, name, value, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_set_parameter_count: use will_set_parameter_int_count or " \
|
|
|
|
|
+ "will_set_parameter_uint_count instead") \
|
|
|
|
|
+ _will_set_parameter(cmocka_tostring(function), \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_int_to_cmocka_value(value), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named integer value that will always be returned by
|
|
|
|
|
+ * mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_int_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter_int_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_int_always(#function, #name, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_int_always(function, name, value) \
|
|
|
|
|
+ will_set_parameter_int_count(function, name, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named unsigned integer value that will always be returned by
|
|
|
|
|
+ * mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_uint_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter_uint_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_uint_always(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_uint_always(function, name, value) \
|
|
|
|
|
+ will_set_parameter_uint_count(function, name, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named float value that will always be returned by
|
|
|
|
|
+ * mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_float_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter_float_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_float_always(#function, #name, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_float_always(function, name, value) \
|
|
|
|
|
+ will_set_parameter_float_count(function, name, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named double value that will always be returned by
|
|
|
|
|
+ * mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_double_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_double()
|
|
|
|
|
+ * @see will_set_parameter_double_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_double_always(#function, #name, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_double_always(function, name, value) \
|
|
|
|
|
+ will_set_parameter_double_count(function, name, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_set_parameter_int_always() or
|
|
|
|
|
+ * will_set_parameter_uint_always()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_always(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_always(function, name, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_set_parameter_always: use will_set_parameter_int_always or " \
|
|
|
|
|
+ "will_set_parameter_uint_always instead") \
|
|
|
|
|
+ will_set_parameter_count(function, name, (value), WILL_RETURN_ALWAYS); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named integer value that may always be returned by mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_int() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_int().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_int_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_int()
|
|
|
|
|
+ * @see will_set_parameter_int_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_int_maybe(#function, #name, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_int_maybe(function, name, value) \
|
|
|
|
|
+ will_set_parameter_int_count(function, name, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named unsigned integer value that may always be returned by mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_uint() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_uint().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_uint_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_uint()
|
|
|
|
|
+ * @see will_set_parameter_uint_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_uint_maybe(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_uint_maybe(function, name, value) \
|
|
|
|
|
+ will_set_parameter_uint_count(function, name, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named float value that may always be returned by mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_float() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_float().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_float_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_float()
|
|
|
|
|
+ * @see will_set_parameter_float_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_float_maybe(#function, #name, float value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_float_maybe(function, name, value) \
|
|
|
|
|
+ will_set_parameter_float_count(function, name, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named double value that may always be returned by mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_double() but is not
|
|
|
|
|
+ * required to be returned by at least one call to mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_double().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_double_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter_double()
|
|
|
|
|
+ * @see will_set_parameter_double_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_double_maybe(#function, #name, double value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_double_maybe(function, name, value) \
|
|
|
|
|
+ will_set_parameter_double_count(function, name, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use will_set_parameter_int_maybe() or
|
|
|
|
|
+ * will_set_parameter_uint_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_maybe(#function, #name, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_maybe(function, name, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "will_set_parameter_maybe: use will_set_parameter_int_maybe or " \
|
|
|
|
|
+ "will_set_parameter_uint_maybe instead") \
|
|
|
|
|
+ will_set_parameter_count(function, name, (value), WILL_RETURN_ONCE); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named pointer value to be returned by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_pointer(const char **result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = (const char *)mock_parameter_ptr(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * static void test_pointer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_ptr(return_pointer, result, "hello world");
|
|
|
|
|
+ * const char *returned = NULL;
|
|
|
|
|
+ * my_func_calling_return_pointer(&returned);
|
|
|
|
|
+ * assert_string_equal(returned, "hello world");
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_ptr(#function, #name, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_ptr(function, name, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named pointer value to be returned by mock_parameter() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This will also check that the type matches and if not will fail().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] type The type of the pointer.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_pointer(const char **result)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *result = mock_parameter_ptr_typed(result, const char*);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * static void test_pointer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_ptr_type(return_pointer, result, "hello world", const char*);
|
|
|
|
|
+ * const char *returned = NULL;
|
|
|
|
|
+ * my_func_calling_return_pointer(&returned);
|
|
|
|
|
+ * assert_string_equal(returned, "hello world");
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see mock_parameter_ptr_type()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_ptr_type(#function, #name, void *value, #type);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_ptr_type(function, name, value, type) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ #type, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named pointer value to be returned a specified number of times
|
|
|
|
|
+ * by mock_parameter_ptr() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_ptr().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The parameter indicates the number of times the value should
|
|
|
|
|
+ * be returned by mock_parameter_ptr(). If count is set to -1, the value
|
|
|
|
|
+ * will always be returned but must be returned at least once.
|
|
|
|
|
+ * If count is set to -2, the value will always be returned
|
|
|
|
|
+ * by mock_parameter_ptr(), but is not required to be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void return_pointer(const char **resultA, const char **resultB)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * *resultA = (const char *)mock_parameter_ptr(result);
|
|
|
|
|
+ * *resultB = (const char *)mock_parameter_ptr(result);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * static void test_pointer_return(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_parameter_ptr_count(return_pointer, result, "hello world", const char*, 2);
|
|
|
|
|
+ * const char *returnedA = NULL;
|
|
|
|
|
+ * const char *returnedB = NULL;
|
|
|
|
|
+ * my_func_calling_return_pointer(&returnedA, &returnedB);
|
|
|
|
|
+ * assert_string_equal(returnedA, "hello world");
|
|
|
|
|
+ * assert_string_equal(returnedB, "hello world");
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see will_named_return()
|
|
|
|
|
+ * @see will_named_return_ptr()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_ptr_count(#function, #name, void *value, int count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_ptr_count(function, name, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ #name, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(value), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named pointer value that will be always returned by
|
|
|
|
|
+ * mock_parameter_ptr().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_ptr()
|
|
|
|
|
+ * and is required to be returned by at least one call to mock_parameter_ptr().
|
|
|
|
|
+ * If it is not returned at least once the test will fail.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_ptr().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_ptr_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter_ptr_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_ptr_always(#function, #name, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_ptr_always(function, name, value) \
|
|
|
|
|
+ will_set_parameter_ptr_count(function, name, (value), WILL_RETURN_ALWAYS)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store a named pointer value that may be always returned by
|
|
|
|
|
+ * mock_parameter_ptr().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will always be returned by mock_parameter_ptr() but
|
|
|
|
|
+ * is not required to be returned by at least one call to mock_parameter_ptr().
|
|
|
|
|
+ * Therefore, in contrast to will_set_parameter_ptr_always() which causes a test
|
|
|
|
|
+ * failure if it is not returned at least once, will_set_parameter_ptr_maybe()
|
|
|
|
|
+ * will never cause a test to fail if its value is not returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which the given value should be
|
|
|
|
|
+ * return.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #name The name under which the given value should be returned.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to be returned by mock_parameter_ptr().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_ptr_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_parameter()
|
|
|
|
|
+ * @see mock_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter()
|
|
|
|
|
+ * @see will_set_parameter_ptr()
|
|
|
|
|
+ * @see will_set_parameter_ptr_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_parameter_ptr_maybe(#function, #name, void *value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_parameter_ptr_maybe(function, name, value) \
|
|
|
|
|
+ will_set_parameter_ptr_count(function, name, (value), WILL_RETURN_ONCE)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value to set errno to by mock_errno() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which errno
|
|
|
|
|
+ * should be set to the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to set errno to by the call to mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void sets_errno(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * mock_errno();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * static void test_sets_errno(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_errno(sets_errno, -3);
|
|
|
|
|
+ *
|
|
|
|
|
+ * assert_int_equal(errno, -3);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_errno()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_errno(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_errno(function, value) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ "/errno", \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "errno", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value to always set errno to by mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ *
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which errno
|
|
|
|
|
+ * should be set to the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to set errno to by the call to mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The count parameter gives the number of times the value
|
|
|
|
|
+ * should be validated by check_expected(). If count is set
|
|
|
|
|
+ * to @ref EXPECT_ALWAYS the value will always be returned,
|
|
|
|
|
+ * and cmocka expects check_expected() to be issued at least
|
|
|
|
|
+ * once. If count is set to @ref EXPECT_MAYBE, any number of
|
|
|
|
|
+ * calls to check_expected() is accepted, including zero.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void sets_errno(void)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * mock_errno();
|
|
|
|
|
+ * }
|
|
|
|
|
+ * static void test_sets_errno(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * will_set_errno_count(sets_errno, -3, 2);
|
|
|
|
|
+ * sets_errno();
|
|
|
|
|
+ * assert_int_equal(errno, -3);
|
|
|
|
|
+ * errno = 0;
|
|
|
|
|
+ * sets_errno();
|
|
|
|
|
+ * assert_int_equal(errno, -3);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_errno()
|
|
|
|
|
+ * @see will_set_errno()
|
|
|
|
|
+ * @see will_set_errno_always()
|
|
|
|
|
+ * @see will_set_errno_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_errno_count(#function, intmax_t value, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_errno_count(function, value, count) \
|
|
|
|
|
+ _will_set_parameter(#function, \
|
|
|
|
|
+ "/errno", \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ "errno", \
|
|
|
|
|
+ assign_int_to_cmocka_value(value), \
|
|
|
|
|
+ (count))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value to set errno to by mock_errno() later,
|
|
|
|
|
+ * for a specified number of times.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will errno will always be set to by mock_errno()
|
|
|
|
|
+ * but is required to be set least once by a call to mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which errno
|
|
|
|
|
+ * should be set to the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to set errno to by the call to mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_count(function, name, value, -1);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_errno()
|
|
|
|
|
+ * @see will_set_errno()
|
|
|
|
|
+ * @see will_set_errno_count()
|
|
|
|
|
+ * @see will_set_errno_maybe()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_errno_always(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_errno_always(function, value) \
|
|
|
|
|
+ will_set_errno_count(function, (value), WILL_RETURN_ALWAYS);
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store an integer value to set errno to by mock_errno() later,
|
|
|
|
|
+ * for a specified number of times.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This stores a value which will errno will always be set to by mock_errno()
|
|
|
|
|
+ * and won't fail if mock_errno() is never called.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function in which errno
|
|
|
|
|
+ * should be set to the given value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value The value to set errno to by the call to mock_errno().
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is equivalent to:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * will_set_parameter_count(function, name, value, -2);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see mock_errno()
|
|
|
|
|
+ * @see will_set_errno()
|
|
|
|
|
+ * @see will_set_errno_count()
|
|
|
|
|
+ * @see will_set_errno_always()
|
|
|
|
|
+ */
|
|
|
|
|
+void will_set_errno_maybe(#function, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define will_set_errno_maybe(function, value) \
|
|
|
|
|
+ will_set_errno_count(function, (value), WILL_RETURN_ONCE);
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_mock */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_param ✅ Checking Parameters
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Validate function parameters match expected values.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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_*() macros.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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_ptr(order);
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * For a complete example please take a look
|
|
|
|
|
+ * <a href="https://git.cryptomilk.org/projects/cmocka.git/tree/example/mock">here</a>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_check_data()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_check(function,
|
|
|
|
|
+ parameter,
|
|
|
|
|
+ CheckParameterValue check_function,
|
|
|
|
|
+ const void *check_data);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_check(function, parameter, check_function, check_data) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_check: use expect_check_data instead") \
|
|
|
|
|
+ _expect_check(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ check_function, \
|
|
|
|
|
+ cast_to_uintmax_type(check_data), \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_check_data_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_check_count(function,
|
|
|
|
|
+ parameter,
|
|
|
|
|
+ CheckParameterValue check_function,
|
|
|
|
|
+ const void *check_data,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_check_count( \
|
|
|
|
|
+ function, parameter, check_function, check_data, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_check_count: use expect_check_data_count instead") \
|
|
|
|
|
+ _expect_check(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ check_function, \
|
|
|
|
|
+ cast_to_uintmax_type(check_data), \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add a custom parameter checking function using CMockaValueData (new API).
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is the new API that uses CMockaValueData for type-safe parameter checking.
|
|
|
|
|
+ * It allows checking of integer, float, double, and pointer values.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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 (CheckParameterValueData).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] check_data The data to pass to the check function (CMockaValueData).
|
|
|
|
|
+ *
|
|
|
|
|
+ * ## Checker Function Interface
|
|
|
|
|
+ *
|
|
|
|
|
+ * The checker function must have the following signature:
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * int checker_function(CMockaValueData value, CMockaValueData check_data);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * ### Parameters
|
|
|
|
|
+ * - **value**: The actual parameter value passed to the mocked function.
|
|
|
|
|
+ * This is provided via check_expected(), check_expected_int(),
|
|
|
|
|
+ * check_expected_uint(), check_expected_float(), or check_expected_double()
|
|
|
|
|
+ * in the mocked function.
|
|
|
|
|
+ * - **check_data**: The expected data that was passed to expect_check_data().
|
|
|
|
|
+ * This contains the value you want to compare against.
|
|
|
|
|
+ *
|
|
|
|
|
+ * ### Return Value
|
|
|
|
|
+ * The checker function should return:
|
|
|
|
|
+ * - **Non-zero** (typically 1 or true) if the check succeeds
|
|
|
|
|
+ * - **Zero** (0 or false) if the check fails
|
|
|
|
|
+ *
|
|
|
|
|
+ * When the checker returns zero, cmocka will fail the test with an appropriate
|
|
|
|
|
+ * error message.
|
|
|
|
|
+ *
|
|
|
|
|
+ * ### Accessing Values in CMockaValueData
|
|
|
|
|
+ *
|
|
|
|
|
+ * The CMockaValueData union contains the following fields:
|
|
|
|
|
+ * - **int_val**: For signed integer types (intmax_t)
|
|
|
|
|
+ * - **uint_val**: For unsigned integer types (uintmax_t)
|
|
|
|
|
+ * - **float_val**: For single-precision floating-point types (float)
|
|
|
|
|
+ * - **real_val**: For double-precision floating-point types (double)
|
|
|
|
|
+ * - **ptr**: For pointer types (const void *)
|
|
|
|
|
+ *
|
|
|
|
|
+ * ## Usage Notes
|
|
|
|
|
+ *
|
|
|
|
|
+ * 1. **Calling will_return() in the checker**: You can call will_return() or
|
|
|
|
|
+ * other cmocka setup functions within your checker function to set up return
|
|
|
|
|
+ * values dynamically based on the parameter being checked. This is useful
|
|
|
|
|
+ * when the return value depends on the input parameter.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 2. **Checking multiple parameters**: To check all parameters of a function
|
|
|
|
|
+ * at once, you can pass a pointer to a struct containing all parameter
|
|
|
|
|
+ * values as the check_data. Your checker function can then validate all
|
|
|
|
|
+ * fields in a single call. See example below.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 3. **Memory allocation for check_data**: If you allocate memory for the
|
|
|
|
|
+ * check_data parameter (e.g., for a struct), you are responsible for
|
|
|
|
|
+ * managing its lifetime. The checker function receives the data by value,
|
|
|
|
|
+ * so if you pass a pointer in check_data.ptr, ensure it remains valid
|
|
|
|
|
+ * until the checker is called. Note that cmocka does not free this memory
|
|
|
|
|
+ * automatically.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Custom range checker
|
|
|
|
|
+ * typedef struct {
|
|
|
|
|
+ * int min;
|
|
|
|
|
+ * int max;
|
|
|
|
|
+ * } range_data;
|
|
|
|
|
+ *
|
|
|
|
|
+ * int check_in_custom_range(CMockaValueData value, CMockaValueData check_data)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * range_data *range = (range_data *)check_data.ptr;
|
|
|
|
|
+ * int val = value.int_val;
|
|
|
|
|
+ *
|
|
|
|
|
+ * // Return 1 (true) if in range, 0 (false) otherwise
|
|
|
|
|
+ * return (val >= range->min && val <= range->max);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * // In your test:
|
|
|
|
|
+ * void test_custom_check(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * range_data range = {10, 20};
|
|
|
|
|
+ * expect_check_data(my_function, param,
|
|
|
|
|
+ * check_in_custom_range,
|
|
|
|
|
+ * cast_ptr_to_cmocka_value(&range));
|
|
|
|
|
+ * my_function(15); // This will pass
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * // The mocked function:
|
|
|
|
|
+ * void my_function(int param)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * check_expected_int(param); // Triggers the checker
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Checker that also sets return values
|
|
|
|
|
+ * int check_and_setup_return(CMockaValueData value, CMockaValueData check_data)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * int expected = check_data.int_val;
|
|
|
|
|
+ * int actual = value.int_val;
|
|
|
|
|
+ *
|
|
|
|
|
+ * if (actual == expected) {
|
|
|
|
|
+ * // Set up return value dynamically based on the parameter
|
|
|
|
|
+ * will_return_int(some_other_function, actual * 2);
|
|
|
|
|
+ * return 1; // Success
|
|
|
|
|
+ * }
|
|
|
|
|
+ * return 0; // Failure
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Checking multiple parameters at once
|
|
|
|
|
+ * typedef struct {
|
|
|
|
|
+ * int expected_a;
|
|
|
|
|
+ * int expected_b;
|
|
|
|
|
+ * const char *expected_str;
|
|
|
|
|
+ * } multi_param_check;
|
|
|
|
|
+ *
|
|
|
|
|
+ * int check_multiple_params(CMockaValueData value, CMockaValueData check_data)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * multi_param_check *expected = (multi_param_check *)check_data.ptr;
|
|
|
|
|
+ * multi_param_check *actual = (multi_param_check *)value.ptr;
|
|
|
|
|
+ *
|
|
|
|
|
+ * return (actual->expected_a == expected->expected_a &&
|
|
|
|
|
+ * actual->expected_b == expected->expected_b &&
|
|
|
|
|
+ * strcmp(actual->expected_str, expected->expected_str) == 0);
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * // In your test:
|
|
|
|
|
+ * void test_multi_param(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * multi_param_check expected = {42, 100, "test"};
|
|
|
|
|
+ * multi_param_check actual = {42, 100, "test"};
|
|
|
|
|
+ *
|
|
|
|
|
+ * expect_check_data(my_function, params,
|
|
|
|
|
+ * check_multiple_params,
|
|
|
|
|
+ * cast_ptr_to_cmocka_value(&expected));
|
|
|
|
|
+ *
|
|
|
|
|
+ * // In the mocked function, you would pack all params into a struct
|
|
|
|
|
+ * // and call check_expected_ptr(params)
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_int()
|
|
|
|
|
+ * @see check_expected_uint()
|
|
|
|
|
+ * @see check_expected_float()
|
|
|
|
|
+ * @see check_expected_double()
|
|
|
|
|
+ * @see check_expected_ptr()
|
|
|
|
|
+ * @see expect_check_data_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_check_data(function,
|
|
|
|
|
+ parameter,
|
|
|
|
|
+ CheckParameterValueData check_function,
|
|
|
|
|
+ CMockaValueData check_data);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_check_data(function, parameter, check_function, check_data) \
|
|
|
|
|
+ _expect_check_data(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ check_function, \
|
|
|
|
|
+ check_data, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add a custom parameter checking function using CMockaValueData with
|
|
|
|
|
+ * count (new API).
|
|
|
|
|
+ *
|
|
|
|
|
+ * This is the new API that uses CMockaValueData for type-safe parameter
|
|
|
|
|
+ * checking. This version allows you to specify how many times the check should
|
|
|
|
|
+ * be performed.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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
|
|
|
|
|
+ * (CheckParameterValueData).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] check_data The data to pass to the check function (CMockaValueData).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] count The number of times this check should be called.
|
|
|
|
|
+ * - A specific positive number: The check will be performed
|
|
|
|
|
+ * exactly that many times.
|
|
|
|
|
+ * - **EXPECT_ALWAYS** (-1): The check will always be
|
|
|
|
|
+ * performed and must be called at least once. The test
|
|
|
|
|
+ * will fail if not called.
|
|
|
|
|
+ * - **EXPECT_MAYBE** (-2): The check will always be
|
|
|
|
|
+ * performed but is not required to be called. The test
|
|
|
|
|
+ * will not fail if the checker is never invoked.
|
|
|
|
|
+ *
|
|
|
|
|
+ * See expect_check_data() for detailed documentation on the checker function
|
|
|
|
|
+ * interface, usage notes, and examples.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Check a parameter exactly 3 times
|
|
|
|
|
+ * expect_check_data_count(my_function, param,
|
|
|
|
|
+ * my_checker,
|
|
|
|
|
+ * assign_int_to_cmocka_value(42),
|
|
|
|
|
+ * 3);
|
|
|
|
|
+ * my_function(42);
|
|
|
|
|
+ * my_function(42);
|
|
|
|
|
+ * my_function(42);
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Always check (must be called at least once)
|
|
|
|
|
+ * expect_check_data_count(my_function, param,
|
|
|
|
|
+ * my_checker,
|
|
|
|
|
+ * assign_int_to_cmocka_value(42),
|
|
|
|
|
+ * EXPECT_ALWAYS);
|
|
|
|
|
+ * my_function(42);
|
|
|
|
|
+ * my_function(42);
|
|
|
|
|
+ * // Can call any number of times, but at least once
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * // Example: Optional check (may or may not be called)
|
|
|
|
|
+ * expect_check_data_count(my_function, param,
|
|
|
|
|
+ * my_checker,
|
|
|
|
|
+ * assign_int_to_cmocka_value(42),
|
|
|
|
|
+ * EXPECT_MAYBE);
|
|
|
|
|
+ * // my_function may or may not be called - test won't fail either way
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_check_data()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_check_data_count(function,
|
|
|
|
|
+ parameter,
|
|
|
|
|
+ CheckParameterValueData check_function,
|
|
|
|
|
+ CMockaValueData check_data,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_check_data_count(function, \
|
|
|
|
|
+ parameter, \
|
|
|
|
|
+ check_function, \
|
|
|
|
|
+ check_data, \
|
|
|
|
|
+ count) \
|
|
|
|
|
+ _expect_check_data(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ check_function, \
|
|
|
|
|
+ check_data, \
|
|
|
|
|
+ NULL, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_in_set() or expect_uint_in_set()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_in_set(#function, #parameter, uintmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_in_set(function, parameter, value_array) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING("expect_in_set: use expect_int_in_set or " \
|
|
|
|
|
+ "expect_uint_in_set instead") \
|
|
|
|
|
+ expect_in_set_count(function, parameter, value_array, 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the parameter value is part of the provided
|
|
|
|
|
+ * integer 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, intmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_in_set(function, parameter, value_array) \
|
|
|
|
|
+ expect_int_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
|
|
|
|
|
+ * unsigned integer 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, intmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_in_set(function, parameter, value_array) \
|
|
|
|
|
+ expect_uint_in_set_count(function, parameter, value_array, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_in_set_count() or expect_uint_in_set_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_in_set_count(#function, #parameter, uintmax_t value_array[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_in_set_count: use expect_int_in_set_count or " \
|
|
|
|
|
+ "expect_uint_in_set_count instead") \
|
|
|
|
|
+ _expect_uint_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the parameter value is part of the provided
|
|
|
|
|
+ * integer 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_int_in_set_count(#function, #parameter, intmax_t value_array[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ _expect_int_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(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 part of the provided
|
|
|
|
|
+ * unsigned integer 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_uint_in_set_count(#function, #parameter, uintmax_t value_array[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ _expect_uint_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_not_in_set() or expect_uint_not_in_set()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_in_set(#function, #parameter, uintmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_in_set(function, parameter, value_array) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_not_in_set: use expect_int_not_in_set or " \
|
|
|
|
|
+ "expect_uint_not_in_set instead") \
|
|
|
|
|
+ expect_not_in_set_count(function, parameter, value_array, 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_not_in_set_count() or expect_uint_not_in_set_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_in_set_count(#function, #parameter, uintmax_t value_array[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_not_in_set_count: use expect_int_not_in_set_count or " \
|
|
|
|
|
+ "expect_uint_not_in_set_count instead") \
|
|
|
|
|
+ _expect_not_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the integer parameter value is not part of
|
|
|
|
|
+ * the provided integer 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_int_not_in_set(#function, #parameter, intmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_in_set(function, parameter, value_array) \
|
|
|
|
|
+ expect_int_not_in_set_count(function, parameter, value_array, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the integer parameter value is not part of
|
|
|
|
|
+ * the provided integer 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_int_not_in_set_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ intmax_t value_array[],
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ _expect_int_not_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the unsigned integer parameter value is not
|
|
|
|
|
+ * part of the provided unsigned integer 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_uint_not_in_set(#function, #parameter, uintmax_t value_array[]);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_in_set(function, parameter, value_array) \
|
|
|
|
|
+ expect_uint_not_in_set_count(function, parameter, value_array, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the unsigned integer parameter value is not
|
|
|
|
|
+ * part of the provided unsigned integer 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_uint_not_in_set_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ uintmax_t value_array[],
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_in_set_count(function, parameter, value_array, count) \
|
|
|
|
|
+ _expect_uint_not_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the float parameter value is part of the
|
|
|
|
|
+ * provided array.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value_array[] The array to check for the value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_float().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_in_set(#function, #parameter, double value_array[], double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_in_set(function, parameter, value_array, epsilon) \
|
|
|
|
|
+ expect_float_in_set_count(function, parameter, value_array, epsilon, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the float parameter value is part of the
|
|
|
|
|
+ * provided integer array.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_in_set_count(#function, #parameter, double value_array[], double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_in_set_count(function, parameter, value_array, epsilon, count) \
|
|
|
|
|
+ _expect_float_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ epsilon, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the float parameter value is not part of the
|
|
|
|
|
+ * provided array.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] value_array[] The array to check for the value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_float().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_not_in_set(#function, #parameter, double value_array[], double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_not_in_set(function, parameter, value_array, epsilon) \
|
|
|
|
|
+ expect_float_not_in_set_count(function, parameter, value_array, epsilon, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if the float parameter value is not part of the
|
|
|
|
|
+ * provided integer array.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_not_in_set_count(#function, #parameter, double value_array[], double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_not_in_set_count(function, parameter, value_array, epsilon, count) \
|
|
|
|
|
+ _expect_float_not_in_set(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value_array, \
|
|
|
|
|
+ sizeof(value_array) / sizeof((value_array)[0]), \
|
|
|
|
|
+ epsilon, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_in_range()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_in_range(#function, #parameter, uintmax_t minimum, uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_in_range(function, parameter, minimum, maximum) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_in_range: use expect_int_in_range or " \
|
|
|
|
|
+ "expect_uint_in_range instead") \
|
|
|
|
|
+ expect_in_range_count(function, parameter, minimum, maximum, 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_in_range_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_in_range_count(#function, #parameter, uintmax_t minimum, uintmax_t maximum, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_in_range_count(function, parameter, minimum, maximum, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_in_range_count: use expect_int_in_range_count or " \
|
|
|
|
|
+ "expect_uint_in_range_count instead") \
|
|
|
|
|
+ _expect_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ minimum, \
|
|
|
|
|
+ maximum, \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check an integer 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_int_in_range(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ intmax_t minimum,
|
|
|
|
|
+ intmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_in_range(function, parameter, minimum, maximum) \
|
|
|
|
|
+ expect_int_in_range_count(function, parameter, minimum, maximum, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check an integer 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_int_in_range_count(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ intmax_t minimum,
|
|
|
|
|
+ intmax_t maximum,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_in_range_count( \
|
|
|
|
|
+ function, parameter, minimum, maximum, count) \
|
|
|
|
|
+ _expect_int_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ minimum, \
|
|
|
|
|
+ maximum, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check an unsigned integer 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_uint_in_range(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ uintmax_t minimum,
|
|
|
|
|
+ uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_in_range(function, parameter, minimum, maximum) \
|
|
|
|
|
+ expect_uint_in_range_count(function, parameter, minimum, maximum, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check an unsigned integer 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_uint_in_range_count(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ uintmax_t minimum,
|
|
|
|
|
+ uintmax_t maximum,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_in_range_count( \
|
|
|
|
|
+ function, parameter, minimum, maximum, count) \
|
|
|
|
|
+ _expect_uint_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(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, uintmax_t minimum, uintmax_t 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, uintmax_t minimum, uintmax_t maximum, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_in_range_count(function, parameter, minimum, maximum, \
|
|
|
|
|
+ count) \
|
|
|
|
|
+ _expect_not_in_range(cmocka_tostring(function), cmocka_tostring(parameter), __FILE__, __LINE__, \
|
|
|
|
|
+ minimum, maximum, count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check an integer 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_int_not_in_range(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ intmax_t minimum,
|
|
|
|
|
+ intmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_in_range(function, parameter, minimum, maximum) \
|
|
|
|
|
+ expect_int_not_in_range_count(function, parameter, minimum, maximum, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check an integer 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_int_not_in_range_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ intmax_t minimum,
|
|
|
|
|
+ intmax_t maximum,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_in_range_count( \
|
|
|
|
|
+ function, parameter, minimum, maximum, count) \
|
|
|
|
|
+ _expect_int_not_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ minimum, \
|
|
|
|
|
+ maximum, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check an unsigned integer 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_uint_not_in_range(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ uintmax_t minimum,
|
|
|
|
|
+ uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_in_range(function, parameter, minimum, maximum) \
|
|
|
|
|
+ expect_uint_not_in_range_count(function, parameter, minimum, maximum, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check an unsigned integer 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_uint_not_in_range_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ uintmax_t minimum,
|
|
|
|
|
+ uintmax_t maximum,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_in_range_count( \
|
|
|
|
|
+ function, parameter, minimum, maximum, count) \
|
|
|
|
|
+ _expect_uint_not_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ minimum, \
|
|
|
|
|
+ maximum, \
|
|
|
|
|
+ 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_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_float().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_in_range(#function, #parameter, double minimum, double maximum, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_in_range(function, parameter, minimum, maximum, epsilon) \
|
|
|
|
|
+ expect_float_in_range_count(function, parameter, minimum, maximum, epsilon, 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_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_in_range_count(#function, #parameter, double minimum, double maximum, double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_in_range_count(function, parameter, minimum, maximum, epsilon, count) \
|
|
|
|
|
+ _expect_float_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_double_type(minimum), \
|
|
|
|
|
+ cast_to_double_type(maximum), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_not_in_range(#function, #parameter, double minimum, double maximum, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_not_in_range(function, parameter, minimum, maximum, epsilon) \
|
|
|
|
|
+ expect_float_not_in_range_count(function, parameter, minimum, maximum, epsilon, 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float_not_in_range_count(#function, #parameter, double minimum, double maximum, double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_not_in_range_count(function, parameter, minimum, maximum, \
|
|
|
|
|
+ epsilon, count) \
|
|
|
|
|
+ _expect_float_not_in_range(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_double_type(minimum), \
|
|
|
|
|
+ cast_to_double_type(maximum), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_value() or expect_uint_value()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_value(#function, #parameter, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_value(function, parameter, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING("expect_value: use expect_int_value or " \
|
|
|
|
|
+ "expect_uint_value instead") \
|
|
|
|
|
+ expect_value_count(function, parameter, value, 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_value_count() or expect_uint_value_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_value_count(#function, #parameter, uintmax_t value, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_value_count(function, parameter, value, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_value_count: use expect_int_value_count or " \
|
|
|
|
|
+ "expect_uint_value_count instead") \
|
|
|
|
|
+ _expect_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_uintmax_type(value), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if an integer 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_int_value(#function, #parameter, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_value(function, parameter, value) \
|
|
|
|
|
+ expect_int_value_count(function, parameter, value, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if an integer 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_int_value_count(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ intmax_t value,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_value_count(function, parameter, value, count) \
|
|
|
|
|
+ _expect_int_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if an unsigned integer 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_uint_value(#function, #parameter, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_value(function, parameter, value) \
|
|
|
|
|
+ expect_uint_value_count(function, parameter, value, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if an unsigned integer 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_uint_value_count(#function,
|
|
|
|
|
+#parameter,
|
|
|
|
|
+ uintmax_t value,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_value_count(function, parameter, value, count) \
|
|
|
|
|
+ _expect_uint_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter (int) 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 (intmax_t) to check.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_int_not_value(#function, #parameter, intmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_value(function, parameter, value) \
|
|
|
|
|
+ expect_int_not_value_count(function, parameter, value, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter (int) 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 (intmax_t) 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_int_not_value_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ intmax_t value,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_int_not_value_count(function, parameter, value, count) \
|
|
|
|
|
+ _expect_int_not_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter (uint) 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 (uintmax_t) to check.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_uint_not_value(#function, #parameter, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_value(function, parameter, value) \
|
|
|
|
|
+ expect_uint_not_value_count(function, parameter, value, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter (uint) 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 (uintmax_t) 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_uint_not_value_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ uintmax_t value,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_uint_not_value_count(function, parameter, value, count) \
|
|
|
|
|
+ _expect_uint_not_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ value, \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_not_value() or expect_uint_not_value()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_value(#function, #parameter, uintmax_t value);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_value(function, parameter, value) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_not_value: use expect_int_not_value or " \
|
|
|
|
|
+ "expect_uint_not_value instead") \
|
|
|
|
|
+ expect_not_value_count(function, parameter, value, 1); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use expect_int_not_value_count() or expect_uint_not_value_count()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_value_count(#function, #parameter, uintmax_t value, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_value_count(function, parameter, value, count) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "expect_not_value_count: use expect_int_not_value_count or " \
|
|
|
|
|
+ "expect_uint_not_value_count instead") \
|
|
|
|
|
+ _expect_not_value(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_uintmax_type(value), \
|
|
|
|
|
+ count); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter is the given floating point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_float()
|
|
|
|
|
+ * @see expect_string()
|
|
|
|
|
+ * @see expect_memory()
|
|
|
|
|
+ * @see expect_any()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float(#function, #parameter, double value, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float(function, parameter, value, epsilon) \
|
|
|
|
|
+ expect_float_count(function, parameter, cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(epsilon), 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter is the given floating
|
|
|
|
|
+ * point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float().
|
|
|
|
|
+ * @see expect_not_string()
|
|
|
|
|
+ * @see expect_not_memory()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_float_count(#function, #parameter, double value, double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_float_count(function, parameter, value, epsilon, count) \
|
|
|
|
|
+ _expect_float(cmocka_tostring(function), cmocka_tostring(parameter), __FILE__, __LINE__, \
|
|
|
|
|
+ cast_to_double_type(value), cast_to_double_type(epsilon), count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter isn't the given floating point
|
|
|
|
|
+ * value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_float()
|
|
|
|
|
+ * @see expect_string()
|
|
|
|
|
+ * @see expect_memory()
|
|
|
|
|
+ * @see expect_any()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_float(#function, #parameter, double value, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_float(function, parameter, value, epsilon) \
|
|
|
|
|
+ expect_not_float_count(function, \
|
|
|
|
|
+ parameter, \
|
|
|
|
|
+ cast_to_float_type(value), \
|
|
|
|
|
+ cast_to_float_type(epsilon), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter isn't the floating
|
|
|
|
|
+ * point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_float() 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] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_float().
|
|
|
|
|
+ * @see expect_not_string()
|
|
|
|
|
+ * @see expect_not_memory()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_float_count(#function, #parameter, double value, double epsilon, size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_float_count(function, parameter, value, epsilon, count) \
|
|
|
|
|
+ _expect_not_float(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_float_type(value), \
|
|
|
|
|
+ cast_to_float_type(epsilon), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter is the given double
|
|
|
|
|
+ * precision floating point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_double() 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] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_double(#function, #parameter, double value, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_double(function, parameter, value, epsilon) \
|
|
|
|
|
+ expect_double_count(function, \
|
|
|
|
|
+ parameter, \
|
|
|
|
|
+ cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter is the given double
|
|
|
|
|
+ * precision floating point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_double() 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] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_double().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_double_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ double value,
|
|
|
|
|
+ double epsilon,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_double_count(function, parameter, value, epsilon, count) \
|
|
|
|
|
+ _expect_double(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to check if a parameter isn't the given double precision
|
|
|
|
|
+ * floating point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_double() 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] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_double()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_double(#function, #parameter, double value, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_double(function, parameter, value, epsilon) \
|
|
|
|
|
+ expect_not_double_count(function, \
|
|
|
|
|
+ parameter, \
|
|
|
|
|
+ cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Add an event to repeatedly check if a parameter isn't the double
|
|
|
|
|
+ * precision floating point value.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The event is triggered by calling check_expected_double() 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] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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_double().
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_not_double_count(#function,
|
|
|
|
|
+ #parameter,
|
|
|
|
|
+ double value,
|
|
|
|
|
+ double epsilon,
|
|
|
|
|
+ size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_not_double_count(function, parameter, value, epsilon, count) \
|
|
|
|
|
+ _expect_not_double(cmocka_tostring(function), \
|
|
|
|
|
+ cmocka_tostring(parameter), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ 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(cmocka_tostring(function), cmocka_tostring(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(cmocka_tostring(function), cmocka_tostring(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(cmocka_tostring(function), cmocka_tostring(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(cmocka_tostring(function), cmocka_tostring(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 always 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_always(#function, #parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_any_always(function, parameter) \
|
|
|
|
|
+ expect_any_count(function, parameter, WILL_RETURN_ALWAYS)
|
|
|
|
|
+#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(cmocka_tostring(function), cmocka_tostring(parameter), __FILE__, __LINE__, count)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use check_expected_int(), check_expected_uint(),
|
|
|
|
|
+ * check_expected_float or check_expetecd_double() instead.
|
|
|
|
|
+ */
|
|
|
|
|
+void check_expected(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected(parameter) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "check_expected: use check_expected_int or " \
|
|
|
|
|
+ "check_expected_uint instead") \
|
|
|
|
|
+ _check_expected(__func__, \
|
|
|
|
|
+ #parameter, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ cast_int_to_cmocka_value(parameter)); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Check that any parameter value matches the next value in the queue.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This generic parameter checker works with any type including structs passed
|
|
|
|
|
+ * by value. It passes the address of the parameter, making it suitable for
|
|
|
|
|
+ * struct validation with custom checkers.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Use this when:
|
|
|
|
|
+ * - Checking structs passed by value with expect_check_data()
|
|
|
|
|
+ * - Generic/template code where the type isn't known
|
|
|
|
|
+ *
|
|
|
|
|
+ * For scalar types, prefer the type-specific versions:
|
|
|
|
|
+ * - check_expected_int() for signed integers
|
|
|
|
|
+ * - check_expected_uint() for unsigned integers
|
|
|
|
|
+ * - check_expected_float() for float types
|
|
|
|
|
+ * - check_expected_double() for double types
|
|
|
|
|
+ * - check_expected_ptr() for pointers
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #parameter The parameter to check.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see check_expected_int()
|
|
|
|
|
+ * @see check_expected_uint()
|
|
|
|
|
+ * @see check_expected_float()
|
|
|
|
|
+ * @see check_expected_double()
|
|
|
|
|
+ * @see check_expected_ptr()
|
|
|
|
|
+ * @see expect_check_data()
|
|
|
|
|
+ */
|
|
|
|
|
+void check_expected_any(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected_any(parameter) \
|
|
|
|
|
+ _check_expected(__func__, #parameter, __FILE__, __LINE__, \
|
|
|
|
|
+ cast_ptr_to_cmocka_value(&(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_cmocka_value(parameter))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Determine whether a function parameter is correct.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This ensures the next value queued by one of the expect_int*() 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_int(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected_int(parameter) \
|
|
|
|
|
+ _check_expected(__func__, \
|
|
|
|
|
+ #parameter, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ assign_int_to_cmocka_value(parameter))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Determine whether a function parameter is correct.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This ensures the next value queued by one of the expect_uint*() 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_uint(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected_uint(parameter) \
|
|
|
|
|
+ _check_expected(__func__, \
|
|
|
|
|
+ #parameter, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ assign_uint_to_cmocka_value(parameter))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Determine whether a function parameter is correct.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This ensures the next value queued by one of the expect*_float() macros matches
|
|
|
|
|
+ * the specified variable.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This function needs to be called in the mock object.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #parameter The parameter to check.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_float
|
|
|
|
|
+ * @see expect_not_float
|
|
|
|
|
+ * @see expect_float_count
|
|
|
|
|
+ * @see expect_not_float_count
|
|
|
|
|
+ */
|
|
|
|
|
+void check_expected_float(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected_float(parameter) \
|
|
|
|
|
+ _check_expected(__func__, \
|
|
|
|
|
+ #parameter, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ assign_float_to_cmocka_value(parameter))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Determine whether a function parameter is correct.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This ensures the next value queued by one of the expect*_double() macros
|
|
|
|
|
+ * matches the specified variable.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This function needs to be called in the mock object.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #parameter The parameter to check.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_double
|
|
|
|
|
+ * @see expect_not_double
|
|
|
|
|
+ * @see expect_double_count
|
|
|
|
|
+ * @see expect_not_double_count
|
|
|
|
|
+ */
|
|
|
|
|
+void check_expected_double(#parameter);
|
|
|
|
|
+#else
|
|
|
|
|
+#define check_expected_double(parameter) \
|
|
|
|
|
+ _check_expected(__func__, \
|
|
|
|
|
+ #parameter, \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ assign_double_to_cmocka_value(parameter))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_param */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_asserts 🛡️ Assert Macros
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Verify conditions and fail tests when assertions don't hold.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Assertion macros for validating test conditions.
|
|
|
|
|
+ *
|
|
|
|
|
+ * CMocka provides type-specific assertion macros that display detailed
|
|
|
|
|
+ * information about failures, making debugging easier than the standard C
|
|
|
|
|
+ * library'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_uintmax_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_false(cast_to_uintmax_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(intmax_t rc, int32_t error);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_return_code(rc, error) \
|
|
|
|
|
+ _assert_return_code((rc), \
|
|
|
|
|
+ (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 NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] pointer The pointer to evaluate.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see assert_null()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_non_null(void *pointer);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_non_null(c) assert_ptr_not_equal((c), NULL)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the given pointer is non-NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message extended by message to standard error
|
|
|
|
|
+ * and terminates the test by calling fail() if the pointer is NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] pointer The pointer to evaluate.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] message The message to print when the pointer is NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see assert_null_msg()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_non_null_msg(void *pointer, const char *const message);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_non_null_msg(c, msg) assert_ptr_not_equal_msg((c), NULL, (msg))
|
|
|
|
|
+#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_ptr_equal((c), NULL)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the given pointer is NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message extended by message to standard error
|
|
|
|
|
+ * and terminates the test by calling fail() if the pointer is non-NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] pointer The pointer to evaluate.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] message The message to print when the pointer is not NULL.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see assert_non_null_msg()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_null_msg(void *pointer, const char *const message);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_null_msg(c, msg) assert_ptr_equal_msg((c), NULL, (msg))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given pointers are equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message and terminates the test by calling
|
|
|
|
|
+ * fail() if the pointers are not equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first pointer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The pointer to compare against the first one.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_ptr_equal(void *a, void *b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_ptr_equal(a, b) assert_ptr_equal_msg((a), (b), NULL)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given pointers are equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints the failing comparison and the error message given by the user
|
|
|
|
|
+ * and then terminates the test by calling fail() if the pointers are not equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first pointer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The pointer to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] msg The error message to print when a & b are not equal.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_ptr_equal_msg(void *a, void *b, const char *const msg);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_ptr_equal_msg(a, b, msg) \
|
|
|
|
|
+ _assert_ptr_equal_msg(cast_to_void_pointer(a), \
|
|
|
|
|
+ cast_to_void_pointer(b), \
|
|
|
|
|
+ __FILE__, __LINE__, (msg))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given pointers are not equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message and terminates the test by calling
|
|
|
|
|
+ * fail() if the pointers are equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first pointer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The pointer to compare against the first one.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_ptr_not_equal(void *a, void *b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_ptr_not_equal(a, b) \
|
|
|
|
|
+ assert_ptr_not_equal_msg((a), (b), NULL)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given pointers are not equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints the failing comparison and the error message given by the user
|
|
|
|
|
+ * and then terminates the test by calling fail() if the pointers are equal.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first pointer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The pointer to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] msg The error message to print when a & b are equal.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_ptr_not_equal_msg(void *a, void *b, const char *const msg);
|
|
|
|
|
+#else /* DOXYGEN */
|
|
|
|
|
+
|
|
|
|
|
+#if defined(__has_builtin)
|
|
|
|
|
+
|
|
|
|
|
+#if __has_builtin(__builtin_unreachable)
|
|
|
|
|
+#define assert_ptr_not_equal_msg(a, b, msg) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ const void *cmocka_p1 = cast_to_void_pointer(a), \
|
|
|
|
|
+ *cmocka_p2 = cast_to_void_pointer(b); \
|
|
|
|
|
+ _assert_ptr_not_equal_msg( \
|
|
|
|
|
+ cmocka_p1, cmocka_p2, __FILE__, __LINE__, (msg)); \
|
|
|
|
|
+ if (cmocka_p1 == cmocka_p2) { \
|
|
|
|
|
+ __builtin_unreachable(); \
|
|
|
|
|
+ } \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#else /* __has_builtin(__builtin_unreachable) */
|
|
|
|
|
+#define assert_ptr_not_equal_msg(a, b, msg) \
|
|
|
|
|
+_assert_ptr_not_equal_msg(cast_to_void_pointer(a), \
|
|
|
|
|
+ cast_to_void_pointer(b), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ (msg))
|
|
|
|
|
+#endif /* __has_builtin(__builtin_unreachable) */
|
|
|
|
|
+
|
|
|
|
|
+#else /* defined(__has_builtin) */
|
|
|
|
|
+#define assert_ptr_not_equal_msg(a, b, msg) \
|
|
|
|
|
+_assert_ptr_not_equal_msg(cast_to_void_pointer(a), \
|
|
|
|
|
+ cast_to_void_pointer(b), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__, \
|
|
|
|
|
+ (msg))
|
|
|
|
|
+#endif /* __has_builtin(__builtin_unreachable) */
|
|
|
|
|
+
|
|
|
|
|
+#endif /* DOXYGEN */
|
|
|
|
|
+
|
|
|
|
|
+#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(intmax_t a, intmax_t b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_equal(a, b) \
|
|
|
|
|
+ _assert_int_equal(cast_to_intmax_type(a), \
|
|
|
|
|
+ cast_to_intmax_type(b), \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given unsigned 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 unsigned integer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The unsigned integer to compare against the first one.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_uint_equal(uintmax_t a, uintmax_t b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_equal(a, b) \
|
|
|
|
|
+ _assert_uint_equal(cast_to_uintmax_type(a), \
|
|
|
|
|
+ cast_to_uintmax_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(intmax_t a, intmax_t b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_not_equal(a, b) \
|
|
|
|
|
+ _assert_int_not_equal(cast_to_intmax_type(a), \
|
|
|
|
|
+ cast_to_intmax_type(b), \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given unsigned integers are not 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 unsigned integer to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The unsigned integer to compare against the first one.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_uint_not_equal(uintmax_t a, uintmax_t b);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_not_equal(a, b) \
|
|
|
|
|
+ _assert_uint_not_equal(cast_to_uintmax_type(a), \
|
|
|
|
|
+ cast_to_uintmax_type(b), \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given float are equal given an epsilon.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message to standard error and terminates the
|
|
|
|
|
+ * test by calling fail() if the float are not equal (given an epsilon).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first float to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The float to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_equal(float a, float b, float epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_equal(a, b, epsilon) \
|
|
|
|
|
+ _assert_float_equal((float)a, \
|
|
|
|
|
+ (float)b, \
|
|
|
|
|
+ (float)epsilon, \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given float are not equal given an epsilon.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message to standard error and terminates the
|
|
|
|
|
+ * test by calling fail() if the float are not equal (given an epsilon).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first float to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The float to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_not_equal(float a, float b, float epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_not_equal(a, b, epsilon) \
|
|
|
|
|
+ _assert_float_not_equal((float)a, \
|
|
|
|
|
+ (float)b, \
|
|
|
|
|
+ (float)epsilon, \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given double are equal given an epsilon.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message to standard error and terminates the
|
|
|
|
|
+ * test by calling fail() if the double are not equal (given an epsilon).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first double to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The double to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_double_equal(double a, double b, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_double_equal(a, b, epsilon) \
|
|
|
|
|
+ _assert_double_equal((double)a, \
|
|
|
|
|
+ (double)b, \
|
|
|
|
|
+ (double)epsilon, \
|
|
|
|
|
+ __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the two given double are not equal given an epsilon.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The function prints an error message to standard error and terminates the
|
|
|
|
|
+ * test by calling fail() if the double are not equal (given an epsilon).
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] a The first double to compare.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] b The double to compare against the first one.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for double comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_double_not_equal(double a, double b, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_double_not_equal(a, b, epsilon) \
|
|
|
|
|
+ _assert_double_not_equal((double)a, \
|
|
|
|
|
+ (double)b, \
|
|
|
|
|
+ (double)epsilon, \
|
|
|
|
|
+ __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((a), (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((a), (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 integer 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_int_in_range(intmax_t value, intmax_t minimum, intmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_in_range(value, minimum, maximum) \
|
|
|
|
|
+ _assert_int_in_range( \
|
|
|
|
|
+ cast_to_intmax_type(value), \
|
|
|
|
|
+ cast_to_intmax_type(minimum), \
|
|
|
|
|
+ cast_to_intmax_type(maximum), __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified unsigned integer 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_uint_in_range(uintmax_t value, uintmax_t minimum, uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_in_range(value, minimum, maximum) \
|
|
|
|
|
+ _assert_uint_in_range( \
|
|
|
|
|
+ cast_to_intmax_type(value), \
|
|
|
|
|
+ cast_to_intmax_type(minimum), \
|
|
|
|
|
+ cast_to_intmax_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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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_int_not_in_range(intmax_t value,
|
|
|
|
|
+ intmax_t minimum,
|
|
|
|
|
+ intmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_not_in_range(value, minimum, maximum) \
|
|
|
|
|
+ _assert_int_not_in_range(cast_to_intmax_type(value), \
|
|
|
|
|
+ cast_to_intmax_type(minimum), \
|
|
|
|
|
+ cast_to_intmax_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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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_uint_not_in_range(uintmax_t value,
|
|
|
|
|
+ uintmax_t minimum,
|
|
|
|
|
+ uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_not_in_range(value, minimum, maximum) \
|
|
|
|
|
+ _assert_uint_not_in_range(cast_to_uintmax_type(value), \
|
|
|
|
|
+ cast_to_uintmax_type(minimum), \
|
|
|
|
|
+ cast_to_uintmax_type(maximum), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use assert_int_in_range() and assert_uint_in_range()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_in_range(uintmax_t value, uintmax_t minimum, uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_in_range(value, minimum, maximum) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "assert_in_range: use assert_int_in_range or " \
|
|
|
|
|
+ "assert_uint_in_range instead") \
|
|
|
|
|
+ _assert_uint_in_range(cast_to_uintmax_type(value), \
|
|
|
|
|
+ cast_to_uintmax_type(minimum), \
|
|
|
|
|
+ cast_to_uintmax_type(maximum), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use assert_int_not_in_range() or assert_uint_not_in_range()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_not_in_range(uintmax_t value, uintmax_t minimum, uintmax_t maximum);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_not_in_range(value, minimum, maximum) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "assert_not_in_range: use assert_int_not_in_range or " \
|
|
|
|
|
+ "assert_uint_not_in_range instead") \
|
|
|
|
|
+ _assert_uint_not_in_range(cast_to_uintmax_type(value), \
|
|
|
|
|
+ cast_to_uintmax_type(minimum), \
|
|
|
|
|
+ cast_to_uintmax_type(maximum), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified float 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_not_in_range(double value, double minimum, double maximum, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_not_in_range(value, minimum, maximum, epsilon) \
|
|
|
|
|
+ _assert_float_not_in_range(cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(minimum), \
|
|
|
|
|
+ cast_to_double_type(maximum), \
|
|
|
|
|
+ cast_to_double_type(epsilon), \
|
|
|
|
|
+ __FILE__, \
|
|
|
|
|
+ __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified float 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_in_range(double value, double minimum, double maximum, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_in_range(value, minimum, maximum, epsilon) \
|
|
|
|
|
+ _assert_float_in_range( \
|
|
|
|
|
+ cast_to_double_type(value), \
|
|
|
|
|
+ cast_to_double_type(minimum), \
|
|
|
|
|
+ cast_to_double_type(maximum), \
|
|
|
|
|
+ cast_to_double_type(epsilon), __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use assert_int_in_set() or assert_uint_in_set()
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_in_set(uintmax_t value, uintmax_t values[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_in_set(value, values, number_of_values) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING("assert_in_set: use assert_int_in_set or " \
|
|
|
|
|
+ "assert_uint_in_set instead") \
|
|
|
|
|
+ _assert_uint_in_set( \
|
|
|
|
|
+ value, values, number_of_values, __FILE__, __LINE__); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#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(uintmax_t value, uintmax_t 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
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified integer 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_int_in_set(intmax_t value, intmax_t values[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_in_set(value, values, number_of_values) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ intmax_t _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_int_in_set(value, _cmocka_set, 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_int_not_in_set(intmax_t value, intmax_t values[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_int_not_in_set(value, values, number_of_values) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ intmax_t _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_int_not_in_set(value, _cmocka_set, number_of_values, __FILE__, __LINE__); \
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified unsigned integer 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_uint_in_set(uintmax_t value, uintmax_t values[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_in_set(value, values, number_of_values) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ uintmax_t _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_uint_in_set(value, _cmocka_set, number_of_values, __FILE__, __LINE__); \
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified unsigned integer 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_uint_not_in_set(uintmax_t value, uintmax_t values[], size_t count);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_uint_not_in_set(value, values, number_of_values) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ uintmax_t _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_uint_not_in_set(value, _cmocka_set, number_of_values, __FILE__, __LINE__); \
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified float 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_in_set(double value, double values[], size_t count, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_in_set(value, values, number_of_values, epsilon) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ double _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_float_in_set(value, _cmocka_set, number_of_values, epsilon, __FILE__, __LINE__); \
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Assert that the specified float 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 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] epsilon The epsilon used as margin for float comparison.
|
|
|
|
|
+ */
|
|
|
|
|
+void assert_float_not_in_set(double value, double values[], size_t count, double epsilon);
|
|
|
|
|
+#else
|
|
|
|
|
+#define assert_float_not_in_set(value, values, number_of_values, epsilon) \
|
|
|
|
|
+ if (number_of_values > 0) { \
|
|
|
|
|
+ double _cmocka_set[number_of_values]; \
|
|
|
|
|
+ for (size_t _i = 0; _i < number_of_values; _i++) { \
|
|
|
|
|
+ _cmocka_set[_i] = values[_i]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ _assert_float_not_in_set(value, _cmocka_set, number_of_values, epsilon, __FILE__, __LINE__); \
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_asserts */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_call_order 🔢 Call Ordering
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Ensure functions are called in the correct sequence.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Verify that functions are called in the expected order.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This module provides functionality to ensure functions are called in a
|
|
|
|
|
+ * specific sequence, independent of mock return values and parameter
|
|
|
|
|
+ * checking. Both of the aforementioned do not verify the order in which
|
|
|
|
|
+ * functions are called.
|
|
|
|
|
+ *
|
|
|
|
|
+ * <ul>
|
|
|
|
|
+ * <li><strong>expect_function_call(function)</strong> - The
|
|
|
|
|
+ * expect_function_call() macro pushes an expectation onto the stack of
|
|
|
|
|
+ * expected calls.</li>
|
|
|
|
|
+ *
|
|
|
|
|
+ * <li><strong>function_called()</strong> - pops a value from the stack of
|
|
|
|
|
+ * expected calls. function_called() is invoked within the mock object
|
|
|
|
|
+ * that uses it.
|
|
|
|
|
+ * </ul>
|
|
|
|
|
+ *
|
|
|
|
|
+ * expect_function_call() and function_called() are intended to be used in
|
|
|
|
|
+ * pairs. Cmocka will fail a test if there are more or less expected calls
|
|
|
|
|
+ * created (e.g. expect_function_call()) than consumed with function_called().
|
|
|
|
|
+ * There are provisions such as ignore_function_calls() which allow this
|
|
|
|
|
+ * restriction to be circumvented in tests where mock calls for the code under
|
|
|
|
|
+ * test are not the focus of the test. function_called() must be called from
|
|
|
|
|
+ * the same thread as expect_function_call(), and that thread must have been
|
|
|
|
|
+ * initialized for use by cmocka (see also the [Threading section of the main
|
|
|
|
|
+ * documentation page](index.html#main-threads)).
|
|
|
|
|
+ *
|
|
|
|
|
+ * The following example illustrates how a unit test instructs cmocka
|
|
|
|
|
+ * to expect a function_called() from a particular mock,
|
|
|
|
|
+ * <strong>chef_sing()</strong>:
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void chef_sing(void);
|
|
|
|
|
+ *
|
|
|
|
|
+ * void code_under_test()
|
|
|
|
|
+ * {
|
|
|
|
|
+ * chef_sing();
|
|
|
|
|
+ * }
|
|
|
|
|
+ *
|
|
|
|
|
+ * void some_test(void **state)
|
|
|
|
|
+ * {
|
|
|
|
|
+ * expect_function_call(chef_sing);
|
|
|
|
|
+ * code_under_test();
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * The implementation of the mock then must check whether it was meant to
|
|
|
|
|
+ * be called by invoking <strong>function_called()</strong>:
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * void chef_sing()
|
|
|
|
|
+ * {
|
|
|
|
|
+ * function_called();
|
|
|
|
|
+ * }
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Check that current mocked function is being called in the expected
|
|
|
|
|
+ * order
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see expect_function_call()
|
|
|
|
|
+ */
|
|
|
|
|
+void function_called(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define function_called() _function_called(__func__, __FILE__, __LINE__)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store expected call(s) to a mock to be checked by function_called()
|
|
|
|
|
+ * later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should should be called
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] times number of times this mock must be called
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see function_called()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_function_calls(#function, const int times);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_function_calls(function, times) \
|
|
|
|
|
+ _expect_function_call(cmocka_tostring(function), __FILE__, __LINE__, times)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Store expected single call to a mock to be checked by
|
|
|
|
|
+ * function_called() later.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should should be called
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see function_called()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_function_call(#function);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_function_call(function) \
|
|
|
|
|
+ _expect_function_call(cmocka_tostring(function), __FILE__, __LINE__, 1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Expects function_called() from given mock at least once
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should should be called
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see function_called()
|
|
|
|
|
+ */
|
|
|
|
|
+void expect_function_call_any(#function);
|
|
|
|
|
+#else
|
|
|
|
|
+#define expect_function_call_any(function) \
|
|
|
|
|
+ _expect_function_call(cmocka_tostring(function), __FILE__, __LINE__, -1)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Ignores function_called() invocations from given mock function.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] #function The function which should should be called
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see function_called()
|
|
|
|
|
+ */
|
|
|
|
|
+void ignore_function_calls(#function);
|
|
|
|
|
+#else
|
|
|
|
|
+#define ignore_function_calls(function) \
|
|
|
|
|
+ _expect_function_call(cmocka_tostring(function), __FILE__, __LINE__, -2)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_call_order */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_exec ▶️ Running Tests
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Execute test suites with setup and teardown functions.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Test execution framework and test runners.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This module provides the infrastructure for defining, organizing, and
|
|
|
|
|
+ * running tests, including support for setup/teardown functions (fixtures),
|
|
|
|
|
+ * test grouping, and multiple test runner macros.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The following example illustrates how to define and run tests with
|
|
|
|
|
+ * CMocka.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @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 be stopped immediately.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Call stop() to stop a running test.
|
|
|
|
|
+ * The test is considered passed if there are no leftover values, otherwise a test failure
|
|
|
|
|
+ * is signaled.
|
|
|
|
|
+ * Calling stop() is especially useful in mocked functions that do not return, e.g reset the CPU.
|
|
|
|
|
+ */
|
|
|
|
|
+void stop(void);
|
|
|
|
|
+#else
|
|
|
|
|
+#define stop() _stop()
|
|
|
|
|
+#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 { \
|
|
|
|
|
+ cmocka_print_error("ERROR: " msg "\n", ##__VA_ARGS__); \
|
|
|
|
|
+ fail(); \
|
|
|
|
|
+} while (0)
|
|
|
|
|
+#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) \
|
|
|
|
|
+ (CMOCKA_DEPRECATION_WARNING("unit_test: use cmocka_unit_test instead")( \
|
|
|
|
|
+ UnitTest){#f, f, UNIT_TEST_FUNCTION_TYPE_TEST})
|
|
|
|
|
+
|
|
|
|
|
+/** @cond INTERNAL */
|
|
|
|
|
+#define _unit_test_setup(test, setup) \
|
|
|
|
|
+ { #test "_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_SETUP }
|
|
|
|
|
+/** @endcond */
|
|
|
|
|
+
|
|
|
|
|
+/** 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) \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "unit_test_setup: use cmocka_unit_test_setup instead") \
|
|
|
|
|
+ _unit_test_setup(test, setup), unit_test(test), \
|
|
|
|
|
+ _unit_test_teardown(test, _unit_test_dummy)
|
|
|
|
|
+
|
|
|
|
|
+/** @cond INTERNAL */
|
|
|
|
|
+#define _unit_test_teardown(test, teardown) \
|
|
|
|
|
+ { #test "_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_TEARDOWN }
|
|
|
|
|
+/** @endcond */
|
|
|
|
|
+
|
|
|
|
|
+/** 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) \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "unit_test_teardown: use cmocka_unit_test_teardown instead") \
|
|
|
|
|
+ _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) \
|
|
|
|
|
+ (CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "group_test_setup: use cmocka_run_group_tests instead")(UnitTest){ \
|
|
|
|
|
+ "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) \
|
|
|
|
|
+ (CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "group_test_teardown: use cmocka_run_group_tests instead")(UnitTest){ \
|
|
|
|
|
+ "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) \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING("unit_test_setup_teardown: use " \
|
|
|
|
|
+ "cmocka_unit_test_setup_teardown instead") \
|
|
|
|
|
+ _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, NULL }
|
|
|
|
|
+
|
|
|
|
|
+/** Initializes a CMUnitTest structure with a setup function. */
|
|
|
|
|
+#define cmocka_unit_test_setup(f, setup) { #f, f, setup, NULL, NULL }
|
|
|
|
|
+
|
|
|
|
|
+/** Initializes a CMUnitTest structure with a teardown function. */
|
|
|
|
|
+#define cmocka_unit_test_teardown(f, teardown) { #f, f, NULL, teardown, NULL }
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 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, NULL }
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Initialize a CMUnitTest structure with given initial state. It will be passed
|
|
|
|
|
+ * to test function as an argument later. It can be used when test state does
|
|
|
|
|
+ * not need special initialization or was initialized already.
|
|
|
|
|
+ * @note If the group setup function initialized the state already, it won't be
|
|
|
|
|
+ * overridden by the initial state defined here.
|
|
|
|
|
+ */
|
|
|
|
|
+#define cmocka_unit_test_prestate(f, state) { #f, f, NULL, NULL, state }
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Initialize a CMUnitTest structure with given initial state, setup and
|
|
|
|
|
+ * teardown function. Any of these values can be NULL. Initial state is passed
|
|
|
|
|
+ * later to setup function, or directly to test if none was given.
|
|
|
|
|
+ * @note If the group setup function initialized the state already, it won't be
|
|
|
|
|
+ * overridden by the initial state defined here.
|
|
|
|
|
+ */
|
|
|
|
|
+#define cmocka_unit_test_prestate_setup_teardown(f, setup, teardown, state) { #f, f, setup, teardown, state }
|
|
|
|
|
+
|
|
|
|
|
+#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 int 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 int 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
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_exec */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_alloc 🧩 Dynamic Memory Allocation
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Detect memory leaks, buffer overflows, and allocation errors.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @warning This shouldn't be used anymore, better use
|
|
|
|
|
+ * <a href="https://clang.llvm.org/docs/AddressSanitizer.html">AddressSanitizer</a>.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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.
|
|
|
|
|
+ *
|
|
|
|
|
+ * <b>Automatic Allocation Redirection (Deprecated):</b>
|
|
|
|
|
+ *
|
|
|
|
|
+ * When both UNIT_TESTING and ALLOCATION_TESTING are defined, the standard
|
|
|
|
|
+ * C library allocation functions (malloc, calloc, realloc, free) are
|
|
|
|
|
+ * automatically redirected to cmocka's test allocators. This enables
|
|
|
|
|
+ * automatic memory leak detection and helps ensure proper memory management
|
|
|
|
|
+ * in tested code.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @note This feature is deprecated and should not be used in new code.
|
|
|
|
|
+ * Better use
|
|
|
|
|
+ * <a href="https://clang.llvm.org/docs/AddressSanitizer.html">AddressSanitizer</a>.
|
|
|
|
|
+ *
|
|
|
|
|
+ * To enable allocation testing, define both macros before including cmocka.h:
|
|
|
|
|
+ *
|
|
|
|
|
+ * @code
|
|
|
|
|
+ * #include <stdlib.h>
|
|
|
|
|
+ *
|
|
|
|
|
+ * #define UNIT_TESTING 1
|
|
|
|
|
+ * #define ALLOCATION_TESTING 1
|
|
|
|
|
+ * #include <cmocka.h>
|
|
|
|
|
+ *
|
|
|
|
|
+ * // This code will have malloc/free automatically redirected
|
|
|
|
|
+ * void* ptr = malloc(100); // Actually calls test_malloc()
|
|
|
|
|
+ * free(ptr); // Actually calls test_free()
|
|
|
|
|
+ * @endcode
|
|
|
|
|
+ *
|
|
|
|
|
+ * With ALLOCATION_TESTING enabled:
|
|
|
|
|
+ * - malloc() → test_malloc()
|
|
|
|
|
+ * - calloc() → test_calloc()
|
|
|
|
|
+ * - realloc() → test_realloc()
|
|
|
|
|
+ * - free() → test_free()
|
|
|
|
|
+ *
|
|
|
|
|
+ * @warning Mixing regular allocations with test allocations can lead to
|
|
|
|
|
+ * memory corruption. Ensure consistent usage throughout your
|
|
|
|
|
+ * test code.
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+#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 memory 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
|
|
|
|
|
+
|
|
|
|
|
+#if defined(UNIT_TESTING) && defined(ALLOCATION_TESTING)
|
|
|
|
|
+#define malloc test_malloc
|
|
|
|
|
+#define realloc test_realloc
|
|
|
|
|
+#define calloc test_calloc
|
|
|
|
|
+#define free test_free
|
|
|
|
|
+#endif /* UNIT_TESTING && ALLOCATION_TESTING */
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_alloc */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_mock_assert 🎯 Standard Assertions
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Test code that uses assert(3) from the standard C library.
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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 conjunction 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) \
|
|
|
|
|
+ { \
|
|
|
|
|
+ global_expecting_assert = 1; \
|
|
|
|
|
+ if (setjmp(global_expect_assert_env) != 0) { \
|
|
|
|
|
+ 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
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_mock_assert */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_util
|
|
|
|
|
+ *
|
|
|
|
|
+ * CMocka value data type.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Allows storing multiple types of values in CMocka functions without using
|
|
|
|
|
+ * undefined behavior.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef union {
|
|
|
|
|
+ /** Holds signed integral types */
|
|
|
|
|
+ intmax_t int_val;
|
|
|
|
|
+ /** Holds integral types */
|
|
|
|
|
+ uintmax_t uint_val;
|
|
|
|
|
+ /** Holds floating-point type */
|
|
|
|
|
+ float float_val;
|
|
|
|
|
+ /** Holds double/real floating-pointing types*/
|
|
|
|
|
+ double real_val; // TODO: Should we use `long double` instead
|
|
|
|
|
+ /** Holds pointer data */
|
|
|
|
|
+ void *ptr;
|
|
|
|
|
+ /** Holds pointer data (const) */
|
|
|
|
|
+ const void *const_ptr;
|
|
|
|
|
+ // The following aren't used by CMocka currently, but are added to avoid
|
|
|
|
|
+ // breaking ABI compatibility in the future
|
|
|
|
|
+ /** Holds function pointer data */
|
|
|
|
|
+ void *(*func)(void);
|
|
|
|
|
+} CMockaValueData;
|
|
|
|
|
+
|
|
|
|
|
+#ifndef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated This type was replaced by uintmax_t for better type clarity.
|
|
|
|
|
+ * Use uintmax_t directly instead.
|
|
|
|
|
+ */
|
|
|
|
|
+#define LargestIntegralType uintmax_t
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use cast_ptr_to_uintmax_type instead
|
|
|
|
|
+ */
|
|
|
|
|
+#if defined(__GNUC__)
|
|
|
|
|
+#define cast_ptr_to_largest_integral_type(value) \
|
|
|
|
|
+ __extension__({ \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "cast_ptr_to_largest_integral_type: " \
|
|
|
|
|
+ "use cast_ptr_to_uintmax_type instead"); \
|
|
|
|
|
+ cast_ptr_to_uintmax_type(value); \
|
|
|
|
|
+ })
|
|
|
|
|
+#else
|
|
|
|
|
+#define cast_ptr_to_largest_integral_type(value) \
|
|
|
|
|
+ cast_ptr_to_uintmax_type(value)
|
|
|
|
|
+#endif
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function prototype for setup, test and teardown functions.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef void (*UnitTestFunction)(void **state);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function that determines whether a function parameter value is correct (old API).
|
|
|
|
|
+ */
|
|
|
|
|
+typedef int (*CheckParameterValue)(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t check_value_data);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function that determines whether a function parameter value is correct (new API with CMockaValueData).
|
|
|
|
|
+ */
|
|
|
|
|
+typedef int (*CheckParameterValueData)(const CMockaValueData value,
|
|
|
|
|
+ const CMockaValueData check_value_data);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function that determines whether a function parameter value is correct.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef int (*CheckIntParameterValue)(const intmax_t value,
|
|
|
|
|
+ const intmax_t check_value_data);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function that determines whether a function parameter value is correct.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef int (*CheckUintParameterValue)(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t check_value_data);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ *
|
|
|
|
|
+ * 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;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ */
|
|
|
|
|
+typedef struct GroupTest {
|
|
|
|
|
+ UnitTestFunction setup;
|
|
|
|
|
+ UnitTestFunction teardown;
|
|
|
|
|
+ const UnitTest *tests;
|
|
|
|
|
+ const size_t number_of_tests;
|
|
|
|
|
+} GroupTest;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function prototype for test functions.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef void (*CMUnitTestFunction)(void **state);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ *
|
|
|
|
|
+ * Function prototype for setup and teardown functions.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef int (*CMFixtureFunction)(void **state);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_exec
|
|
|
|
|
+ */
|
|
|
|
|
+struct CMUnitTest {
|
|
|
|
|
+ const char *name;
|
|
|
|
|
+ CMUnitTestFunction test_func;
|
|
|
|
|
+ CMFixtureFunction setup_func;
|
|
|
|
|
+ CMFixtureFunction teardown_func;
|
|
|
|
|
+ void *initial_state;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Location within some source code.
|
|
|
|
|
+ */
|
|
|
|
|
+typedef struct SourceLocation {
|
|
|
|
|
+ const char* file;
|
|
|
|
|
+ int line;
|
|
|
|
|
+} SourceLocation;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Event that's called to check a parameter value (old API).
|
|
|
|
|
+ */
|
|
|
|
|
+typedef struct CheckParameterEvent {
|
|
|
|
|
+ SourceLocation location;
|
|
|
|
|
+ const char *parameter_name;
|
|
|
|
|
+ CheckParameterValue check_value;
|
|
|
|
|
+ uintmax_t check_value_data;
|
|
|
|
|
+} CheckParameterEvent;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ingroup cmocka_param
|
|
|
|
|
+ *
|
|
|
|
|
+ * Event that's called to check a parameter value (new API with CMockaValueData).
|
|
|
|
|
+ */
|
|
|
|
|
+typedef struct CheckParameterEventData {
|
|
|
|
|
+ SourceLocation location;
|
|
|
|
|
+ const char *parameter_name;
|
|
|
|
|
+ CheckParameterValueData check_value;
|
|
|
|
|
+ CMockaValueData check_value_data;
|
|
|
|
|
+} CheckParameterEventData;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @defgroup cmocka_config 🔧 Configuration and Output
|
|
|
|
|
+ * @ingroup cmocka
|
|
|
|
|
+ * @brief Control test output formats and execution behavior.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Configure test execution behavior and output formatting.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This module provides functions to customize CMocka's behavior, including
|
|
|
|
|
+ * setting custom output callbacks, controlling output format (STANDARD,
|
|
|
|
|
+ * SUBUNIT, TAP, XML), and filtering which tests to run or skip.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @{
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+/* 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);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Callbacks which can be set via cmocka_set_callbacks().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ * @sa cmocka_set_callbacks()
|
|
|
|
|
+ */
|
|
|
|
|
+struct CMCallbacks {
|
|
|
|
|
+ /** A callback for printing out standard messages.
|
|
|
|
|
+ * The supplied callback function will be invoked by the standard output
|
|
|
|
|
+ * print methods. If no callback has been supplied, the default action
|
|
|
|
|
+ * is to print to `stdout`.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The one exception at present is XML output, which is always written directly
|
|
|
|
|
+ * to a file handle, even if that is set to `stdout`. */
|
|
|
|
|
+ void (*vprint_message)(const char * const format, va_list args);
|
|
|
|
|
+
|
|
|
|
|
+ /** A callback for printing out error messages.
|
|
|
|
|
+ * The supplied callback function will be invoked by the standard output
|
|
|
|
|
+ * print methods. If no callback has been supplied, the default action
|
|
|
|
|
+ * is to print to `stdout`.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The one exception at present is XML output, which is always written directly
|
|
|
|
|
+ * to a file handle, even if that is set to `stdout`. */
|
|
|
|
|
+ void (*vprint_error)(const char * const format, va_list args);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Set callback functions for CMocka.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Input is a structure containing function pointers to one or more
|
|
|
|
|
+ * user-supplied callback functions. A NULL pointer for a particular
|
|
|
|
|
+ * callback will set that callback to the default implementation.
|
|
|
|
|
+ *
|
|
|
|
|
+ * See the CMCallbacks documentation for details of each callback.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] f_callbacks A structure containing the user callbacks to use.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ * @sa CMCallbacks
|
|
|
|
|
+ */
|
|
|
|
|
+void cmocka_set_callbacks(const struct CMCallbacks *f_callbacks);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Output format options for test results.
|
|
|
|
|
+ *
|
|
|
|
|
+ * These are bitfield flags that can be combined using bitwise OR to enable
|
|
|
|
|
+ * multiple output formats simultaneously.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ */
|
|
|
|
|
+enum cm_message_output {
|
|
|
|
|
+ /** Standard CMocka output format (bit 0) */
|
|
|
|
|
+ CM_OUTPUT_STANDARD = 0x00000001,
|
|
|
|
|
+ /** Alias for CM_OUTPUT_STANDARD (for API compatibility) */
|
|
|
|
|
+ CM_OUTPUT_STDOUT = 0x00000001,
|
|
|
|
|
+ /** Subunit output format for test result aggregation (bit 1) */
|
|
|
|
|
+ CM_OUTPUT_SUBUNIT = 0x00000002,
|
|
|
|
|
+ /** Test Anything Protocol (TAP) output format (bit 2) */
|
|
|
|
|
+ CM_OUTPUT_TAP = 0x00000004,
|
|
|
|
|
+ /** JUnit-compatible XML output format (bit 3) */
|
|
|
|
|
+ CM_OUTPUT_XML = 0x00000008,
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+#ifdef DOXYGEN
|
|
|
|
|
+/**
|
|
|
|
|
+ * @deprecated Use cmocka_print_error()
|
|
|
|
|
+ */
|
|
|
|
|
+void cm_print_error(const char* const format, ...);
|
|
|
|
|
+#else
|
|
|
|
|
+#define cm_print_error(format, ...) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ CMOCKA_DEPRECATION_WARNING( \
|
|
|
|
|
+ "cm_print_error: use cmocka_print_error instead") \
|
|
|
|
|
+ cmocka_print_error(format, ##__VA_ARGS__); \
|
|
|
|
|
+ } while (0)
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Print error message using the cmocka output format.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This prints an error message using the message output defined by the
|
|
|
|
|
+ * environment variable CMOCKA_MESSAGE_OUTPUT or
|
|
|
|
|
+ * cmocka_set_message_output().
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param format The format string fprintf(3) uses.
|
|
|
|
|
+ * @param ... The parameters used to fill format.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ */
|
|
|
|
|
+void cmocka_print_error(const char* const format, ...) CMOCKA_PRINTF_ATTRIBUTE(1, 2);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Function to set the output format for a test.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The output format(s) for the test can either be set globally using this
|
|
|
|
|
+ * function or overwritten with environment variable CMOCKA_MESSAGE_OUTPUT.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The environment variable can be set to STANDARD, SUBUNIT, TAP or XML.
|
|
|
|
|
+ * Multiple outputs separated with comma are permitted.
|
|
|
|
|
+ * (e.g. export CMOCKA_MESSAGE_OUTPUT=STANDARD,XML)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] output The output format from cm_message_output to use
|
|
|
|
|
+ * for the test. For multiple outputs OR options
|
|
|
|
|
+ * together.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ */
|
|
|
|
|
+void cmocka_set_message_output(uint32_t output);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Set a pattern to only run the test matching the pattern.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This allows to filter tests and only run the ones matching the pattern.
|
|
|
|
|
+ * The pattern can include two wildcards. The first is '*', a wildcard that
|
|
|
|
|
+ * matches zero or more characters, or '?', a wildcard that matches exactly
|
|
|
|
|
+ * one character.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The same can also be achieved by setting the environment variable
|
|
|
|
|
+ * CMOCKA_TEST_FILTER, without needing to recompile the application.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] pattern The pattern to match, e.g. "test_wurst*"
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ */
|
|
|
|
|
+void cmocka_set_test_filter(const char *pattern);
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief Set a pattern to skip tests matching the pattern.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This allows to filter tests and skip the ones matching the pattern. The
|
|
|
|
|
+ * pattern can include two wildcards. The first is '*', a wildcard that
|
|
|
|
|
+ * matches zero or more characters, or '?', a wildcard that matches exactly
|
|
|
|
|
+ * one character.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The same can also be achieved by setting the environment variable
|
|
|
|
|
+ * CMOCKA_SKIP_FILTER, without needing to recompile the application.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param[in] pattern The pattern to match, e.g. "test_wurst*"
|
|
|
|
|
+ *
|
|
|
|
|
+ * @ingroup cmocka_config
|
|
|
|
|
+ */
|
|
|
|
|
+void cmocka_set_skip_filter(const char *pattern);
|
|
|
|
|
+
|
|
|
|
|
+/** @} */ /* cmocka_config */
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @cond INTERNAL
|
|
|
|
|
+ *
|
|
|
|
|
+ * Internal functions used by CMocka macros.
|
|
|
|
|
+ *
|
|
|
|
|
+ * These functions are implementation details and should not be called directly.
|
|
|
|
|
+ * Users should only use the documented macros that wrap these functions.
|
|
|
|
|
+ * These are excluded from the documentation to avoid confusion.
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+/* Used by expect_assert_failure() and mock_assert(). */
|
|
|
|
|
+CMOCKA_DLLEXTERN extern int global_expecting_assert;
|
|
|
|
|
+CMOCKA_DLLEXTERN extern jmp_buf global_expect_assert_env;
|
|
|
|
|
+CMOCKA_DLLEXTERN extern const char * global_last_failed_assert;
|
|
|
|
|
+
|
|
|
|
|
+/* Retrieves a value for the given function, as set by "will_return". */
|
|
|
|
|
+CMockaValueData _mock(const char *const function,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *name);
|
|
|
|
|
+
|
|
|
|
|
+CMockaValueData _mock_parameter(const char *const function,
|
|
|
|
|
+ const char *name,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *type);
|
|
|
|
|
+
|
|
|
|
|
+bool _has_mock(const char *const function);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_function_call(
|
|
|
|
|
+ const char * const function_name,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+
|
|
|
|
|
+void _function_called(const char * const function, const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+
|
|
|
|
|
+/* Old API function using uintmax_t */
|
|
|
|
|
+void _expect_check(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line,
|
|
|
|
|
+ const CheckParameterValue check_function,
|
|
|
|
|
+ const uintmax_t check_data, CheckParameterEvent * const event,
|
|
|
|
|
+ const int count) CMOCKA_DEPRECATED;
|
|
|
|
|
+
|
|
|
|
|
+/* New API function using CMockaValueData */
|
|
|
|
|
+void _expect_check_data(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line,
|
|
|
|
|
+ const CheckParameterValueData check_function,
|
|
|
|
|
+ const CMockaValueData check_data, CheckParameterEventData * const event,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_int_in_set(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_in_set(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_float_in_set(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const double values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_not_in_set(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line, const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values, const int count);
|
|
|
|
|
+void _expect_int_not_in_set(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_not_in_set(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_float_not_in_set(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const size_t line, const double values[],
|
|
|
|
|
+ const size_t number_of_values, const double epsilon, const size_t count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_in_range(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum,
|
|
|
|
|
+ const int count) CMOCKA_DEPRECATED;
|
|
|
|
|
+void _expect_int_in_range(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t minimum,
|
|
|
|
|
+ const intmax_t maximum,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_in_range(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_not_in_range(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum, const int count);
|
|
|
|
|
+void _expect_int_not_in_range(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t minimum,
|
|
|
|
|
+ const intmax_t maximum,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_not_in_range(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_float_in_range(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line,
|
|
|
|
|
+ const double minimum, const double maximum, const double epsilon,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+void _expect_float_not_in_range(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line,
|
|
|
|
|
+ const double minimum, const double maximum, const double epsilon,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_value(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line, const uintmax_t value,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+void _expect_int_value(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t value,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_value(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t value,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_int_not_value(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const intmax_t value,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_uint_not_value(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const size_t line,
|
|
|
|
|
+ const uintmax_t value,
|
|
|
|
|
+ const size_t count);
|
|
|
|
|
+void _expect_not_value(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line, const uintmax_t value,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_float(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line, const double value,
|
|
|
|
|
+ const double epsilon, const int count);
|
|
|
|
|
+void _expect_not_float(
|
|
|
|
|
+ const char* const function, const char* const parameter,
|
|
|
|
|
+ const char* const file, const int line, const double value,
|
|
|
|
|
+ const double epsilon, const int count);
|
|
|
|
|
+
|
|
|
|
|
+void _expect_double(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const double value,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+void _expect_not_double(const char *const function,
|
|
|
|
|
+ const char *const parameter,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const double value,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ 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 CMockaValueData value);
|
|
|
|
|
+
|
|
|
|
|
+void _will_return(const char *const function_name,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *name,
|
|
|
|
|
+ const CMockaValueData value,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+void _will_set_parameter(const char *const function_name,
|
|
|
|
|
+ const char *name,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *type,
|
|
|
|
|
+ const CMockaValueData value,
|
|
|
|
|
+ const int count);
|
|
|
|
|
+void _assert_true(const uintmax_t result,
|
|
|
|
|
+ const char* const expression,
|
|
|
|
|
+ const char * const file, const int line);
|
|
|
|
|
+void _assert_false(const uintmax_t result,
|
|
|
|
|
+ const char * const expression,
|
|
|
|
|
+ const char * const file, const int line);
|
|
|
|
|
+void _assert_return_code(const intmax_t result,
|
|
|
|
|
+ const int32_t error,
|
|
|
|
|
+ const char * const expression,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_equal(const float a, const float n,
|
|
|
|
|
+ const float epsilon, const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_not_equal(const float a, const float n,
|
|
|
|
|
+ const float epsilon, const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_double_equal(const double a, const double n,
|
|
|
|
|
+ const double epsilon, const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_double_not_equal(const double a, const double n,
|
|
|
|
|
+ const double epsilon, const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_int_equal(const intmax_t a,
|
|
|
|
|
+ const intmax_t b,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_int_not_equal(const intmax_t a,
|
|
|
|
|
+ const intmax_t b,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_equal(const uintmax_t a,
|
|
|
|
|
+ const uintmax_t b,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_not_equal(const uintmax_t a,
|
|
|
|
|
+ const uintmax_t b,
|
|
|
|
|
+ const char * const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+CMOCKA_NO_ACCESS_ATTRIBUTE
|
|
|
|
|
+void _assert_ptr_equal_msg(const void *a,
|
|
|
|
|
+ const void *b,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *const msg);
|
|
|
|
|
+CMOCKA_NO_ACCESS_ATTRIBUTE
|
|
|
|
|
+void _assert_ptr_not_equal_msg(const void *a,
|
|
|
|
|
+ const void *b,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line,
|
|
|
|
|
+ const char *const msg);
|
|
|
|
|
+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_int_in_range(const intmax_t value,
|
|
|
|
|
+ const intmax_t minimum,
|
|
|
|
|
+ const intmax_t maximum,
|
|
|
|
|
+ const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_int_not_in_range(const intmax_t value,
|
|
|
|
|
+ const intmax_t minimum,
|
|
|
|
|
+ const intmax_t maximum,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_in_range(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum,
|
|
|
|
|
+ const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_not_in_range(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t minimum,
|
|
|
|
|
+ const uintmax_t maximum,
|
|
|
|
|
+ const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_in_range(const double value,
|
|
|
|
|
+ const double minimum,
|
|
|
|
|
+ const double maximum,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_not_in_range(const double value,
|
|
|
|
|
+ const double minimum,
|
|
|
|
|
+ const double maximum,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ const char* const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_not_in_set(
|
|
|
|
|
+ const uintmax_t value, const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values, const char* const file, const int line);
|
|
|
|
|
+void _assert_int_in_set(const intmax_t value,
|
|
|
|
|
+ const intmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_int_not_in_set(const intmax_t value,
|
|
|
|
|
+ const intmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_in_set(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_uint_not_in_set(const uintmax_t value,
|
|
|
|
|
+ const uintmax_t values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_in_set(const double value,
|
|
|
|
|
+ const double values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ const char *const file,
|
|
|
|
|
+ const int line);
|
|
|
|
|
+void _assert_float_not_in_set(const double value,
|
|
|
|
|
+ const double values[],
|
|
|
|
|
+ const size_t number_of_values,
|
|
|
|
|
+ const double epsilon,
|
|
|
|
|
+ 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);
|
|
|
|
|
+
|
|
|
|
|
+CMOCKA_NORETURN void _fail(const char * const file, const int line);
|
|
|
|
|
+
|
|
|
|
|
+CMOCKA_NORETURN void _skip(const char * const file, const int line);
|
|
|
|
|
+
|
|
|
|
|
+CMOCKA_NORETURN void _stop(void);
|
|
|
|
|
+
|
|
|
|
|
+/* 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);
|
|
|
|
|
+
|
|
|
|
|
+/** @endcond */
|
|
|
|
|
+
|
|
|
|
|
+#ifdef __cplusplus
|
|
|
|
|
+} /* extern "C" */
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#endif /* CMOCKA_H_ */
|