/*
 * Copyright (c) 2020 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_ZTEST_FATAL_HOOK_H_
#define ZEPHYR_INCLUDE_ZTEST_FATAL_HOOK_H_

#include <zephyr.h>


#if defined(CONFIG_ZTEST_FATAL_HOOK)
/**
 * @brief Set the flag that treat fatal error happened as expected
 *
 * @details This is used for negative test cases which triggers a fatal
 * error. Set the param true will still pass the test case when expected
 * fatal error happened. For normal test case, set it false makes it back
 * to normal behavior.
 *
 * @param valid flag indicate fault is expected
 */
__syscall void ztest_set_fault_valid(bool valid);

/* @brief A hook after fatal error handler
 *
 * @details This is a test case hook that can run code from test case, in
 * order to deal with some special case when catching the expected fatal
 * error.
 *
 * Usage: Define your own hook function in your test case code, and do what
 * you want to do after fatal error handler.
 *
 * By default, it will do nothing before leaving error handler.
 */
void ztest_post_fatal_error_hook(unsigned int reason,
		const z_arch_esf_t *pEsf);

#endif


#if defined(CONFIG_ZTEST_ASSERT_HOOK)
/**
 * @brief Set the flag that treat assert fail happened as expected
 *
 * @details This is used for negative test cases which triggers a assert
 * fail. Set the param true will still pass the test case when expected
 * assert fail happened. For normal test case, set it false make it back
 * to normal behavior.
 *
 * @param valid flag indicate assert is expected
 */
__syscall void ztest_set_assert_valid(bool valid);

/* @brief A hook after assert fault handler
 *
 * @details This is a test case hook that can run code from test case, in
 * order to deal with some special case when catching the expected assert
 * failed.
 *
 * Usage: Define your own hook function in your test case code, and do what
 * you want to do after assert handler.
 *
 * By default, it will abort the thread which assert failed.
 */
void ztest_post_assert_fail_hook(void);

#endif

#if defined(CONFIG_ZTEST_FATAL_HOOK) || defined(CONFIG_ZTEST_ASSERT_HOOK)
#include <syscalls/ztest_error_hook.h>
#endif

#endif /* ZEPHYR_INCLUDE_ZTEST_FATAL_HOOK_H_ */
