From 6759a2f7542e196f562f9685c29ef825cfe159f6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 7 Jan 2025 13:52:46 +1000 Subject: [PATCH] test: honor NO_COLOR and FORCE_COLOR for output colorization Part-of: --- test/litest-runner.c | 13 ++++++++++--- test/litest-runner.h | 1 + test/litest.c | 22 +++++++++++++++------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/test/litest-runner.c b/test/litest-runner.c index c3ea3e06..fd14eabc 100644 --- a/test/litest-runner.c +++ b/test/litest-runner.c @@ -87,6 +87,7 @@ struct litest_runner { size_t max_forks; unsigned int timeout; bool verbose; + bool use_colors; bool exit_on_fail; FILE *fp; @@ -743,11 +744,10 @@ litest_runner_log_test_result(struct litest_runner *runner, struct litest_runner (ms2s(t->times.end_millis - runner->times.start_millis)) % 60); status = litest_runner_result_as_str(t->result); - bool is_tty = isatty(fileno(runner->fp)); fprintf(runner->fp, " status: %s%s%s\n", - is_tty ? color : "", + runner->use_colors ? color : "", &status[7], /* skip LITEST_ prefix */ - is_tty ? ANSI_NORMAL : ""); + runner->use_colors ? ANSI_NORMAL : ""); switch (t->result) { case LITEST_PASS: @@ -830,6 +830,13 @@ litest_runner_set_verbose(struct litest_runner *runner, runner->verbose = verbose; } +void +litest_runner_set_use_colors(struct litest_runner *runner, + bool use_colors) +{ + runner->use_colors = use_colors; +} + void litest_runner_set_exit_on_fail(struct litest_runner *runner, bool do_exit) { diff --git a/test/litest-runner.h b/test/litest-runner.h index a35695d6..dbd630ab 100644 --- a/test/litest-runner.h +++ b/test/litest-runner.h @@ -107,6 +107,7 @@ struct litest_runner *litest_runner_new(void); void litest_runner_set_num_parallel(struct litest_runner *runner, size_t num_jobs); void litest_runner_set_timeout(struct litest_runner *runner, unsigned int timeout); void litest_runner_set_verbose(struct litest_runner *runner, bool verbose); +void litest_runner_set_use_colors(struct litest_runner *runner, bool use_colors); void litest_runner_set_exit_on_fail(struct litest_runner *runner, bool do_exit); void litest_runner_set_output_file(struct litest_runner *runner, FILE *fp); void litest_runner_add_test(struct litest_runner *runner, diff --git a/test/litest.c b/test/litest.c index 41591d01..30b2e216 100644 --- a/test/litest.c +++ b/test/litest.c @@ -88,6 +88,7 @@ static const char *filter_test = NULL; static const char *filter_device = NULL; static const char *filter_group = NULL; static int filter_rangeval = INT_MIN; +static bool use_colors = false; struct param_filter { char name[64]; @@ -153,7 +154,13 @@ _litest_checkpoint(const char *func, va_start(args, format); if (verbose) { vsnprintf(buf, sizeof(buf), format, args); - fprintf(stderr, ANSI_BRIGHT_BLUE "%s():%d - " ANSI_BRIGHT_RED "%s" ANSI_NORMAL "\n", func, line, buf); \ + fprintf(stderr, + "%s%s():%d - %s%s%s\n", + use_colors ? ANSI_BRIGHT_BLUE : "", + func, line, + use_colors ? ANSI_BRIGHT_RED : "", + buf, + use_colors ? ANSI_NORMAL : ""); } va_end(args); } @@ -1267,13 +1274,9 @@ litest_log_handler(struct libinput *libinput, const char *format, va_list args) { - static int is_tty = -1; const char *priority = NULL; const char *color; - if (is_tty == -1) - is_tty = isatty(STDERR_FILENO); - switch(pri) { case LIBINPUT_LOG_PRIORITY_INFO: priority = "info "; @@ -1291,7 +1294,7 @@ litest_log_handler(struct libinput *libinput, abort(); } - if (!is_tty) + if (!use_colors) color = ""; else if (strstr(format, "tap:")) color = ANSI_BLUE; @@ -1312,7 +1315,7 @@ litest_log_handler(struct libinput *libinput, fprintf(stderr, "%slitest %s ", color, priority); vfprintf(stderr, format, args); - if (is_tty) + if (use_colors) fprintf(stderr, ANSI_NORMAL); if (strstr(format, "client bug: ") || @@ -1508,6 +1511,7 @@ litest_run_suite(struct list *suites, int njobs) if (outfile) litest_runner_set_output_file(runner, outfile); litest_runner_set_verbose(runner, verbose); + litest_runner_set_use_colors(runner, use_colors); litest_runner_set_timeout(runner, 30); litest_runner_set_exit_on_fail(runner, exit_first); litest_runner_set_setup_funcs(runner, init_quirks, teardown_quirks, NULL); @@ -5406,6 +5410,10 @@ main(int argc, char **argv) int rc; const char *meson_testthreads; + use_colors = getenv("FORCE_COLOR") || isatty(STDERR_FILENO); + if (getenv("NO_COLOR")) + use_colors = false; + in_debugger = is_debugger_attached(); if (in_debugger) { jobs = 0;