Files
mrw-cxx/src/mrw/exec_test.cpp

135 lines
4.0 KiB
C++
Raw Normal View History

/** @file
$Id$
$Date$
$Author$
@copy © Marc Wäckerlin
@license LGPL, see file <a href="license.html">COPYING</a>
$Log$
2005-04-19 18:48:00 +00:00
Revision 1.9 2005/04/19 18:48:00 marc
new feature PartialExec
Revision 1.8 2005/04/07 20:55:21 marc
Oops, there's a make distcheck...? Now it works.
Revision 1.7 2004/12/20 13:21:21 marc
exception tests: each exception must be in an own test case
Revision 1.6 2004/12/14 20:30:10 marc
added possibility to pass string to stdin of child process
2004-10-13 10:43:11 +00:00
Revision 1.5 2004/10/13 10:43:11 marc
test for bad exception specification
Revision 1.4 2004/08/28 16:21:25 marc
mrw-c++-0.92 (mrw)
- new file: version.cpp
- new file header for all sources
- work around warning in mrw::auto<T>
- possibility to compile without log4cxx
- work around bugs in demangle.h and libiberty.h
- corrections in documentation
- added simple tracing mechanism
- more warnings
- small corrections in Auto<>::Free and a new test for it
- possibility to compile without stack trace
*/
2004-04-21 06:39:20 +00:00
#include <mrw/exec.hpp>
#include <mrw/stacktrace.hpp>
#include <mrw/stdext.hpp>
2004-04-21 19:03:38 +00:00
#include <cppunit/TestFixture.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <string>
#include <stdlib.h>
2004-04-21 20:24:14 +00:00
#include <iostream>
#ifdef __GNUG__
#define LOG std::clog<<__PRETTY_FUNCTION__<<'@'<<__FILE__<<':'<<__LINE__;
#else
#define LOG std::clog<<__FUNCTION__<<'@'<<__FILE__<<':'<<__LINE__;
#endif
2004-04-21 19:03:38 +00:00
class ExecTest: public CppUnit::TestFixture {
public:
void lsTest() {
LOG;
std::string res = (mrw::Cmd("/bin/ls"), "-l",
std::string(getenv("srcdir"))+"/..").execute();
2004-04-21 19:03:38 +00:00
CPPUNIT_ASSERT(res.find("COPYING")<res.size());
}
void catTest() {
LOG;
std::string res = mrw::Cmd("/bin/cat").execute("This is a test");
CPPUNIT_ASSERT(res=="This is a test");
}
void excTest1() {
LOG;
std::string res = (mrw::Cmd("/bin/false")).execute().result();
}
void excTest2() {
LOG;
std::string res = (mrw::Cmd("/bin/false")).execute("").result();
2004-04-21 19:03:38 +00:00
}
2004-10-13 10:43:11 +00:00
void unexpectedExc() throw(std::bad_exception) {
LOG;
2004-10-13 10:43:11 +00:00
std::string res = (mrw::Cmd("/bin/false")).execute().result();
}
2005-04-19 18:48:00 +00:00
void lsTest2() {
LOG;
2005-04-19 18:48:00 +00:00
std::string res;
mrw::PartialExec exec = (mrw::Cmd("/bin/ls"), "-l",
std::string(getenv("srcdir"))+"/..").start();
while (!exec.finished()) res+=exec.read().first;
CPPUNIT_ASSERT(res.find("COPYING")<res.size());
}
void catTest2() {
LOG;
2005-04-19 18:48:00 +00:00
mrw::PartialExec exec = mrw::Cmd("/bin/cat").start(true);
std::string res = exec.read("This is a test\n").first;
res += exec.read("More to come...\n").first;
exec.finish();
while (!exec.finished()) res+=exec.read().first;
CPPUNIT_ASSERT(res=="This is a test\nMore to come...\n");
}
void excTest12() {
LOG;
2005-04-19 18:48:00 +00:00
mrw::PartialExec exec = (mrw::Cmd("/bin/false")).start();
while (!exec.finished()) exec.read();
}
void excTest22() {
LOG;
2005-04-19 18:48:00 +00:00
mrw::PartialExec exec = (mrw::Cmd("/bin/false")).start(true);
while (!exec.finished()) exec.read("xxx");
}
void unexpectedExc2() throw(std::bad_exception) {
LOG;
2005-04-19 18:48:00 +00:00
mrw::PartialExec exec = (mrw::Cmd("/bin/false")).start();
while (!exec.finished()) exec.read();
}
2004-04-21 19:03:38 +00:00
CPPUNIT_TEST_SUITE(ExecTest);
CPPUNIT_TEST(lsTest);
CPPUNIT_TEST(catTest);
CPPUNIT_TEST_EXCEPTION(excTest1, mrw::ExecutionFailedExc);
CPPUNIT_TEST_EXCEPTION(excTest2, mrw::ExecutionFailedExc);
2004-10-13 10:43:11 +00:00
CPPUNIT_TEST_EXCEPTION(unexpectedExc, std::bad_exception);
2005-04-19 18:48:00 +00:00
CPPUNIT_TEST(lsTest2);
CPPUNIT_TEST(catTest2);
CPPUNIT_TEST_EXCEPTION(excTest12, mrw::ExecutionFailedExc);
CPPUNIT_TEST_EXCEPTION(excTest22, mrw::ExecutionFailedExc);
CPPUNIT_TEST_EXCEPTION(unexpectedExc2, std::bad_exception);
2004-04-21 19:03:38 +00:00
CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(ExecTest);
2004-04-21 06:39:20 +00:00
int main() {
2004-04-21 19:03:38 +00:00
CppUnit::TextUi::TestRunner runner;
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
return runner.run() ? 0 : 1;
2004-04-21 06:39:20 +00:00
}