/* * Copyright (c) 2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * * @brief Ztest mocking support */ #ifndef __ZTEST_MOCK_H__ #define __ZTEST_MOCK_H__ /** * @defgroup ztest_mock Ztest mocking support * @ingroup ztest * * This module provides simple mocking functions for unit testing. These * need CONFIG_ZTEST_MOCKING=y. * * @{ */ /** * @brief Tell function @a func to expect the value @a value for @a param * * When using ztest_check_expected_value(), tell that the value of @a param * should be @a value. The value will internally be stored as an `uintptr_t`. * * @param func Function in question * @param param Parameter for which the value should be set * @param value Value for @a param */ #define ztest_expect_value(func, param, value) \ z_ztest_expect_value(STRINGIFY(func), STRINGIFY(param), \ (uintptr_t)(value)) /** * @brief If @a param doesn't match the value set by ztest_expect_value(), * fail the test * * This will first check that does @a param have a value to be expected, and * then checks whether the value of the parameter is equal to the expected * value. If either of these checks fail, the current test will fail. This * must be called from the called function. * * @param param Parameter to check */ #define ztest_check_expected_value(param) \ z_ztest_check_expected_value(__func__, STRINGIFY(param), \ (uintptr_t)(param)) /** * @brief Tell function @a func to expect the data @a data for @a param * * When using ztest_check_expected_data(), tell that the data ponted by @a param * should be same as data at @a data. * Only data pointer is stored by this function so it must still be valid when * ztest_check_expected_data is called. * * @param func Function in question * @param param Parameter for which the data should be set * @param data pointer for the data for parameter @a param */ #define ztest_expect_data(func, param, data) \ z_ztest_expect_data(STRINGIFY(func), STRINGIFY(param), (data)) /** * @brief If data pointed by @a param don't match the data set by * ztest_expect_data(), fail the test * * This will first check that does @a param have a value to be expected, and * then checks whether the data pointed by parameter are equal to expected data. * If either of these checks fail, the current test will fail. This * must be called from the called function. * * @param param Parameter to check * @param length Length of the data to compare */ #define ztest_check_expected_data(param, length) \ z_ztest_check_expected_data(__func__, STRINGIFY(param), (param), \ (length)) /** * @brief Tell @a func that it should return @a value * * @param func Function that should return @a value * @param value Value to return from @a func */ #define ztest_returns_value(func, value) \ z_ztest_returns_value(STRINGIFY(func), (uintptr_t)(value)) /** * @brief Get the return value for current function * * The return value must have been set previously with ztest_returns_value(). * If no return value exists, the current test will fail. * * @returns The value the current function should return */ #define ztest_get_return_value() z_ztest_get_return_value(__func__) /** * @brief Get the return value as a pointer for current function * * The return value must have been set previously with ztest_returns_value(). * If no return value exists, the current test will fail. * * @returns The value the current function should return as a `void *` */ #define ztest_get_return_value_ptr() \ ((void *)z_ztest_get_return_value(__func__)) /** * @} */ #ifdef CONFIG_ZTEST_MOCKING #include #ifdef __cplusplus extern "C" { #endif void z_init_mock(void); int z_cleanup_mock(void); void z_ztest_expect_value(const char *fn, const char *name, uintptr_t value); void z_ztest_check_expected_value(const char *fn, const char *param, uintptr_t value); void z_ztest_expect_data(const char *fn, const char *name, void *val); void z_ztest_check_expected_data(const char *fn, const char *name, void *data, u32_t length); void z_ztest_returns_value(const char *fn, uintptr_t value); uintptr_t z_ztest_get_return_value(const char *fn); #ifdef __cplusplus } #endif #else /* !CONFIG_ZTEST_MOCKING */ #define z_init_mock() #define z_cleanup_mock() 0 #endif /* CONFIG_ZTEST_MOCKING */ #endif /* __ZTEST_H__ */