1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include "squishprocessbase.h"
#include <utils/link.h>
#include <optional>
namespace Squish::Internal {
class SquishRunnerProcess : public SquishProcessBase
{
Q_OBJECT
public:
enum RunnerCommand { Continue, EndRecord, Exit, Next, Pick, PrintVariables, Return, Step };
enum RunnerMode { Run, StartAut, QueryServer, Record, Inspect };
enum RunnerError { InvalidSocket, MappedAutMissing };
explicit SquishRunnerProcess(QObject *parent = nullptr);
~SquishRunnerProcess() = default;
void setupProcess(RunnerMode mode);
void setTestCasePath(const Utils::FilePath &testCasePath) { m_currentTestCasePath = testCasePath; }
void start(const Utils::CommandLine &cmdline, const Utils::Environment &env) override;
inline qint64 processId() const { return m_process.processId(); }
int autId() const { return m_autId; }
void writeCommand(RunnerCommand cmd);
void requestExpanded(const QString &variableName);
void requestListObject(const QString &value);
void requestListProperties(const QString &value);
Utils::Links setBreakpoints(const QString &scriptExtension);
bool lastRunHadLicenseIssues() const { return m_licenseIssues; }
signals:
void queryDone(const QString &output, const QString &error);
void recorderDone();
void runnerFinished();
void interrupted(const QString &fileName, int line, int column);
void localsUpdated(const QString &output);
void propertiesFetched(const QStringList &properties);
void objectPicked(const QString &output);
void updateChildren(const QString &name, const QStringList &children);
void runnerError(RunnerError error);
void autIdRetrieved();
protected:
void onDone() override;
void onErrorOutput() override;
private:
enum OutputMode { SingleLine, MultiLineChildren, MultiLineProperties };
void onStdOutput(const QString &line);
void handleMultiLineOutput(OutputMode mode);
void onInspectorOutput(const QString &line);
Utils::FilePath m_currentTestCasePath;
QStringList m_multiLineContent;
QString m_context;
OutputMode m_outputMode = SingleLine;
int m_autId = 0;
bool m_licenseIssues = false;
std::optional<RunnerMode> m_mode;
};
} // namespace Squish::Internal
|