Boost logo

Boost :

Subject: [boost] [test]
From: Jochen Heckl (jochen.heckl_at_[hidden])
Date: 2009-03-09 15:41:25


Hi,
I think I stumbled over a problem in the boost unit test library.

I'm running MSVC 2008 SP1.
Maybe also worth mentioning is, that I use _HAS_TR1=0 with any msvc build.
Also I compile boost using bjam define=_HAS_TR1=0 ...

Well straight to the problem:

this code (boost\test\utils\basic_cstring\basic_cstring.hpp, around line 170)

template<typename CharT>
inline
basic_cstring<CharT>::basic_cstring( std_string const& s )
: m_begin( s.c_str() )
, m_end( m_begin + s.size() )
{
}

will result in a corrupted basic_cstring, if the source string s goes
out of scope, which is the case here
( \boost\test\impl\unit_test_main.ipp, around line 179 )

...

int BOOST_TEST_DECL
unit_test_main( init_unit_test_func init_func, int argc, char* argv[] )
{
    try {
        framework::init( init_func, argc, argv );

        if( !runtime_config::test_to_run().is_empty() ) {
            test_case_filter filter( runtime_config::test_to_run() );
  // <--- parameter will become corrupted

            traverse_test_tree( framework::master_test_suite().p_id, filter );
        }

   ...

because of the temporal std::string return from retrieve_parameter
(boost\test\impl\unit_test_parameters.ipp, around line 353 )

const_string
test_to_run()
{
    return retrieve_parameter( TESTS_TO_RUN, s_cla_parser, s_empty );
}

as quick and very very dirty fix I currently use:

test_to_run()
{
        static std::string TTR = retrieve_parameter( TESTS_TO_RUN,
s_cla_parser, s_empty );
        return TTR;
}

However, I would welcome, if somebody could supply a more suitable solutions.

Best Jochen


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk