File: tst_simpletest.cpp

package info (click to toggle)
kdsingleapplication 1.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 696 kB
  • sloc: cpp: 1,107; makefile: 16
file content (102 lines) | stat: -rw-r--r-- 2,926 bytes parent folder | download | duplicates (2)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
  This file is part of KDSingleApplication.

  SPDX-FileCopyrightText: 2019 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>

  SPDX-License-Identifier: MIT

  Contact KDAB at <info@kdab.com> for commercial licensing options.
*/

#include <QtCore/QProcess>
#include <QtCore/QRandomGenerator>
#include <QtTest/QTest>


#include <vector>
#include <memory>

// runs a primary, runs a secondary, checks that a message is received.

class tst_SimpleTest : public QObject
{
    Q_OBJECT
private Q_SLOTS:
    void testSimple_data();
    void testSimple();
};

void tst_SimpleTest::testSimple_data()
{
    QTest::addColumn<QString>("message");

    QTest::addRow("message-1") << QStringLiteral("Hello");
    QTest::addRow("message-2") << QStringLiteral("Hello World");
    QTest::addRow("message-3") << QStringLiteral("Hello World 123456789");
    // QTest::addRow("message empty") << QString();

    for (int i = 1; i <= 2048; i *= 2) {
        QTest::addRow("message-x-%d", i) << QString(i, QLatin1Char('x'));
    }
}

void tst_SimpleTest::testSimple()
{
    QFETCH(QString, message);
#ifdef KDSINGLEAPPLICATION_BINARY_DIR
    const QString executable = QStringLiteral(KDSINGLEAPPLICATION_BINARY_DIR "simpletest");
#else
    const QString executable = QStringLiteral("simpletest/simpletest");
#endif
    QByteArray output;
    bool ok;

    const QString testId = QString::number(QRandomGenerator::global()->generate());

    QProcess primary;
    primary.setProcessChannelMode(QProcess::ForwardedErrorChannel);
    primary.start(executable, { testId });
    QVERIFY(primary.waitForStarted());
    QCOMPARE(primary.state(), QProcess::Running);
    output.clear();
    ok = QTest::qWaitFor([&]() {
        output += primary.readAllStandardOutput();
        return output == "Primary\n";
    });
    QVERIFY(ok);

    QProcess secondary;
    secondary.setProcessChannelMode(QProcess::ForwardedErrorChannel);
    secondary.start(executable, { testId, message });
    QVERIFY(secondary.waitForStarted());
    QCOMPARE(secondary.state(), QProcess::Running);

    output.clear();
    ok = QTest::qWaitFor([&]() {
        output += secondary.readAllStandardOutput();
        return output == "Secondary\n";
    });
    QVERIFY(ok);

    if (secondary.state() != QProcess::NotRunning)
        QVERIFY(secondary.waitForFinished());
    QCOMPARE(secondary.exitCode(), 0);
    QCOMPARE(secondary.exitStatus(), QProcess::NormalExit);

    output.clear();
    const QByteArray expected = "MESSAGE: >" + message.toUtf8() + "<\n";
    ok = QTest::qWaitFor([&]() {
        output += primary.readAllStandardOutput();
        return output == expected;
    });
    QVERIFY(ok);

    if (primary.state() != QProcess::NotRunning)
        QVERIFY(primary.waitForFinished());
    QCOMPARE(primary.exitCode(), 0);
    QCOMPARE(primary.exitStatus(), QProcess::NormalExit);
}

QTEST_MAIN(tst_SimpleTest)

#include "tst_simpletest.moc"