$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57857 - in trunk/boost/test: detail impl
From: gennadiy.rozental_at_[hidden]
Date: 2009-11-23 00:57:28
Author: rogeeff
Date: 2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
New Revision: 57857
URL: http://svn.boost.org/trac/boost/changeset/57857
Log:
support for log_sink and report_sink is added
Text files modified: 
   trunk/boost/test/detail/unit_test_parameters.hpp |     5 ++++                                    
   trunk/boost/test/impl/progress_monitor.ipp       |     4 ++                                      
   trunk/boost/test/impl/results_reporter.ipp       |     6 +++-                                    
   trunk/boost/test/impl/unit_test_log.ipp          |     7 +----                                   
   trunk/boost/test/impl/unit_test_parameters.ipp   |    49 ++++++++++++++++++++++++++++++++++++++- 
   5 files changed, 61 insertions(+), 10 deletions(-)
Modified: trunk/boost/test/detail/unit_test_parameters.hpp
==============================================================================
--- trunk/boost/test/detail/unit_test_parameters.hpp	(original)
+++ trunk/boost/test/detail/unit_test_parameters.hpp	2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
@@ -20,6 +20,9 @@
 
 #include <boost/test/detail/suppress_warnings.hpp>
 
+// STL
+#include <iosfwd>
+
 //____________________________________________________________________________//
 
 namespace boost {
@@ -48,6 +51,8 @@
 bool                    BOOST_TEST_DECL detect_fp_exceptions();
 output_format           BOOST_TEST_DECL report_format();
 output_format           BOOST_TEST_DECL log_format();
+std::ostream*           BOOST_TEST_DECL report_sink();
+std::ostream*           BOOST_TEST_DECL log_sink();
 long                    BOOST_TEST_DECL detect_memory_leaks();
 int                     BOOST_TEST_DECL random_seed();
 
Modified: trunk/boost/test/impl/progress_monitor.ipp
==============================================================================
--- trunk/boost/test/impl/progress_monitor.ipp	(original)
+++ trunk/boost/test/impl/progress_monitor.ipp	2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
@@ -19,6 +19,8 @@
 #include <boost/test/progress_monitor.hpp>
 #include <boost/test/unit_test_suite_impl.hpp>
 
+#include <boost/test/detail/unit_test_parameters.hpp>
+
 // Boost
 #include <boost/progress.hpp>
 #include <boost/scoped_ptr.hpp>
@@ -40,7 +42,7 @@
 struct progress_monitor_impl {
     // Constructor
     progress_monitor_impl()
-    : m_stream( &std::cout )
+        : m_stream( runtime_config::log_sink() )
     {}
 
     std::ostream*                m_stream;
Modified: trunk/boost/test/impl/results_reporter.ipp
==============================================================================
--- trunk/boost/test/impl/results_reporter.ipp	(original)
+++ trunk/boost/test/impl/results_reporter.ipp	2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
@@ -23,6 +23,8 @@
 #include <boost/test/output/plain_report_formatter.hpp>
 #include <boost/test/output/xml_report_formatter.hpp>
 
+#include <boost/test/detail/unit_test_parameters.hpp>
+
 // Boost
 #include <boost/scoped_ptr.hpp>
 #include <boost/io/ios_state.hpp>
@@ -50,8 +52,8 @@
 struct results_reporter_impl : test_tree_visitor {
     // Constructor
     results_reporter_impl()
-    : m_output( &std::cerr )
-    , m_stream_state_saver( new io_saver_type( std::cerr ) )
+    : m_output( runtime_config::report_sink() )
+    , m_stream_state_saver( new io_saver_type( *m_output ) )
     , m_report_level( CONFIRMATION_REPORT )
     , m_formatter( new output::plain_report_formatter )
     {}
Modified: trunk/boost/test/impl/unit_test_log.ipp
==============================================================================
--- trunk/boost/test/impl/unit_test_log.ipp	(original)
+++ trunk/boost/test/impl/unit_test_log.ipp	2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
@@ -33,9 +33,6 @@
 #include <boost/io/ios_state.hpp>
 typedef ::boost::io::ios_base_all_saver io_saver_type;
 
-// STL
-#include <iostream>
-
 #include <boost/test/detail/suppress_warnings.hpp>
 
 //____________________________________________________________________________//
@@ -89,8 +86,8 @@
 struct unit_test_log_impl {
     // Constructor
     unit_test_log_impl()
-    : m_stream( &std::cout )
-    , m_stream_state_saver( new io_saver_type( std::cout ) )
+    : m_stream( runtime_config::log_sink() )
+    , m_stream_state_saver( new io_saver_type( *m_stream ) )
     , m_threshold_level( log_all_errors )
     , m_log_formatter( new output::compiler_log_formatter )
     {
Modified: trunk/boost/test/impl/unit_test_parameters.ipp
==============================================================================
--- trunk/boost/test/impl/unit_test_parameters.ipp	(original)
+++ trunk/boost/test/impl/unit_test_parameters.ipp	2009-11-23 00:57:27 EST (Mon, 23 Nov 2009)
@@ -52,6 +52,7 @@
 #include <map>
 #include <cstdlib>
 #include <iostream>
+#include <fstream>
 
 #include <boost/test/detail/suppress_warnings.hpp>
 
@@ -161,10 +162,12 @@
 std::string DETECT_MEM_LEAKS  = "detect_memory_leaks";
 std::string LOG_FORMAT        = "log_format";
 std::string LOG_LEVEL         = "log_level";
+std::string LOG_SINK          = "log_sink";
 std::string OUTPUT_FORMAT     = "output_format";
 std::string RANDOM_SEED       = "random";
 std::string REPORT_FORMAT     = "report_format";
 std::string REPORT_LEVEL      = "report_level";
+std::string REPORT_SINK       = "report_sink";
 std::string RESULT_CODE       = "result_code";
 std::string TESTS_TO_RUN      = "run_test";
 std::string SAVE_TEST_PATTERN = "save_pattern";
@@ -180,10 +183,12 @@
     DETECT_MEM_LEAKS  , "BOOST_TEST_DETECT_MEMORY_LEAK",
     LOG_FORMAT        , "BOOST_TEST_LOG_FORMAT",
     LOG_LEVEL         , "BOOST_TEST_LOG_LEVEL",
+    LOG_SINK          , "BOOST_TEST_LOG_SINK",
     OUTPUT_FORMAT     , "BOOST_TEST_OUTPUT_FORMAT",
     RANDOM_SEED       , "BOOST_TEST_RANDOM",
     REPORT_FORMAT     , "BOOST_TEST_REPORT_FORMAT",
     REPORT_LEVEL      , "BOOST_TEST_REPORT_LEVEL",
+    REPORT_SINK       , "BOOST_TEST_REPORT_SINK",
     RESULT_CODE       , "BOOST_TEST_RESULT_CODE",
     TESTS_TO_RUN      , "BOOST_TESTS_TO_RUN",
     SAVE_TEST_PATTERN , "BOOST_TEST_SAVE_PATTERN",
@@ -216,9 +221,9 @@
 
         optional<T> val = s_cla_parser.get<optional<T> >( parameter_name );
         if( val )
-	    return *val;
+	        return *val;
         else
-	    return optional_value;
+	        return optional_value;
     }
 
     boost::optional<T> v;
@@ -268,6 +273,9 @@
           << cla::dual_name_parameter<unit_test::log_level>( LOG_LEVEL + "|l" )
             - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
                cla::description = "Specifies log level")
+          << cla::dual_name_parameter<std::string>( LOG_SINK + "|k" )
+            - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
+               cla::description = "Specifies log sink:stdout(default),stderr or file name")
           << cla::dual_name_parameter<unit_test::output_format>( OUTPUT_FORMAT + "|o" )
             - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
                cla::description = "Specifies output format (both log and report)")
@@ -281,6 +289,9 @@
           << cla::dual_name_parameter<unit_test::report_level>(REPORT_LEVEL + "|r")
             - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
                cla::description = "Specifies report level")
+          << cla::dual_name_parameter<std::string>( REPORT_SINK + "|e" )
+            - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
+               cla::description = "Specifies report sink:stderr(default),stdout or file name")
           << cla::dual_name_parameter<bool>( RESULT_CODE + "|c" )
             - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
                cla::description = "Allows to disable test modules's result code generation")
@@ -453,6 +464,40 @@
 
 //____________________________________________________________________________//
 
+std::ostream*
+report_sink()
+{
+    std::string sink_name = retrieve_parameter( REPORT_SINK, s_cla_parser, s_empty );
+
+    if( sink_name.empty() || sink_name == "stderr" )
+        return &std::cerr;    
+    
+    if( sink_name == "stdout" )
+        return &std::cout;
+
+    static std::ofstream log_file( sink_name.c_str() );
+    return &log_file;
+}
+
+//____________________________________________________________________________//
+
+std::ostream*
+log_sink()
+{
+    std::string sink_name = retrieve_parameter( LOG_SINK, s_cla_parser, s_empty );
+
+    if( sink_name.empty() || sink_name == "stdout" )
+        return &std::cout;    
+
+    if( sink_name == "stderr" )
+        return &std::cerr;    
+
+    static std::ofstream report_file( sink_name.c_str() );
+    return &report_file;
+}
+
+//____________________________________________________________________________//
+
 long
 detect_memory_leaks()
 {