123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // Copyright (c) 2006, 2007 Julio M. Merino Vidal
- // Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
- // Copyright (c) 2009 Boris Schaeling
- // Copyright (c) 2010 Felipe Tanus, Boris Schaeling
- // Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
- //
- // 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)
- #define BOOST_TEST_MAIN
- #define BOOST_TEST_IGNORE_SIGCHLD
- #include <boost/test/included/unit_test.hpp>
- #include <boost/process/error.hpp>
- #include <system_error>
- #include <boost/bind.hpp>
- #include <boost/ref.hpp>
- #include <boost/process/child.hpp>
- #include <boost/process/extend.hpp>
- namespace bp = boost::process;
- struct run_exe
- {
- std::string exe;
- template<typename T>
- void operator()(T &e) const
- {
- e.exe = exe.c_str();
- }
- };
- struct set_on_error
- {
- mutable std::error_code ec;
- template<typename T>
- void operator()(T &, const std::error_code & ec) const
- {
- this->ec = ec;
- }
- };
- BOOST_AUTO_TEST_CASE(extensions)
- {
- using boost::unit_test::framework::master_test_suite;
- run_exe re;
- re.exe = master_test_suite().argv[1];
- set_on_error se;
- std::error_code ec;
- bp::child c(
- "Wrong-Command",
- "test",
- bp::extend::on_setup=re,
- bp::extend::on_error=se,
- bp::ignore_error
- );
- BOOST_CHECK(!se.ec);
- }
- namespace ex = boost::process::extend;
- std::string st = "not called";
- struct overload_handler : ex::handler
- {
- template <class Char, class Sequence>
- void on_setup(ex::windows_executor<Char, Sequence>& exec) const
- {
- st = "windows";
- const char* env = exec.env;
- }
- template <class Sequence>
- void on_setup(ex::posix_executor<Sequence>& exec) const
- {
- st = "posix";
- char** env = exec.env;
- }
- };
- BOOST_AUTO_TEST_CASE(overload)
- {
- bp::child c(
- overload_handler(),
- bp::ignore_error
- );
- #if defined(BOOST_WINDOWS_API)
- BOOST_CHECK_EQUAL(st, "windows");
- #else
- BOOST_CHECK_EQUAL(st, "posix");
- #endif
- }
|