|
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