1 // (C) Copyright Gennadiy Rozental 2001.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org/libs/test for the library home page.
10 // Version : $Revision$
12 // Description : implements fetching absent parameter athuments from environment
13 // ***************************************************************************
15 #ifndef BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
16 #define BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
18 // Boost.Test Runtime parameters
19 #include <boost/test/utils/runtime/parameter.hpp>
20 #include <boost/test/utils/runtime/argument.hpp>
22 #include <boost/test/detail/suppress_warnings.hpp>
31 namespace env_detail {
37 #pragma warning(disable:4996) // getenv
40 inline std::pair<cstring,bool>
41 sys_read_var( cstring var_name )
44 char const* res = getenv( var_name.begin() );
46 return std::make_pair( cstring(res), res != NULL );
55 inline std::pair<cstring,bool>
56 sys_read_var( cstring var_name )
58 return std::make_pair( cstring(), false );
63 //____________________________________________________________________________//
65 template<typename ReadFunc>
67 fetch_absent( parameters_store const& params, runtime::arguments_store& args, ReadFunc read_func )
69 BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) {
70 basic_param_ptr param = v.second;
72 if( args.has( param->p_name ) || param->p_env_var.empty() )
75 std::pair<cstring,bool> value = read_func( param->p_env_var );
80 // Validate against unexpected empty value
81 BOOST_TEST_I_ASSRT( !value.first.is_empty() || param->p_has_optional_value,
82 format_error( param->p_name )
83 << "Missing an argument value for the parameter " << param->p_name
84 << " in the environment." );
86 // Produce argument value
87 param->produce_argument( value.first, false, args );
92 //____________________________________________________________________________//
94 } // namespace env_detail
97 fetch_absent( parameters_store const& params, runtime::arguments_store& args )
99 env_detail::fetch_absent( params, args, &env_detail::sys_read_var );
103 } // namespace runtime
106 #include <boost/test/detail/enable_warnings.hpp>
108 #endif // BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP