ssu
process.cpp
Go to the documentation of this file.
1 
8 #include "process.h"
9 
24 Process::Process() : m_expectFail(false), m_timedOut(false) {}
25 
26 QString 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 
38 bool 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 
46 QString 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 }
process.h