Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix test_runner.c modern warning #3451

Merged
merged 3 commits into from
Oct 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,11 @@ ELF = $(ROM:.gba=.elf)
MAP = $(ROM:.gba=.map)
SYM = $(ROM:.gba=.sym)

ifeq ($(MODERN),0)
TEST_OBJ_DIR_NAME := build/test
else
TEST_OBJ_DIR_NAME := build/modern-test
endif
TESTELF = $(ROM:.gba=-test.elf)
HEADLESSELF = $(ROM:.gba=-test-headless.elf)

Expand Down
1 change: 1 addition & 0 deletions include/test/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ struct TestRunnerState
u8 expectedResult;
bool8 expectLeaks:1;
bool8 inBenchmark:1;
bool8 tearDown:1;
u32 timeoutSeconds;
};

Expand Down
28 changes: 21 additions & 7 deletions test/test_runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,10 @@ static bool32 PrefixMatch(const char *pattern, const char *string)
enum
{
STATE_INIT,
STATE_NEXT_TEST,
STATE_ASSIGN_TEST,
STATE_RUN_TEST,
STATE_REPORT_RESULT,
STATE_NEXT_TEST,
STATE_EXIT,
};

Expand Down Expand Up @@ -152,17 +153,15 @@ void CB2_TestRunner(void)
}
else
{
gTestRunnerState.state = STATE_NEXT_TEST;
gTestRunnerState.test = __start_tests - 1;
gTestRunnerState.state = STATE_ASSIGN_TEST;
gTestRunnerState.test = __start_tests;
}
gTestRunnerState.exitCode = 0;
gTestRunnerState.skipFilename = NULL;

break;

case STATE_NEXT_TEST:
gTestRunnerState.test++;

case STATE_ASSIGN_TEST:
if (gTestRunnerState.test == __stop_tests)
{
gTestRunnerState.state = STATE_EXIT;
Expand All @@ -172,6 +171,7 @@ void CB2_TestRunner(void)
if (gTestRunnerState.test->runner != &gAssumptionsRunner
&& !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name))
{
gTestRunnerState.state = STATE_NEXT_TEST;
return;
}

Expand All @@ -191,6 +191,8 @@ void CB2_TestRunner(void)
sCurrentTest.address = (uintptr_t)gTestRunnerState.test;
sCurrentTest.state = CURRENT_TEST_STATE_ESTIMATE;

// If AssignCostToRunner fails, we want to report the failure.
gTestRunnerState.state = STATE_REPORT_RESULT;
if (AssignCostToRunner() == gTestRunnerI)
gTestRunnerState.state = STATE_RUN_TEST;
else
Expand All @@ -204,7 +206,10 @@ void CB2_TestRunner(void)
SeedRng(0);
SeedRng2(0);
if (gTestRunnerState.test->runner->setUp)
{
gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data);
gTestRunnerState.tearDown = TRUE;
}
// NOTE: Assumes that the compiler interns __FILE__.
if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) // Assumption fails for tests in this file.
{
Expand All @@ -216,13 +221,17 @@ void CB2_TestRunner(void)
gTestRunnerState.test->runner->run(gTestRunnerState.test->data);
}
break;

case STATE_REPORT_RESULT:
REG_TM2CNT_H = 0;

gTestRunnerState.state = STATE_NEXT_TEST;

if (gTestRunnerState.test->runner->tearDown)
if (gTestRunnerState.tearDown && gTestRunnerState.test->runner->tearDown)
{
gTestRunnerState.test->runner->tearDown(gTestRunnerState.test->data);
gTestRunnerState.tearDown = FALSE;
}

if (gTestRunnerState.result == TEST_RESULT_PASS
&& !gTestRunnerState.expectLeaks)
Expand Down Expand Up @@ -342,6 +351,11 @@ void CB2_TestRunner(void)

break;

case STATE_NEXT_TEST:
gTestRunnerState.state = STATE_ASSIGN_TEST;
gTestRunnerState.test++;
break;

case STATE_EXIT:
MgbaExit_(gTestRunnerState.exitCode);
break;
Expand Down
19 changes: 13 additions & 6 deletions tools/mgba-rom-test-hydra/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
* parses the output to display human-readable progress.
*
* Output lines starting with "GBA Debug: :" are parsed as commands to
* Hydra, other output lines starting with "GBA Debug: " are parsed as
* output from the current test, and any other lines are parsed as
* output from the mgba-rom-test process itself.
* Hydra, other output lines starting with "GBA Debug: " or with "GBA: "
* are parsed as output from the current test, and any other lines are
* parsed as output from the mgba-rom-test process itself.
*
* COMMANDS
* N: Sets the test name to the remainder of the line.
Expand Down Expand Up @@ -75,10 +75,17 @@ static void handle_read(int i, struct Runner *runner)
{
eol++;
size_t n = eol - sol;
if (runner->input_buffer_size >= strlen("GBA Debug: ")
&& !strncmp(sol, "GBA Debug: ", strlen("GBA Debug: ")))
char *soc;
if (runner->input_buffer_size >= strlen("GBA: ")
&& !strncmp(sol, "GBA: ", strlen("GBA: ")))
{
char *soc = sol + strlen("GBA Debug: ");
soc = sol + strlen("GBA: ");
goto buffer_output;
}
else if (runner->input_buffer_size >= strlen("GBA Debug: ")
&& !strncmp(sol, "GBA Debug: ", strlen("GBA Debug: ")))
{
soc = sol + strlen("GBA Debug: ");
if (soc[0] == ':')
{
switch (soc[1])
Expand Down
Loading