#include <SDL3/SDL_test.h>
#include "SDL_test_internal.h"
static int SDLTest_AssertsFailed = 0;
static int SDLTest_AssertsPassed = 0;
static void SDLTest_LogAssertMessage(bool success, const char *assertion)
{
SDL_LogPriority priority;
const char *color;
const char *message;
if (success) {
priority = SDL_LOG_PRIORITY_INFO;
color = COLOR_GREEN;
message = "Passed";
} else {
priority = SDL_LOG_PRIORITY_ERROR;
color = COLOR_RED;
message = "Failed";
}
SDLTest_LogMessage(priority, "Assert '%s': %s%s%s", assertion, color, message, COLOR_END);
}
void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...)
{
va_list list;
char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH];
SDL_memset(logMessage, 0, SDLTEST_MAX_LOGMESSAGE_LENGTH);
va_start(list, assertDescription);
(void)SDL_vsnprintf(logMessage, SDLTEST_MAX_LOGMESSAGE_LENGTH - 1, assertDescription, list);
va_end(list);
SDL_assert((SDLTest_AssertCheck(assertCondition, "%s", logMessage)));
}
int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...)
{
va_list list;
char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH];
SDL_memset(logMessage, 0, SDLTEST_MAX_LOGMESSAGE_LENGTH);
va_start(list, assertDescription);
(void)SDL_vsnprintf(logMessage, SDLTEST_MAX_LOGMESSAGE_LENGTH - 1, assertDescription, list);
va_end(list);
if (assertCondition == ASSERT_FAIL) {
SDLTest_AssertsFailed++;
SDLTest_LogAssertMessage(false, logMessage);
} else {
SDLTest_AssertsPassed++;
SDLTest_LogAssertMessage(true, logMessage);
}
return assertCondition;
}
void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...)
{
va_list list;
char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH];
SDL_memset(logMessage, 0, SDLTEST_MAX_LOGMESSAGE_LENGTH);
va_start(list, assertDescription);
(void)SDL_vsnprintf(logMessage, SDLTEST_MAX_LOGMESSAGE_LENGTH - 1, assertDescription, list);
va_end(list);
SDLTest_AssertsPassed++;
SDLTest_LogAssertMessage(true, logMessage);
}
void SDLTest_ResetAssertSummary(void)
{
SDLTest_AssertsPassed = 0;
SDLTest_AssertsFailed = 0;
}
void SDLTest_LogAssertSummary(void)
{
int totalAsserts = SDLTest_AssertsPassed + SDLTest_AssertsFailed;
bool success = SDLTest_AssertsFailed == 0;
SDLTest_LogMessage(success ? SDL_LOG_PRIORITY_INFO : SDL_LOG_PRIORITY_ERROR,
"Assert Summary: Total=%d " "%s" "Passed=%d" "%s" " " "%s" "Failed=%d" "%s",
totalAsserts, COLOR_GREEN, SDLTest_AssertsPassed, COLOR_END,
success ? COLOR_GREEN : COLOR_RED, SDLTest_AssertsFailed, COLOR_END);
}
int SDLTest_AssertSummaryToTestResult(void)
{
if (SDLTest_AssertsFailed > 0) {
return TEST_RESULT_FAILED;
} else {
if (SDLTest_AssertsPassed > 0) {
return TEST_RESULT_PASSED;
} else {
return TEST_RESULT_NO_ASSERT;
}
}
}