diff options
Diffstat (limited to 'boost/test/utils/runtime/env/fetch.hpp')
-rw-r--r-- | boost/test/utils/runtime/env/fetch.hpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/boost/test/utils/runtime/env/fetch.hpp b/boost/test/utils/runtime/env/fetch.hpp new file mode 100644 index 0000000000..97d54d4905 --- /dev/null +++ b/boost/test/utils/runtime/env/fetch.hpp @@ -0,0 +1,108 @@ +// (C) Copyright Gennadiy Rozental 2001. +// 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 http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision$ +// +// Description : implements fetching absent parameter athuments from environment +// *************************************************************************** + +#ifndef BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP +#define BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP + +// Boost.Test Runtime parameters +#include <boost/test/utils/runtime/parameter.hpp> +#include <boost/test/utils/runtime/argument.hpp> + +#include <boost/test/detail/suppress_warnings.hpp> + +// C Runtime +#include <stdlib.h> + +namespace boost { +namespace runtime { +namespace env { + +namespace env_detail { + +#ifndef UNDER_CE + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4996) // getenv +#endif + +inline std::pair<cstring,bool> +sys_read_var( cstring var_name ) +{ + using namespace std; + char const* res = getenv( var_name.begin() ); + + return std::make_pair( cstring(res), res != NULL ); +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#else + +inline std::pair<cstring,bool> +sys_read_var( cstring var_name ) +{ + return std::make_pair( cstring(), false ); +} + +#endif + +//____________________________________________________________________________// + +template<typename ReadFunc> +inline void +fetch_absent( parameters_store const& params, runtime::arguments_store& args, ReadFunc read_func ) +{ + BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) { + basic_param_ptr param = v.second; + + if( args.has( param->p_name ) || param->p_env_var.empty() ) + continue; + + std::pair<cstring,bool> value = read_func( param->p_env_var ); + + if( !value.second ) + continue; + + // Validate against unexpected empty value + BOOST_TEST_I_ASSRT( !value.first.is_empty() || param->p_has_optional_value, + format_error( param->p_name ) + << "Missing an argument value for the parameter " << param->p_name + << " in the environment." ); + + // Produce argument value + param->produce_argument( value.first, false, args ); + + } +} + +//____________________________________________________________________________// + +} // namespace env_detail + +inline void +fetch_absent( parameters_store const& params, runtime::arguments_store& args ) +{ + env_detail::fetch_absent( params, args, &env_detail::sys_read_var ); +} + +} // namespace env +} // namespace runtime +} // namespace boost + +#include <boost/test/detail/enable_warnings.hpp> + +#endif // BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP |