args_cmd.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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
  6. //
  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)
  9. #define BOOST_TEST_MAIN
  10. #define BOOST_TEST_IGNORE_SIGCHLD
  11. #include <boost/test/included/unit_test.hpp>
  12. #include <boost/process/exe.hpp>
  13. #include <boost/process/args.hpp>
  14. #include <boost/process/cmd.hpp>
  15. #include <boost/process/io.hpp>
  16. #include <boost/process/error.hpp>
  17. #include <boost/process/child.hpp>
  18. #include <boost/algorithm/string/predicate.hpp>
  19. namespace bp = boost::process;
  20. namespace bp = boost::process;
  21. BOOST_AUTO_TEST_CASE(args, *boost::unit_test::timeout(2))
  22. {
  23. using boost::unit_test::framework::master_test_suite;
  24. bp::ipstream is;
  25. std::error_code ec;
  26. bp::child c(
  27. master_test_suite().argv[1],
  28. "test", "--echo-argv",
  29. bp::args+={"hello thingy", "\"stuff\""},
  30. bp::args+=" spa ce ",
  31. bp::std_out>is,
  32. ec
  33. );
  34. if (ec)
  35. std::cout << "EC: " << ec.message() << std::endl;
  36. BOOST_REQUIRE(!ec);
  37. std::string s;
  38. std::getline(is, s);
  39. s.resize(4);
  40. BOOST_CHECK_EQUAL(s, "test");
  41. std::getline(is, s);
  42. s.resize(11);
  43. BOOST_CHECK_EQUAL(s, "--echo-argv");
  44. std::getline(is, s);
  45. s.resize(12);
  46. BOOST_CHECK_EQUAL(s, "hello thingy");
  47. std::getline(is, s);
  48. s.resize(7);
  49. BOOST_CHECK_EQUAL(s, "\"stuff\"");
  50. std::getline(is, s);
  51. s.resize(10);
  52. BOOST_CHECK_EQUAL(s, " spa ce ");
  53. }
  54. BOOST_AUTO_TEST_CASE(cmd, *boost::unit_test::timeout(2))
  55. {
  56. using boost::unit_test::framework::master_test_suite;
  57. bp::ipstream is;
  58. std::error_code ec;
  59. std::string cmd = master_test_suite().argv[1];
  60. cmd+= " test --echo-argv \"hello thingy\" \\\"stuff\\\" \" spa ce \"";
  61. bp::child c(cmd,
  62. bp::std_out>is,
  63. ec
  64. );
  65. BOOST_REQUIRE(!ec);
  66. std::string s;
  67. std::getline(is, s);
  68. s.resize(4);
  69. BOOST_CHECK_EQUAL(s, "test");
  70. std::getline(is, s);
  71. s.resize(11);
  72. BOOST_CHECK_EQUAL(s, "--echo-argv");
  73. std::getline(is, s);
  74. s.resize(12);
  75. BOOST_CHECK_EQUAL(s, "hello thingy");
  76. std::getline(is, s);
  77. s.resize(7);
  78. BOOST_CHECK_EQUAL(s, "\"stuff\"");
  79. std::getline(is, s);
  80. s.resize(10);
  81. BOOST_CHECK_EQUAL(s, " spa ce ");
  82. }