mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
104 lines
2.9 KiB
C++
104 lines
2.9 KiB
C++
/*
|
|
This file is part of the KDE libraries
|
|
|
|
Copyright (C) 2007 Oswald Buddenhagen <ossi@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <kprocess.h>
|
|
#include <kstandarddirs.h>
|
|
#include <qtest_kde.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
|
|
class KProcessTest : public QObject {
|
|
Q_OBJECT
|
|
|
|
private Q_SLOTS:
|
|
void test_channels();
|
|
void test_setShellCommand();
|
|
};
|
|
|
|
// IOCCC nomination pending
|
|
|
|
static char **gargv;
|
|
|
|
static QString recurse(QProcess::ProcessChannelMode how)
|
|
{
|
|
QProcess p;
|
|
p.setProcessChannelMode(QProcess::MergedChannels);
|
|
p.start(gargv[0], QStringList() << QString::number((int)how));
|
|
p.waitForFinished();
|
|
return p.readAllStandardOutput();
|
|
}
|
|
|
|
#define EOUT "foo - stdout"
|
|
#define EERR "bar - stderr"
|
|
#define POUT "program output:\n"
|
|
#define ROUT "received stdout:\n"
|
|
#define RERR "received stderr:\n"
|
|
|
|
#define EO EOUT "\n"
|
|
#define EE EERR "\n"
|
|
#define TESTCHAN(me,ms,pout,rout,rerr) \
|
|
e = "mode: " ms "\n" POUT pout ROUT rout RERR rerr; \
|
|
a = "mode: " ms "\n" + recurse(KProcess::me); \
|
|
QCOMPARE(a, e)
|
|
|
|
void KProcessTest::test_channels()
|
|
{
|
|
QString e, a;
|
|
TESTCHAN(SeparateChannels, "separate", "", EO, EE);
|
|
TESTCHAN(ForwardedChannels, "forwarded", EO EE, "", "");
|
|
TESTCHAN(MergedChannels, "merged", "", EO EE, "");
|
|
}
|
|
|
|
void KProcessTest::test_setShellCommand()
|
|
{
|
|
KProcess p;
|
|
|
|
p.setShellCommand("cat");
|
|
QCOMPARE(p.program().count(), 1);
|
|
QCOMPARE(p.program().at(0), KStandardDirs::findExe("cat"));
|
|
QVERIFY(p.program().at(0).endsWith("/bin/cat"));
|
|
p.setShellCommand("true || false");
|
|
QCOMPARE(p.program(), QStringList() << "/bin/sh" << "-c" << "true || false");
|
|
}
|
|
|
|
static void recursor(char **argv)
|
|
{
|
|
if (argv[1]) {
|
|
KProcess p;
|
|
p.setShellCommand("echo " EOUT "; echo " EERR " >&2");
|
|
p.setProcessChannelMode((QProcess::ProcessChannelMode)atoi(argv[1]));
|
|
fputs(POUT, stdout);
|
|
fflush(stdout);
|
|
p.execute();
|
|
fputs(ROUT, stdout);
|
|
fputs(p.readAllStandardOutput(), stdout);
|
|
fputs(RERR, stdout);
|
|
fputs(p.readAllStandardError(), stdout);
|
|
exit(0);
|
|
}
|
|
gargv = argv;
|
|
}
|
|
|
|
QTEST_KDEMAIN_CORE( recursor(argv); KProcessTest )
|
|
|
|
#include "kprocesstest.moc"
|