diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-24 12:27:33 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-24 12:27:33 -0400 |
commit | ad07c35f12ca10bd3dfea50aaf8a9db8dcc9f630 (patch) | |
tree | 4b31aa43dcb942611fef8699bc96d166cf63b68e /tests/test_str_print_banner.c | |
parent | ccaeb7092b5ad40b1b3833c987ba3ec4d47f0bb8 (diff) | |
download | spmc-ad07c35f12ca10bd3dfea50aaf8a9db8dcc9f630.tar.gz |
Initial commit of tests
Diffstat (limited to 'tests/test_str_print_banner.c')
-rw-r--r-- | tests/test_str_print_banner.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/test_str_print_banner.c b/tests/test_str_print_banner.c new file mode 100644 index 0000000..0ca09fd --- /dev/null +++ b/tests/test_str_print_banner.c @@ -0,0 +1,43 @@ +#include "spm.h" +#include "framework.h" + +const char *testFmt = "case %zu: '%s' is length %zu, expected %zu\n"; +const char *testFmtChars = "case %zu: '%s' got '%c' (pos: %zu), expected '%c'\n"; + +int main(int argc, char *argv[]) { + const int max_banner = 'z'; + const int max_banner_len = 80; + char buf[BUFSIZ] = {0,}; + char *buffer = buf; + int stdout_save = 0; + + fflush(stdout); + for (size_t i = 'A', letters = 'A'; i <= max_banner; i++, letters++) { + char letter[1]; + size_t buffer_len = 0; + + // Assign letter character + sprintf(letter, "%c", (int)letters); + + // Redirect stdout + stdout_save = dup(STDOUT_FILENO); + freopen("/dev/null", "w", stdout); + setvbuf(stdout, buffer, _IOLBF, sizeof(buf)); + + // Do test + print_banner(letter, i); + fflush(stdout); + + strip(buffer); + buffer_len = strlen(buffer); + + myassert(buffer_len == i, testFmt, i, buffer, buffer_len, i); + for (size_t j = 0; j < buffer_len; j++) { + myassert(buffer[j] == (int)letters, testFmtChars, i, buffer, j, buffer[j], (int)letters, buffer[j]); + } + + // Restore stdout + dup2(stdout_save, STDOUT_FILENO); + setvbuf(stdout, NULL, _IONBF, 0); + } +}
\ No newline at end of file |