2025-05-15 07:55:33 -07:00
/*
* Copyright ( c ) 2025 , ayeteadoe < ayeteadoe @ gmail . com >
*
* SPDX - License - Identifier : BSD - 2 - Clause
*/
# include <LibTest/Macros.h>
namespace Test {
2026-01-10 16:21:01 +01:00
static libtest_jmp_buf g_assert_jmp_buf = { } ;
2025-05-15 07:55:33 -07:00
static bool g_assert_jmp_buf_valid = false ;
2026-01-10 16:21:01 +01:00
libtest_jmp_buf & assertion_jump_buffer ( ) { return g_assert_jmp_buf ; }
2025-05-15 07:55:33 -07:00
void set_assertion_jump_validity ( bool validity )
{
g_assert_jmp_buf_valid = validity ;
}
static bool is_assertion_jump_valid ( )
{
return g_assert_jmp_buf_valid ;
}
static void assertion_handler_impl ( char const * )
{
if ( is_assertion_jump_valid ( ) ) {
set_assertion_jump_validity ( false ) ;
LIBTEST_LONGJMP ( assertion_jump_buffer ( ) , 1 ) ; /* NOLINT(cert-err52-cpp, bugprone-setjmp-longjmp) Isolated to test infrastructure and allows us to not depend on spawning child processes for death tests */
}
// Fall through to default assertion handler
}
}
# if defined(AK_OS_WINDOWS)
# define EXPORT __declspec(dllexport)
# else
2026-03-16 21:01:40 +01:00
# define EXPORT __attribute__((visibility("default"), retain, used))
2025-05-15 07:55:33 -07:00
# endif
extern " C " EXPORT void ak_assertion_handler ( char const * message ) ;
void ak_assertion_handler ( char const * message )
{
: : Test : : assertion_handler_impl ( message ) ;
}