[v2] tests: use color when printing on terminal

Submitted by Marek Chalupa on Nov. 28, 2014, 12:18 p.m.

Details

Message ID 1417177100-4892-1-git-send-email-mchqwerty@gmail.com
State Accepted
Commit 0e1cc7aba7b28ff40d91c3d0c0dba834f72d2486
Headers show

Not browsing as part of any series.

Commit Message

Marek Chalupa Nov. 28, 2014, 12:18 p.m.
Colorize output of the tests when prinitng on terminal.

Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
---
 tests/test-runner.c | 52 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 45 insertions(+), 7 deletions(-)

Patch hide | download patch | download mbox

diff --git a/tests/test-runner.c b/tests/test-runner.c
index b6ea098..431511a 100644
--- a/tests/test-runner.c
+++ b/tests/test-runner.c
@@ -52,6 +52,9 @@  int leak_check_enabled;
  * WAYLAND_TEST_NO_TIMEOUTS evnironment var */
 static int timeouts_enabled = 1;
 
+/* set to one if the output goes to the terminal */
+static int is_atty = 0;
+
 extern const struct test __start_test_section, __stop_test_section;
 
 __attribute__ ((visibility("default"))) void *
@@ -224,6 +227,25 @@  rmdir_xdg_runtime_dir(void)
 		perror("Cleaning XDG_RUNTIME_DIR");
 }
 
+#define RED	"\033[31m"
+#define GREEN	"\033[32m"
+
+static void
+stderr_set_color(const char *color)
+{
+	/* use colors only when the output is connected to
+	 * the terminal */
+	if (is_atty)
+		fprintf(stderr, "%s", color);
+}
+
+static void
+stderr_reset_color(void)
+{
+	if (is_atty)
+		fprintf(stderr, "\033[0m");
+}
+
 int main(int argc, char *argv[])
 {
 	const struct test *t;
@@ -240,6 +262,9 @@  int main(int argc, char *argv[])
 	leak_check_enabled = !getenv("WAYLAND_TEST_NO_LEAK_CHECK");
 	timeouts_enabled = !getenv("WAYLAND_TEST_NO_TIMEOUTS");
 
+	if (isatty(fileno(stderr)))
+		is_atty = 1;
+
 	if (argc == 2 && strcmp(argv[1], "--help") == 0)
 		usage(argv[0], EXIT_SUCCESS);
 
@@ -271,32 +296,45 @@  int main(int argc, char *argv[])
 			run_test(t); /* never returns */
 
 		if (waitid(P_ALL, 0, &info, WEXITED)) {
+			stderr_set_color(RED);
 			fprintf(stderr, "waitid failed: %m\n");
+			stderr_reset_color();
+
 			abort();
 		}
 
-		fprintf(stderr, "test \"%s\":\t", t->name);
 		switch (info.si_code) {
 		case CLD_EXITED:
-			fprintf(stderr, "exit status %d", info.si_status);
 			if (info.si_status == EXIT_SUCCESS)
-				success = 1;
+				success = !t->must_fail;
+			else
+				success = t->must_fail;
+
+			stderr_set_color(success ? GREEN : RED);
+			fprintf(stderr, "test \"%s\":\texit status %d",
+				t->name, info.si_status);
+
 			break;
 		case CLD_KILLED:
 		case CLD_DUMPED:
-			fprintf(stderr, "signal %d", info.si_status);
+			if (t->must_fail)
+				success = 1;
+
+			stderr_set_color(success ? GREEN : RED);
+			fprintf(stderr, "test \"%s\":\tsignal %d",
+				t->name, info.si_status);
+
 			break;
 		}
 
-		if (t->must_fail)
-			success = !success;
-
 		if (success) {
 			pass++;
 			fprintf(stderr, ", pass.\n");
 		} else
 			fprintf(stderr, ", fail.\n");
 
+		stderr_reset_color();
+
 		/* print separator line */
 		fprintf(stderr, "----------------------------------------\n");
 	}

Comments

On Fri, 28 Nov 2014 13:18:20 +0100
Marek Chalupa <mchqwerty@gmail.com> wrote:

> Colorize output of the tests when prinitng on terminal.
> 
> Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
> ---
>  tests/test-runner.c | 52 +++++++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 45 insertions(+), 7 deletions(-)

Pushed.

Thanks,
pq