diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 4c38fab443f68ab04492d67d9e5a34ed570fb337..0dda4fc84ea1a322dcca9e286c8e54125db214be 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -257,6 +257,14 @@ static int sandbox_cmdline_cb_terminal(struct sandbox_state *state, SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1, "Set terminal to raw/cooked mode"); +static int sandbox_cmdline_cb_verbose(struct sandbox_state *state, + const char *arg) +{ + state->show_test_output = true; + return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(verbose, 'v', 0, "Show test output"); + int main(int argc, char *argv[]) { struct sandbox_state *state; diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h index e876ba29784171fa177dee815bf9328cdf7bc410..11856c2fede654e6a26ce3d64e563702aeaaa9b0 100644 --- a/arch/sandbox/include/asm/state.h +++ b/arch/sandbox/include/asm/state.h @@ -64,6 +64,7 @@ struct sandbox_state { bool reset_allowed[RESET_COUNT]; /* Allowed reset types */ enum state_terminal_raw term_raw; /* Terminal raw/cooked */ bool skip_delays; /* Ignore any time delays (for test) */ + bool show_test_output; /* Don't suppress stdout in tests */ /* Pointer to information for each SPI bus/cs */ struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS] diff --git a/test/dm/test-main.c b/test/dm/test-main.c index 867b5177e0cf6565d234960dcbc2b60d421e6da2..91bdda83ab36a2ee6600cf2132379d27f9f06c12 100644 --- a/test/dm/test-main.c +++ b/test/dm/test-main.c @@ -76,6 +76,7 @@ static int dm_test_main(const char *test_name) struct unit_test *tests = ll_entry_start(struct unit_test, dm_test); const int n_ents = ll_entry_count(struct unit_test, dm_test); struct unit_test_state *uts = &global_dm_test_state; + struct sandbox_state *state = state_get_current(); uts->priv = &_global_priv_dm_test_state; struct unit_test *test; int run_count; @@ -114,7 +115,15 @@ static int dm_test_main(const char *test_name) if (test->flags & DM_TESTF_SCAN_FDT) ut_assertok(dm_scan_fdt(gd->fdt_blob, false)); + /* + * Silence the console and rely on console reocrding to get + * our output. + */ + console_record_reset(); + if (!state->show_test_output) + gd->flags |= GD_FLG_SILENT; test->func(uts); + gd->flags &= ~GD_FLG_SILENT; state_set_skip_delays(false); ut_assertok(dm_test_destroy(uts)); diff --git a/test/ut.c b/test/ut.c index 0282de595bbb74ffa3286a58dbdf54061ba90b38..fa0f02d6d94ee179e3f07dae60fabb5babc6c1cb 100644 --- a/test/ut.c +++ b/test/ut.c @@ -10,9 +10,12 @@ #include #include +DECLARE_GLOBAL_DATA_PTR; + void ut_fail(struct unit_test_state *uts, const char *fname, int line, const char *func, const char *cond) { + gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD); printf("%s:%d, %s(): %s\n", fname, line, func, cond); uts->fail_count++; } @@ -22,6 +25,7 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, { va_list args; + gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD); printf("%s:%d, %s(): %s: ", fname, line, func, cond); va_start(args, fmt); vprintf(fmt, args);