6#include <QtCore/qprocess.h>
12using namespace Qt::StringLiterals;
16 return QStringList{ u"shell"_s } + command;
19Hdc::Hdc(QString hdcPath, QString connectKey)
20 : m_hdcPath(std::move(hdcPath)), m_connectKey(std::move(connectKey))
24QString Hdc::program()
const
29QString Hdc::connectKey()
const
34QStringList Hdc::arguments(
const QStringList &args)
const
37 if (!m_connectKey.isEmpty())
38 allArgs << u"-t"_s << m_connectKey;
39 return allArgs + args;
42QString Hdc::run(
const QStringList &args,
bool printOnFailure)
const
44 static constexpr int startTimeoutMs = 5000;
45 static constexpr int finishTimeoutMs = 30000;
48 const QStringList allArgs = arguments(args);
49 process.start(m_hdcPath, allArgs);
50 if (!process.waitForStarted(startTimeoutMs)) {
52 fprintf(stderr,
"harmonyostestrunner: failed to start hdc: %s\n",
53 qPrintable(m_hdcPath));
57 process.waitForFinished(finishTimeoutMs);
59 const QByteArray standardError = process.readAllStandardError();
60 if (!standardError.isEmpty()) {
61 fprintf(stderr,
"hdc %s stderr: %s\n", qPrintable(allArgs.join(u' ')),
62 standardError.constData());
65 return QString::fromUtf8(process.readAllStandardOutput());
68QString Hdc::shell(
const QStringList &command,
bool printOnFailure)
const
70 return run(shellCommandArgs(command), printOnFailure);
73QStringList Hdc::shellArguments(
const QStringList &command)
const
75 return arguments(shellCommandArgs(command));
static QStringList shellCommandArgs(const QStringList &command)