Opened 14 years ago
Closed 14 years ago
#2395 closed Patches (fixed)
[filesystem] operations_test regression test fails on MSVC with STDCXX
| Reported by: | Owned by: | Beman Dawes | |
|---|---|---|---|
| Milestone: | Boost 1.37.0 | Component: | filesystem |
| Version: | Boost Development Trunk | Severity: | Problem |
| Keywords: | Cc: |
Description
The operations_test regression test fails on MSVC with STDCXX: http://tinyurl.com/53m6t4
The reason is checking in libs/filesystem/test/operation_test.cpp, lines 149-150 :
try
{
fs::create_directory( "no-such-dir/foo/bar" );
}
catch ( std::runtime_error x )
{
exception_thrown = true;
if ( report_throws ) std::cout << x.what() << std::endl;
if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
BOOST_CHECK( std::strcmp( x.what(),
"boost::filesystem::create_directory" ) == 0 );
}
Our implementation of the copy ctor (as well as assignment operator) of the std::runtime_error class
copying the resulting string of the what() method of the operand.
So that in the following code the all three assertions will pass:
boost::system::system_error se(3, boost::system::get_system_category(),
"boost::filesystem::create_directory");
std::runtime_error re = se;
assert (0 != std::strcmp (re.what(), "boost::filesystem::create_directory"));
assert (0 == std::strcmp (re.what(), se.what()));
assert (0 == std::strcmp (re.what(), "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\""));
The proposed patch:
Index: libs/filesystem/test/operations_test.cpp
===================================================================
--- libs/filesystem/test/operations_test.cpp (revision 49179)
+++ libs/filesystem/test/operations_test.cpp (working copy)
@@ -146,8 +146,9 @@
exception_thrown = true;
if ( report_throws ) std::cout << x.what() << std::endl;
if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
- BOOST_CHECK( std::strcmp( x.what(),
- "boost::filesystem::create_directory" ) == 0 );
+ BOOST_CHECK( std::strncmp( x.what(),
+ "boost::filesystem::create_directory",
+ sizeof("boost::filesystem::create_directory")-1 ) == 0 );
}
BOOST_CHECK( exception_thrown );
Note:
See TracTickets
for help on using tickets.

Thanks!
--Beman