diff options
Diffstat (limited to '')
-rw-r--r-- | src/boost/libs/system/test/system_category_test.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/boost/libs/system/test/system_category_test.cpp b/src/boost/libs/system/test/system_category_test.cpp new file mode 100644 index 000000000..5a77454cf --- /dev/null +++ b/src/boost/libs/system/test/system_category_test.cpp @@ -0,0 +1,121 @@ + +// Copyright 2018 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + +// See library home page at http://www.boost.org/libs/system + +// Avoid spurious VC++ warnings +# define _CRT_SECURE_NO_WARNINGS + +#include <boost/system/error_code.hpp> +#include <boost/core/lightweight_test.hpp> +#include <cstring> +#include <cstdio> + +// + +#if defined(BOOST_WINDOWS_API) && defined(BOOST_SYSTEM_USE_UTF8) + +#include <boost/config/pragma_message.hpp> + +BOOST_PRAGMA_MESSAGE( "Skipping test due to BOOST_WINDOWS_API && BOOST_SYSTEM_USE_UTF8" ) + +int main() {} + +#else + +#if defined(BOOST_WINDOWS_API) + +#include <windows.h> + +std::string sys_strerror( int ev ) +{ + void * lpMsgBuf = 0; + + DWORD retval = FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + ev, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR) &lpMsgBuf, + 0, + NULL + ); + + struct local_free + { + void * p_; + + ~local_free() + { + LocalFree( p_ ); + } + }; + + local_free lf_ = { lpMsgBuf }; + + if( retval == 0 ) + { + char buffer[ 38 ]; + + std::sprintf( buffer, "Unknown error (%d)", ev ); + return buffer; + } + + std::string str( static_cast<char const*>( lpMsgBuf ) ); + + while( !str.empty() && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') ) + { + str.erase( str.size()-1 ); + } + + if( !str.empty() && str[str.size()-1] == '.' ) + { + str.erase( str.size()-1 ); + } + + return str; +} + +#else + +std::string sys_strerror( int ev ) +{ + return std::strerror( ev ); +} + +#endif + +// + +namespace sys = boost::system; + +static void test_message( sys::error_category const & cat, int ev ) +{ + BOOST_TEST_EQ( cat.message( ev ), sys_strerror( ev ) ); + + char buffer[ 4096 ]; // yes, really + BOOST_TEST_CSTR_EQ( cat.message( ev, buffer, sizeof( buffer ) ), sys_strerror( ev ).c_str() ); +} + +int main() +{ + sys::error_category const & cat = sys::system_category(); + + // message + + for( int i = -2; i < 16000; ++i ) + { + test_message( cat, i ); + } + + return boost::report_errors(); +} + +#endif // #if defined(BOOST_WINDOWS_API) && defined(BOOST_SYSTEM_USE_UTF8) |