#define TO_CHARP_TOK(x) #x
#define TO_CHARP(x) TO_CHARP_TOK(x)
-BOOST_AUTO_TEST_SUITE(pipestream)
+#define I2N_EXTRA_ENV "I2N_EXTRA_ENV"
+
+struct Test_Pipestream_Fixture
+{
+ char **saved_environ;
+
+ Test_Pipestream_Fixture (void) : saved_environ (environ) { }
+
+ ~Test_Pipestream_Fixture (void) {
+ environ = this->saved_environ;
+ (void)unsetenv (I2N_EXTRA_ENV);
+ }
+};
+
+BOOST_FIXTURE_TEST_SUITE(pipestream, Test_Pipestream_Fixture)
BOOST_AUTO_TEST_SUITE(read)
BOOST_AUTO_TEST_SUITE_END() /* [pipestream->read] */
+ BOOST_AUTO_TEST_SUITE(env)
+
+ static const char *const env_argv_abs [] = { "/usr/bin/env", NULL };
+
+ #define I2N_EXTRA_ENVIRON I2N_EXTRA_ENV "=Yet verily, the rose is within the thorn."
+ static char *i2n_extra_environ [] =
+ { const_cast<char*> (I2N_EXTRA_ENVIRON)
+ , NULL
+ };
+
+ BOOST_AUTO_TEST_CASE(env_passthrough)
+ {
+ ExecResult exres = ExecResult ();
+ environ = i2n_extra_environ;
+
+ const std::string result =
+ capture_exec (env_argv_abs, exres, true, true, false, true);
+
+ BOOST_CHECK(exres.normal_exit);
+ BOOST_CHECK_EQUAL(exres.return_code, EXIT_SUCCESS);
+ BOOST_CHECK_EQUAL(result, (std::string)(I2N_EXTRA_ENVIRON "\n"));
+ }
+
+ BOOST_AUTO_TEST_CASE(env_nil)
+ {
+ ExecResult exres = ExecResult ();
+ environ = i2n_extra_environ;
+
+ const std::string result =
+ capture_exec (env_argv_abs, exres, true, true, false, false);
+
+ BOOST_CHECK(exres.normal_exit);
+ BOOST_CHECK_EQUAL(exres.return_code, EXIT_SUCCESS);
+ BOOST_CHECK_EQUAL(result, std::string());
+ }
+
+ BOOST_AUTO_TEST_SUITE_END() /* [pipestream->env] */
+
BOOST_AUTO_TEST_SUITE_END() /* [pipestream] */