summaryrefslogtreecommitdiffstats
path: root/tests/auto/qmqtttopicname/tst_qmqtttopicname.cpp
blob: df2d3c5d09f1c2cf9b1a98db798dfdf986522390 (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
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
// Copyright (C) 2017 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include <QtCore/QHash>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtMqtt/QMqttTopicName>
#include <QtTest/QtTest>

class Tst_QMqttTopicName : public QObject
{
    Q_OBJECT

private Q_SLOTS:
    void checkValidity();
    void checkLevelCount();
    void checkLevels_data();
    void checkLevels();
    void usableWithQList();
    void usableWithQMap();
    void usableWithQHash();
};

void Tst_QMqttTopicName::checkValidity()
{
    QVERIFY(QMqttTopicName("a").isValid());
    QVERIFY(QMqttTopicName("/").isValid());
    QVERIFY(QMqttTopicName("a b").isValid());

    QVERIFY(!QMqttTopicName("").isValid());
    QVERIFY(!QMqttTopicName("/a/#").isValid());
    QVERIFY(!QMqttTopicName("/+/a").isValid());
    QVERIFY(!QMqttTopicName(QString(3, QChar(QChar::Null))).isValid());
}

void Tst_QMqttTopicName::checkLevelCount()
{
    QCOMPARE(QMqttTopicName("a").levelCount(), 1);
    QCOMPARE(QMqttTopicName("/").levelCount(), 2);
    QCOMPARE(QMqttTopicName("/a").levelCount(), 2);
    QCOMPARE(QMqttTopicName("a/").levelCount(), 2);
    QCOMPARE(QMqttTopicName("a/b").levelCount(), 2);
    QCOMPARE(QMqttTopicName("a/b/").levelCount(), 3);
}

void Tst_QMqttTopicName::checkLevels_data()
{
    QTest::addColumn<QMqttTopicName>("name");
    QTest::addColumn<QStringList>("levels");

    QTest::newRow("1") << QMqttTopicName("a") << QStringList{"a"};
    QTest::newRow("2") << QMqttTopicName("/") << QStringList{"", ""};
    QTest::newRow("3") << QMqttTopicName("//") << QStringList{"", "", ""};
    QTest::newRow("4") << QMqttTopicName("a/") << QStringList{"a", ""};
    QTest::newRow("5") << QMqttTopicName("/a") << QStringList{"", "a"};
    QTest::newRow("6") << QMqttTopicName("a/b") << QStringList{"a", "b"};
    QTest::newRow("7") << QMqttTopicName("a/b/") << QStringList{"a", "b", ""};
    QTest::newRow("8") << QMqttTopicName("/a/b") << QStringList{"", "a", "b"};
}

void Tst_QMqttTopicName::checkLevels()
{
    QFETCH(QMqttTopicName, name);
    QFETCH(QStringList, levels);

    QCOMPARE(name.levels(), levels);
}

void Tst_QMqttTopicName::usableWithQList()
{
    const QMqttTopicName topic{"a/b"};
    QList<QMqttTopicName> names;
    names.append(topic);
    QCOMPARE(topic, names.constFirst());
}

void Tst_QMqttTopicName::usableWithQMap()
{
    const QMqttTopicName topic{"a/b"};
    QMap<QMqttTopicName, int> names;
    names.insert(topic, 42);
    QCOMPARE(names[topic], 42);
}

void Tst_QMqttTopicName::usableWithQHash()
{
    const QMqttTopicName topic{"a/b"};
    QHash<QMqttTopicName, int> names;
    names.insert(topic, 42);
    QCOMPARE(names[topic], 42);
}

QTEST_MAIN(Tst_QMqttTopicName)

#include "tst_qmqtttopicname.moc"