diff options
-rw-r--r-- | tests/test_error_handler_spm_perror.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/test_error_handler_spm_perror.c b/tests/test_error_handler_spm_perror.c new file mode 100644 index 0000000..a8b55db --- /dev/null +++ b/tests/test_error_handler_spm_perror.c @@ -0,0 +1,43 @@ +#include "spm.h" +#include "framework.h" + +const char *testFmt = "case %s: returned '%s', expected '%s'\n"; +struct TestCase testCase[] = { + {.caseValue.sptr = "oh no it broke", .truthValue.sptr = "oh no it broke: No such file or directory", .arg[0].signed_integer = ENOENT}, + {.caseValue.sptr = "kaboom", .truthValue.sptr = "kaboom: Failed to fetch package", .arg[0].signed_integer = SPM_ERR_PKG_FETCH}, +}; +size_t numCases = sizeof(testCase) / sizeof(struct TestCase); + +int main(int argc, char *argv[]) { + char *tty_path = NULL; + if ((tty_path = ttyname(STDERR_FILENO)) == NULL) { + perror("tty check"); + return 0; + } + + for (size_t i = 0; i < numCases; i++) { + char buf[BUFSIZ] = {0,}; + char *buffer = buf; + int stderr_save = 0; + + fflush(stderr); + + // Redirect stdout + stderr_save = dup(STDERR_FILENO); + freopen("/dev/null", "w", stderr); + setvbuf(stderr, buffer, _IOLBF, sizeof(buf)); + + // Do test + spmerrno = testCase[i].arg[0].signed_integer; + spm_perror(testCase[i].caseValue.sptr); + fflush(stderr); + + strip(buffer); + + // Restore stderr + dup2(stderr_save, STDERR_FILENO); + setvbuf(stderr, NULL, _IONBF, 0); + + myassert(strcmp(buffer, testCase[i].truthValue.sptr) == 0, testFmt, testCase[i].caseValue.sptr, buffer, testCase[i].truthValue.sptr); + } +} |