]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/process/test/environment.cpp
1 // Copyright (c) 2006, 2007 Julio M. Merino Vidal
2 // Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
3 // Copyright (c) 2009 Boris Schaeling
4 // Copyright (c) 2010 Felipe Tanus, Boris Schaeling
5 // Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10 #define BOOST_TEST_MAIN
11 #define BOOST_TEST_IGNORE_SIGCHLD
12 #include <boost/test/included/unit_test.hpp>
13 #include <boost/process/environment.hpp>
15 namespace bp
= boost::process
;
20 std::ostream
& operator<<(std::ostream
& str
, const std::wstring
& ws
)
22 str
<< bp::detail::convert(ws
);
27 BOOST_AUTO_TEST_CASE(empty
, *boost::unit_test::timeout(5))
30 BOOST_CHECK(ev
.empty());
31 BOOST_CHECK_EQUAL(ev
.size(), 0u);
32 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 0);
33 ev
["Thingy"] = "My value";
35 BOOST_CHECK(!ev
.empty());
36 BOOST_CHECK_EQUAL(ev
.size(), 1u);
37 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 1);
41 BOOST_CHECK_EQUAL(x
.to_string(), "My value");
42 BOOST_CHECK_EQUAL(x
.get_name(), "Thingy");
46 BOOST_CHECK(ev
.empty());
47 BOOST_CHECK_EQUAL(ev
.size(), 0u);
48 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 0);
52 BOOST_AUTO_TEST_CASE(wempty
, *boost::unit_test::timeout(5))
55 BOOST_CHECK(ev
.empty());
56 BOOST_CHECK_EQUAL(ev
.size(), 0u);
57 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 0);
58 ev
[L
"Thingy"] = L
"My value";
60 BOOST_CHECK(!ev
.empty());
61 BOOST_CHECK_EQUAL(ev
.size(), 1u);
62 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 1);
66 BOOST_CHECK(x
.to_string() == L
"My value");
67 BOOST_CHECK(x
.get_name() == L
"Thingy");
70 ev
[L
"Thingy"].clear();
71 BOOST_CHECK(ev
.empty());
72 BOOST_CHECK_EQUAL(ev
.size(), 0u);
73 BOOST_CHECK_EQUAL(ev
.end() - ev
.begin(), 0);
77 BOOST_AUTO_TEST_CASE(compare
, *boost::unit_test::timeout(5))
79 auto nat
= boost::this_process::environment();
80 bp::environment env
= nat
;
83 BOOST_CHECK_EQUAL(nat
.size(), env
.size());
84 auto ni
= nat
.begin();
85 auto ei
= env
.begin();
87 while ((ni
!= nat
.end()) &&(ei
!= env
.end()))
89 BOOST_CHECK_EQUAL(ni
->get_name(), ei
->get_name());
90 BOOST_CHECK_EQUAL(ni
->to_string(), ei
->to_string());
95 //ok check if I can convert it.
96 bp::wenvironment wenv
{env
};
97 auto wnat
= boost::this_process::wenvironment();
98 BOOST_CHECK_EQUAL(wenv
.size(), env
.size());
99 BOOST_CHECK_EQUAL(wnat
.size(), nat
.size());
101 BOOST_CHECK_EQUAL(wnat
.size(), wenv
.size());
102 auto ni
= wnat
.begin();
103 auto ei
= wenv
.begin();
105 while ((ni
!= wnat
.end()) && (ei
!= wenv
.end()))
107 BOOST_CHECK_EQUAL(ni
->get_name() , ei
->get_name());
108 BOOST_CHECK_EQUAL(ni
->to_string(), ei
->to_string());
112 BOOST_CHECK(ni
== wnat
.end());
114 BOOST_TEST_PASSPOINT();
116 BOOST_TEST_PASSPOINT();
118 BOOST_TEST_PASSPOINT();
121 BOOST_AUTO_TEST_CASE(insert_remove
, *boost::unit_test::timeout(5))
123 bp::environment
env(boost::this_process::environment());
125 auto sz
= env
.size();
126 BOOST_REQUIRE_GE(sz
, 1u);
127 BOOST_REQUIRE_EQUAL(env
.count("BOOST_TEST_VAR"), 0u);
129 env
["BOOST_TEST_VAR"] = {"some string", "badabumm"};
131 #if defined(BOOST_WINDOWS_API)
132 BOOST_CHECK_EQUAL(env
["BOOST_TEST_VAR"].to_string(), "some string;badabumm");
134 BOOST_CHECK_EQUAL(env
["BOOST_TEST_VAR"].to_string(), "some string:badabumm");
136 BOOST_CHECK_EQUAL(sz
+1, env
.size());
138 env
["BOOST_TEST_VAR"].clear();
140 BOOST_CHECK_EQUAL(env
.size(), sz
);
146 BOOST_AUTO_TEST_CASE(clear_empty_my
, *boost::unit_test::timeout(5))
148 bp::native_environment env
;
150 bp::environment e
= env
;
152 const std::size_t sz
= env
.size();
154 BOOST_TEST_MESSAGE("Current native size: " << sz
);
156 BOOST_REQUIRE_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_a"), 0u);
157 BOOST_REQUIRE_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_b"), 0u);
158 BOOST_REQUIRE_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_c"), 0u);
160 env
["BOOST_PROCESS_TEST_VAR_a"] = "1";
161 env
["BOOST_PROCESS_TEST_VAR_b"] = "2";
162 BOOST_CHECK(env
.emplace("BOOST_PROCESS_TEST_VAR_c", "3").second
);
164 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_a"), 1u);
165 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_b"), 1u);
166 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_c"), 1u);
168 BOOST_CHECK_EQUAL(env
.at("BOOST_PROCESS_TEST_VAR_a").to_string(), "1");
169 BOOST_CHECK_EQUAL(env
.at("BOOST_PROCESS_TEST_VAR_b").to_string(), "2");
170 BOOST_CHECK_EQUAL(env
.at("BOOST_PROCESS_TEST_VAR_c").to_string(), "3");
171 BOOST_CHECK_EQUAL(env
.size(), sz
+ 3u);
172 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), sz
+ 3);
173 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), sz
+ 3);
175 env
.erase("BOOST_PROCESS_TEST_VAR_a");
176 BOOST_CHECK_EQUAL(env
.size(), sz
+ 2u);
177 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_a"), 0u);
178 BOOST_CHECK_EQUAL(env
.at ("BOOST_PROCESS_TEST_VAR_b").to_string(), "2");
179 BOOST_CHECK_EQUAL(env
.at ("BOOST_PROCESS_TEST_VAR_c").to_string(), "3");
181 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), sz
+ 2);
182 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), sz
+ 2);
184 env
.erase("BOOST_PROCESS_TEST_VAR_b");
185 BOOST_CHECK_EQUAL(env
.size(), sz
+ 1u);
186 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_a"), 0u);
187 BOOST_CHECK_EQUAL(env
.count("BOOST_PROCESS_TEST_VAR_b"), 0u);
188 BOOST_CHECK_EQUAL(env
.at ("BOOST_PROCESS_TEST_VAR_c").to_string(), "3");
190 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), sz
+ 1);
191 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), sz
+ 1);
194 //note: windows puts an entry without a name into the list, so it might not be empty after clear.
195 BOOST_CHECK_LE(env
.size(), sz
);
197 BOOST_CHECK_LE(std::distance(env
.begin(), env
.end()), sz
);
198 BOOST_CHECK_LE(std::distance(env
.cbegin(), env
.cend()), sz
);
201 env
.emplace(ee
.get_name(), ee
.to_string());
204 BOOST_AUTO_TEST_CASE(clear_empty
, *boost::unit_test::timeout(5))
207 BOOST_CHECK(env
.empty());
208 BOOST_CHECK_EQUAL(env
.size(), 0u);
213 BOOST_CHECK_EQUAL(env
.at("a").to_string(), "1");
214 BOOST_CHECK_EQUAL(env
.at("b").to_string(), "2");
215 BOOST_CHECK_EQUAL(env
.at("c").to_string(), "3");
216 BOOST_CHECK_EQUAL(env
.size(), 3u);
217 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), 3u);
218 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), 3u);
221 BOOST_CHECK_EQUAL(env
.size(), 2u);
222 BOOST_CHECK_EQUAL(env
.at("a").to_string(), "1");
223 BOOST_CHECK_EQUAL(env
.at("b").to_string(), "2");
224 BOOST_CHECK_EQUAL(env
.count("c"), 0u);
226 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), 2u);
227 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), 2u);
230 BOOST_CHECK_EQUAL(env
.size(), 1u);
231 BOOST_CHECK_EQUAL(env
.at("a").to_string(), "1");
232 BOOST_CHECK_EQUAL(env
.count("b"), 0u);
233 BOOST_CHECK_EQUAL(env
.count("c"), 0u);
235 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), 1u);
236 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), 1u);
239 BOOST_CHECK(env
.empty());
240 BOOST_CHECK_EQUAL(env
.size(), 0u);
242 BOOST_CHECK_EQUAL(std::distance(env
.begin(), env
.end()), 0u);
243 BOOST_CHECK_EQUAL(std::distance(env
.cbegin(), env
.cend()), 0u);