On Aug 27, 2010, at 12:09 AM, Steven Watanabe wrote:
AMDG
Matthijs Mohlmann wrote:
First of all: I'm building an application and with that I use Boost test for unit testing. This helped me already to fix some obscure bugs. (I am very happy with boost test)
I have the Master suite test setup in one file and the normal test suites each in one file. This worked very well. Now I have the following test suite which gives me a segmentation fault and I have no idea why:
BOOST_AUTO_TEST_SUITE(ProgramOptions)
BOOST_AUTO_TEST_CASE(ProgramOptions_Valid_Options) {
// Output boost::test_tools::output_test_stream output("misc/ProgramOptions_01.output", true);
// Save output buffer std::streambuf *strmbuffer; strmbuffer = std::cout.rdbuf();
// Redirect the output. std::cout.rdbuf(output.rdbuf());
// Redirect output stream so we can do some checks. printSomething(); BOOST_REQUIRE(output.match_pattern());
// Now lets process some arguments. printSomething(); BOOST_REQUIRE(output.match_pattern());
// Restore output buffer std::cout.rdbuf(strmbuffer); }
BOOST_AUTO_TEST_SUITE_END()
The function that gets tested: void printSomething() { std::cout << "Test output" << std::endl; }
If I put the same content 'Test output' in the ProgramOptions_01.output file then everything is fine and executes ok. When putting different content in that file it goes wrong.
The problem is that when BOOST_REQUIRE fails, the test case immediately aborts, the output buffer is not restored, the output_test_stream is destroyed, and std::cout is left with a dangling pointer.
In Christ, Steven Watanabe
Right, why couldn't I think of that? Regards, Matthijs Möhlmann