aboutsummaryrefslogtreecommitdiff
path: root/tests/test_str_print_banner.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_str_print_banner.c')
-rw-r--r--tests/test_str_print_banner.c43
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