From 1d06689aa044dd91239279e0f8726f7d156a49b0 Mon Sep 17 00:00:00 2001 From: Snaipe Date: Fri, 11 Sep 2015 03:16:50 +0200 Subject: [PATCH] Enhanced redirect sample --- samples/redirect.c | 48 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/samples/redirect.c b/samples/redirect.c index f32c0c8..895eb56 100644 --- a/samples/redirect.c +++ b/samples/redirect.c @@ -2,14 +2,56 @@ #include #include +#include -Test(redirect, test_stdout) { +// Testing stdout/stderr + +void redirect_all_std(void) { cr_redirect_stdout(); + cr_redirect_stderr(); +} + +Test(redirect, test_outputs, .init = redirect_all_std) { + FILE* f_stdout = cr_get_redirected_stdout(); fprintf(stdout, "foo"); fflush(stdout); - FILE* stdout_in = cr_get_redirected_stdout(); + cr_assert_file_contents_match_str(f_stdout, "foo"); - cr_assert_file_contents_match_str(stdout_in, "foo"); + FILE* f_stderr = cr_get_redirected_stderr(); + + fprintf(stderr, "bar"); + fflush(stderr); + + cr_assert_file_contents_match_str(f_stderr, "bar"); +} + +// Testing general I/O with sample command-line rot13 + +char rot13_char(char c) { + return isalpha(c) ? (c - 'a' + 13) % 26 + 'a' : c; +} + +void rot13_io(void) { + char buf[512]; + + size_t read; + while ((read = fread(buf, 1, sizeof (buf), stdin)) > 0) { + for (size_t i = 0; i < read; ++i) + buf[i] = rot13_char(buf[i]); + fwrite(buf, 1, read, stdout); + } + fflush(stdout); +} + +Test(redirect, rot13, .init = cr_redirect_stdout) { + FILE* f_stdin = cr_get_redirected_stdin(); + fprintf(f_stdin, "the quick brown fox jumps over the lazy dog"); + fclose(f_stdin); + + rot13_io(); + + FILE* f_stdout = cr_get_redirected_stdout(); + cr_assert_file_contents_match_str(f_stdout, "gur dhvpx oebja sbk whzcf bire gur ynml qbt"); }