ssu
Loading...
Searching...
No Matches
process.cpp
Go to the documentation of this file.
1
7
8#include "process.h"
9
23
24Process::Process() : m_expectFail(false), m_timedOut(false) {}
25
26QString Process::execute(const QString &program, const QStringList &arguments,
27 bool expectedResult)
28{
29 Q_ASSERT(m_process.state() == QProcess::NotRunning);
30 m_program = program;
31 m_arguments = arguments;
32 m_expectFail = expectedResult == ExpectFail;
33 m_process.start(program, arguments);
34 m_timedOut = !m_process.waitForFinished();
35 return m_process.readAllStandardOutput();
36}
37
38bool Process::hasError()
39{
40 return m_timedOut
41 || m_process.error() != QProcess::UnknownError
42 || m_process.exitStatus() != QProcess::NormalExit
43 || (m_process.exitCode() != 0) != m_expectFail;
44}
45
46QString Process::fmtErrorMessage()
47{
48 if (!hasError()) {
49 return QString();
50 }
51
52 QStringList reasons;
53 if (m_timedOut) {
54 reasons.append("Timed out");
55 } else if (m_process.exitStatus() != QProcess::NormalExit) {
56 reasons.append("Process crashed");
57 } else if (m_expectFail && (m_process.exitCode() == 0)) {
58 reasons.append("Did not fail while it was expected to");
59 } else {
60 if (m_process.error() != QProcess::UnknownError) {
61 reasons.append(m_process.errorString());
62 }
63 const QString errorOut = m_process.readAllStandardError();
64 if (!errorOut.isEmpty()) {
65 reasons.append(errorOut);
66 }
67 }
68
69 return QString("Failed to execute `%1 %2`: %3")
70 .arg(m_program)
71 .arg(QStringList(m_arguments).replaceInStrings(QRegExp("^|$"), "\"").join(" "))
72 .arg(reasons.join(": "));
73}