summaryrefslogtreecommitdiff
path: root/src/plugins/squish/squishrunnerprocess.h
blob: b1c98220c1793453c81474a01d60de9f671e760b (plain)
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
// 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, PrintVariables, Return, Step };
    enum RunnerMode { Run, StartAut, QueryServer, Record };
    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);
    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 runnerError(RunnerError error);

protected:
    void onDone() override;
    void onErrorOutput() override;

private:
    void onStdOutput(const QString &line);

    Utils::FilePath m_currentTestCasePath;
    int m_autId = 0;
    bool m_licenseIssues = false;
    std::optional<RunnerMode> m_mode;
};

} // namespace Squish::Internal