/* vim: set sw=4 sts=4 et foldmethod=syntax : *//* * Copyright (c) 2010 Ciaran McCreesh * * This file is part of the Paludis package manager. Paludis is free software; * you can redistribute it and/or modify it under the terms of the GNU General * Public License version 2, as published by the Free Software Foundation. * * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */#include<paludis/util/process.hh>#include<test/test_framework.hh>#include<test/test_runner.hh>#include<sstream>usingnamespacepaludis;usingnamespacetest;namespacetest_cases{structTrueTest:TestCase{TrueTest():TestCase("true"){}voidrun(){Processtrue_process(ProcessCommand({"true"}));TEST_CHECK_EQUAL(true_process.run().wait(),0);}}test_true;structFalseTest:TestCase{FalseTest():TestCase("false"){}voidrun(){Processfalse_process(ProcessCommand({"false"}));TEST_CHECK_EQUAL(false_process.run().wait(),1);}}test_false;structNoWaitTest:TestCase{NoWaitTest():TestCase("no wait"){}voidrun(){Processtrue_process(ProcessCommand({"true"}));TEST_CHECK_THROWS({RunningProcessHandlehandle(true_process.run());},ProcessError);}}test_no_wait;structTwoWaitTest:TestCase{TwoWaitTest():TestCase("two wait"){}voidrun(){Processtrue_process(ProcessCommand({"true"}));RunningProcessHandlehandle(true_process.run());TEST_CHECK_EQUAL(handle.wait(),0);TEST_CHECK_THROWS(intPALUDIS_ATTRIBUTE((unused))x(handle.wait()),ProcessError);}}test_two_wait;structGrabStdoutTest:TestCase{GrabStdoutTest():TestCase("grab stdout"){}voidrun(){std::stringstreamstdout_stream;Processecho_process(ProcessCommand({"echo","monkey"}));echo_process.capture_stdout(stdout_stream);TEST_CHECK_EQUAL(echo_process.run().wait(),0);TEST_CHECK_EQUAL(stdout_stream.str(),"monkey\n");}}test_grab_stdout;structGrabStderrTest:TestCase{GrabStderrTest():TestCase("grab stderr"){}voidrun(){std::stringstreamstderr_stream;Processecho_process(ProcessCommand({"sh","-c","echo monkey 1>&2"}));echo_process.capture_stderr(stderr_stream);TEST_CHECK_EQUAL(echo_process.run().wait(),0);TEST_CHECK_EQUAL(stderr_stream.str(),"monkey\n");}}test_grab_stderr;structGrabStdoutStderrTest:TestCase{GrabStdoutStderrTest():TestCase("grab stdout stderr"){}voidrun(){std::stringstreamstdout_stream,stderr_stream;Processecho_process(ProcessCommand({"sh","-c","echo monkey 1>&2 ; echo chimp"}));echo_process.capture_stdout(stdout_stream);echo_process.capture_stderr(stderr_stream);TEST_CHECK_EQUAL(echo_process.run().wait(),0);TEST_CHECK_EQUAL(stdout_stream.str(),"chimp\n");TEST_CHECK_EQUAL(stderr_stream.str(),"monkey\n");}}test_grab_stdout_stderr;structGrabStdoutLongTest:TestCase{GrabStdoutLongTest():TestCase("grab stdout long"){}voidrun(){std::stringstreamstdout_stream;Processecho_process(ProcessCommand({"seq","1","100000"}));echo_process.capture_stdout(stdout_stream);TEST_CHECK_EQUAL(echo_process.run().wait(),0);std::strings;for(intx(1);x<=100000;++x){TEST_CHECK(std::getline(stdout_stream,s));TEST_CHECK_STRINGIFY_EQUAL(s,stringify(x));}TEST_CHECK(!std::getline(stdout_stream,s));}}test_grab_stdout_long;}