Snaipe / Criterion

A cross-platform C and C++ unit testing framework for the 21st century
MIT License
1.95k stars 177 forks source link

Redirections for `stdout` require buffering to be disabled for assertions like `cr_assert_stdout_eq_str` to pass. #506

Open oliversheridanmethven opened 10 months ago

oliversheridanmethven commented 10 months ago

I think mostly this is a documentation issue, but I found when I was doing all the redirection tests with stderr everything was working fine (as in the docs), but when I switched to testing stdout it was all failing. It seems the root cause was that stdout was being buffered. Following the documentation, it seems the following was required for this to work.

void redirect_all_stdout(void)
{
    cr_redirect_stdout();
    setbuf(stdout, NULL);
    cr_redirect_stderr();
}

I think the documentation just needs to be updated.