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)
5
6// See http://www.boost.org/libs/test for the library home page.
7//
8// File : $RCSfile$
9//
10// Version : $Revision$
11//
12// Description : implements fetching absent parameter athuments from environment
13// ***************************************************************************
14
15#ifndef BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
16#define BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
17
18// Boost.Test Runtime parameters
19#include <boost/test/utils/runtime/parameter.hpp>
20#include <boost/test/utils/runtime/argument.hpp>
21
22#include <boost/test/detail/suppress_warnings.hpp>
23
24// C Runtime
25#include <stdlib.h>
26
27namespace boost {
28namespace runtime {
29namespace env {
30
31namespace env_detail {
32
33#ifndef UNDER_CE
34
35#ifdef BOOST_MSVC
36#pragma warning(push)
37#pragma warning(disable:4996) // getenv
38#endif
39
40inline std::pair<cstring,bool>
41sys_read_var( cstring var_name )
42{
43 using namespace std;
44 char const* res = getenv( name: var_name.begin() );
45
46 return std::make_pair( x: cstring(res), y: res != NULL );
47}
48
49#ifdef BOOST_MSVC
50#pragma warning(pop)
51#endif
52
53#else
54
55inline std::pair<cstring,bool>
56sys_read_var( cstring var_name )
57{
58 return std::make_pair( cstring(), false );
59}
60
61#endif
62
63//____________________________________________________________________________//
64
65template<typename ReadFunc>
66inline void
67fetch_absent( parameters_store const& params, runtime::arguments_store& args, ReadFunc read_func )
68{
69 BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) {
70 basic_param_ptr param = v.second;
71
72 if( args.has( parameter_name: param->p_name ) || param->p_env_var.empty() )
73 continue;
74
75 std::pair<cstring,bool> value = read_func( param->p_env_var );
76
77 if( !value.second )
78 continue;
79
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." );
85
86 // Produce argument value
87 param->produce_argument( token: value.first, negative_form: false, store&: args );
88
89 }
90}
91
92//____________________________________________________________________________//
93
94} // namespace env_detail
95
96inline void
97fetch_absent( parameters_store const& params, runtime::arguments_store& args )
98{
99 env_detail::fetch_absent( params, args, read_func: &env_detail::sys_read_var );
100}
101
102} // namespace env
103} // namespace runtime
104} // namespace boost
105
106#include <boost/test/detail/enable_warnings.hpp>
107
108#endif // BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
109

source code of include/boost/test/utils/runtime/env/fetch.hpp