diff options
Diffstat (limited to 'src/testing.c')
-rw-r--r-- | src/testing.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/testing.c b/src/testing.c new file mode 100644 index 0000000..028e48f --- /dev/null +++ b/src/testing.c @@ -0,0 +1,114 @@ +#include "config.h" + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> + +#include "testing.h" + + +#define COLOUR_RESET "\033[0m" +#define COLOUR_GREEN "\033[0;32m" +#define COLOUR_YELLOW "\033[0;33m" + +static const char *const +ENVVAR_NAME = "NO_COLOR"; + + +static bool +show_colour(void) { + const char *const no_colour = getenv(ENVVAR_NAME); + return !no_colour || no_colour[0] == '\0'; +} + + +/** + * @tags infallible + */ +void +test_start(const char *const name) { + (void)fprintf(stderr, "%s:\n", name); + + return; +} + + +/** + * @tags infallible + */ +void +testing(const char *const message) { + if (show_colour()) { + (void)fprintf( + stderr, + COLOUR_YELLOW "testing" COLOUR_RESET ": %s...", + message + ); + } else { + (void)fprintf( + stderr, + "testing: %s...", + message + ); + } + + return; +} + + +/** + * @tags infallible + */ +void +test_ok(void) { + if (show_colour()) { + (void)fprintf(stderr, " " COLOUR_GREEN "OK" COLOUR_RESET ".\n"); + } else { + (void)fprintf(stderr, " OK.\n"); + } + + return; +} + +#ifdef TEST +int +main(void) { + int rc = 0; + + test_start("testing.c"); + const int should_overwrite = 1; + + if (unsetenv(ENVVAR_NAME)) { + perror("unsetenv(\"NO_COLOR\")"); + rc = -1; + goto out; + } + { + testing("unset NO_COLOR"); + test_ok(); + } + + if (setenv(ENVVAR_NAME, "", should_overwrite)) { + perror("setenv(\"NO_COLOR\", \"\", 1)"); + rc = -1; + goto out; + } + { + testing("empty NO_COLOR"); + test_ok(); + } + + if (setenv(ENVVAR_NAME, "something", should_overwrite)) { + perror("setenv(\"NO_COLOR\", \"something\", 1)"); + rc = -1; + goto out; + } + { + testing("defined NO_COLOR"); + test_ok(); + } + +out: + return !!rc; +} +#endif |