[U-Boot] [PATCH 01/16] efi_selftest: colored test output

Simon Glass sjg at chromium.org
Mon Jan 8 03:32:20 UTC 2018


Hi Heinrich,

On 17 December 2017 at 08:43, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> Add color coding to output:
> test section    blue
> success         green
> errors          red
> todo            yellow
> summary         white
> others          light gray
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
>  include/efi_selftest.h                  | 27 +++++++++++++++++----------
>  lib/efi_selftest/efi_selftest.c         | 25 ++++++++++++++-----------
>  lib/efi_selftest/efi_selftest_console.c | 13 +++++++++----
>  3 files changed, 40 insertions(+), 25 deletions(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

comments below

>
> diff --git a/include/efi_selftest.h b/include/efi_selftest.h
> index be5ba4bfa9..344f28ed36 100644
> --- a/include/efi_selftest.h
> +++ b/include/efi_selftest.h
> @@ -18,14 +18,20 @@
>  #define EFI_ST_SUCCESS 0
>  #define EFI_ST_FAILURE 1
>
> +/*
> + * Prints a message.
> + */
> +#define efi_st_printf(...) \
> +       (efi_st_printc(-1, __VA_ARGS__))
> +
>  /*
>   * Prints an error message.
>   *
>   * @...        format string followed by fields to print
>   */
>  #define efi_st_error(...) \
> -       (efi_st_printf("%s(%u):\nERROR: ", __FILE__, __LINE__), \
> -       efi_st_printf(__VA_ARGS__)) \
> +       (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \
> +       efi_st_printc(EFI_LIGHTRED, __VA_ARGS__))
>
>  /*
>   * Prints a TODO message.
> @@ -33,8 +39,8 @@
>   * @...        format string followed by fields to print
>   */
>  #define efi_st_todo(...) \
> -       (efi_st_printf("%s(%u):\nTODO: ", __FILE__, __LINE__), \
> -       efi_st_printf(__VA_ARGS__)) \
> +       (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \
> +       efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \
>
>  /*
>   * A test may be setup and executed at boottime,
> @@ -61,14 +67,15 @@ extern struct efi_simple_input_interface *con_in;
>  void efi_st_exit_boot_services(void);
>
>  /*
> - * Print a pointer to an u16 string
> + * Print a colored message
>   *
> - * @pointer: pointer
> - * @buf: pointer to buffer address
> - * on return position of terminating zero word
> + * @color      color

Can you please point to the enum to use? Also it seems like -1 means
no colour? That should bementioned also

> + * @fmt                printf format
> + * @...                arguments to be printed
> + *             on return position of terminating zero word
>   */
> -void efi_st_printf(const char *fmt, ...)
> -                __attribute__ ((format (__printf__, 1, 2)));
> +void efi_st_printc(int color, const char *fmt, ...)
> +                __attribute__ ((format (__printf__, 2, 3)));
>
>  /*
>   * Compare memory.
> diff --git a/lib/efi_selftest/efi_selftest.c b/lib/efi_selftest/efi_selftest.c
> index 4e5a12c47c..fc5ef254a1 100644
> --- a/lib/efi_selftest/efi_selftest.c
> +++ b/lib/efi_selftest/efi_selftest.c
> @@ -65,7 +65,7 @@ void efi_st_exit_boot_services(void)
>                 efi_st_error("ExitBootServices did not return EFI_SUCCESS\n");
>                 return;
>         }
> -       efi_st_printf("\nBoot services terminated\n");
> +       efi_st_printc(EFI_WHITE, "\nBoot services terminated\n");
>  }
>
>  /*
> @@ -81,13 +81,14 @@ static int setup(struct efi_unit_test *test, unsigned int *failures)
>
>         if (!test->setup)
>                 return EFI_ST_SUCCESS;
> -       efi_st_printf("\nSetting up '%s'\n", test->name);
> +       efi_st_printc(EFI_LIGHTBLUE, "\nSetting up '%s'\n", test->name);
>         ret = test->setup(handle, systable);
>         if (ret != EFI_ST_SUCCESS) {
>                 efi_st_error("Setting up '%s' failed\n", test->name);
>                 ++*failures;
>         } else {
> -               efi_st_printf("Setting up '%s' succeeded\n", test->name);
> +               efi_st_printc(EFI_LIGHTGREEN,
> +                             "Setting up '%s' succeeded\n", test->name);
>         }
>         return ret;
>  }
> @@ -105,13 +106,14 @@ static int execute(struct efi_unit_test *test, unsigned int *failures)
>
>         if (!test->execute)
>                 return EFI_ST_SUCCESS;
> -       efi_st_printf("\nExecuting '%s'\n", test->name);
> +       efi_st_printc(EFI_LIGHTBLUE, "\nExecuting '%s'\n", test->name);
>         ret = test->execute();
>         if (ret != EFI_ST_SUCCESS) {
>                 efi_st_error("Executing '%s' failed\n", test->name);
>                 ++*failures;
>         } else {
> -               efi_st_printf("Executing '%s' succeeded\n", test->name);
> +               efi_st_printc(EFI_LIGHTGREEN,
> +                             "Executing '%s' succeeded\n", test->name);
>         }
>         return ret;
>  }
> @@ -129,13 +131,14 @@ static int teardown(struct efi_unit_test *test, unsigned int *failures)
>
>         if (!test->teardown)
>                 return EFI_ST_SUCCESS;
> -       efi_st_printf("\nTearing down '%s'\n", test->name);
> +       efi_st_printc(EFI_LIGHTBLUE, "\nTearing down '%s'\n", test->name);
>         ret = test->teardown();
>         if (ret != EFI_ST_SUCCESS) {
>                 efi_st_error("Tearing down '%s' failed\n", test->name);
>                 ++*failures;
>         } else {
> -               efi_st_printf("Tearing down '%s' succeeded\n", test->name);
> +               efi_st_printc(EFI_LIGHTGREEN,
> +                             "Tearing down '%s' succeeded\n", test->name);
>         }
>         return ret;
>  }
> @@ -262,12 +265,12 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                 }
>         }
>
> -       efi_st_printf("\nTesting EFI API implementation\n");
> +       efi_st_printc(EFI_WHITE, "\nTesting EFI API implementation\n");
>
>         if (testname)
> -               efi_st_printf("\nSelected test: '%ps'\n", testname);
> +               efi_st_printc(EFI_WHITE, "\nSelected test: '%ps'\n", testname);
>         else
> -               efi_st_printf("\nNumber of tests to execute: %u\n",
> +               efi_st_printc(EFI_WHITE, "\nNumber of tests to execute: %u\n",
>                               ll_entry_count(struct efi_unit_test,
>                                              efi_unit_test));
>
> @@ -291,7 +294,7 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                         &failures);
>
>         /* Give feedback */
> -       efi_st_printf("\nSummary: %u failures\n\n", failures);
> +       efi_st_printc(EFI_WHITE, "\nSummary: %u failures\n\n", failures);
>
>         /* Reset system */
>         efi_st_printf("Preparing for reset. Press any key.\n");
> diff --git a/lib/efi_selftest/efi_selftest_console.c b/lib/efi_selftest/efi_selftest_console.c
> index 6a7fd20da5..7920c961ba 100644
> --- a/lib/efi_selftest/efi_selftest_console.c
> +++ b/lib/efi_selftest/efi_selftest_console.c
> @@ -130,12 +130,13 @@ static void int2dec(s32 value, u16 **buf)
>  }
>
>  /*
> - * Print a formatted string to the EFI console
> + * Print a colored formatted string to the EFI console
>   *
> - * @fmt: format string
> - * @...: optional arguments
> + * @color      color

same here

> + * @fmt                format string
> + * @...                optional arguments
>   */
> -void efi_st_printf(const char *fmt, ...)
> +void efi_st_printc(int color, const char *fmt, ...)
>  {
>         va_list args;
>         u16 buf[160];
> @@ -215,7 +216,11 @@ void efi_st_printf(const char *fmt, ...)
>         }
>         va_end(args);
>         *pos = 0;
> +       if (color >= 0)
> +               con_out->set_attribute(con_out, (unsigned long)color);
>         con_out->output_string(con_out, buf);
> +       if (color >= 0)
> +               con_out->set_attribute(con_out, EFI_LIGHTGRAY);
>  }
>
>  /*
> --
> 2.14.2
>

Regards,
Simon


More information about the U-Boot mailing list