From 2be4bfd24151794223efa631211bc9ba9122870a Mon Sep 17 00:00:00 2001 From: Snaipe Date: Sat, 12 Sep 2015 10:24:00 -0700 Subject: [PATCH] Added C++ redirect sample --- samples/CMakeLists.txt | 1 + samples/redirect.cc | 56 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 samples/redirect.cc diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index f792c1d..b7b13cc 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -26,6 +26,7 @@ set(SAMPLES description.cc simple.cc theories.cc + redirect.cc ) set(SCRIPTS diff --git a/samples/redirect.cc b/samples/redirect.cc new file mode 100644 index 0000000..f4eae63 --- /dev/null +++ b/samples/redirect.cc @@ -0,0 +1,56 @@ +#include +#include + +#include +#include +#include +#include + +// Testing stdout/stderr + +void redirect_all_std(void) { + cr_redirect_stdout(); + cr_redirect_stderr(); +} + +Test(redirect, test_outputs, .init = redirect_all_std) { + std::FILE* f_stdout = cr_get_redirected_stdout(); + + std::cout << "foo" << std::flush; + + cr_assert_file_contents_match_str(f_stdout, "foo"); + + std::FILE* f_stderr = cr_get_redirected_stderr(); + + std::cerr << "bar" << std::flush; + + cr_assert_file_contents_match_str(f_stderr, "bar"); +} + +// Testing general I/O with sample command-line rot13 + +char rot13_char(char c) { + return std::isalpha(c) ? (c - 'a' + 13) % 26 + 'a' : c; +} + +void rot13_io(void) { + std::string s; + + std::cin >> s; + for (size_t i = 0; i < s.length(); ++i) + s[i] = rot13_char(s[i]); + std::cout << s << std::flush; +} + +Test(redirect, rot13, .init = cr_redirect_stdout) { + std::FILE* f_stdin = cr_get_redirected_stdin(); + std::ofstream f_cin(f_stdin); + + f_cin << "the quick brown fox jumps over the lazy dog"; + f_cin.close(); + + rot13_io(); + + std::FILE* f_stdout = cr_get_redirected_stdout(); + cr_assert_file_contents_match_str(f_stdout, "gur dhvpx oebja sbk whzcf bire gur ynml qbt"); +}