summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/system/test/system_category_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/boost/libs/system/test/system_category_test.cpp121
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)