File: kaboutdataapplicationdatatest.cpp

package info (click to toggle)
kcoreaddons 5.116.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 25,660 kB
  • sloc: cpp: 23,523; xml: 3,284; sh: 34; makefile: 7
file content (106 lines) | stat: -rw-r--r-- 4,438 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
103
104
105
106
/*
    SPDX-FileCopyrightText: 2016 Friedrich W. H. Kossebau <kossebau@kde.org>

    SPDX-License-Identifier: LGPL-2.0-only
*/

// test object
#include <kaboutdata.h>
// Qt
#include <QObject>
#include <QTest>

// Separate test for reading & setting applicationData
// to ensure a separate process where no other test case has
// directly or indirectly called KAboutData::setApplicationData before
// and thus created the global KAboutData object
class KAboutDataApplicationDataTest : public QObject
{
    Q_OBJECT

private Q_SLOTS:
    void testInteractionWithQApplicationData();
#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
    void testRegisterPluginData();
#endif
};

static const char AppName[] = "app";
static const char ProgramName[] = "ProgramName";
static const char Version[] = "Version";
static const char OrganizationDomain[] = "no.where";
static const char DesktopFileName[] = "org.kde.someapp";

static const char AppName2[] = "otherapp";
static const char ProgramName2[] = "OtherProgramName";
static const char Version2[] = "OtherVersion";
static const char OrganizationDomain2[] = "other.no.where";
static const char DesktopFileName2[] = "org.kde.otherapp";

void KAboutDataApplicationDataTest::testInteractionWithQApplicationData()
{
    // init the app metadata the Qt way
    QCoreApplication *app = QCoreApplication::instance();
    app->setApplicationName(QLatin1String(AppName));
    app->setProperty("applicationDisplayName", QLatin1String(ProgramName));
    app->setApplicationVersion(QLatin1String(Version));
    app->setOrganizationDomain(QLatin1String(OrganizationDomain));
    app->setProperty("desktopFileName", QLatin1String(DesktopFileName));

    // without setting before, get KAboutData::applicationData
    const KAboutData applicationAboutData = KAboutData::applicationData();

    // should be initialized with Q*Application metadata
    QCOMPARE(applicationAboutData.componentName(), QLatin1String(AppName));
    QCOMPARE(applicationAboutData.displayName(), QLatin1String(ProgramName));
    QCOMPARE(applicationAboutData.organizationDomain(), QLatin1String(OrganizationDomain));
    QCOMPARE(applicationAboutData.version(), QLatin1String(Version));
    QCOMPARE(applicationAboutData.desktopFileName(), QLatin1String(DesktopFileName));

    // now set some new KAboutData, with different values
    KAboutData aboutData2(QString::fromLatin1(AppName2), QString::fromLatin1(ProgramName2), QString::fromLatin1(Version2));
    aboutData2.setOrganizationDomain(OrganizationDomain2);
    aboutData2.setDesktopFileName(QLatin1String(DesktopFileName2));

    KAboutData::setApplicationData(aboutData2);

    // check that Q*Application metadata has been updated, as expected per API definition
    QCOMPARE(app->applicationName(), QLatin1String(AppName2));
    QCOMPARE(app->property("applicationDisplayName").toString(), QLatin1String(ProgramName2));
    QCOMPARE(app->organizationDomain(), QLatin1String(OrganizationDomain2));
    QCOMPARE(app->applicationVersion(), QLatin1String(Version2));
    QCOMPARE(app->property("desktopFileName").toString(), QLatin1String(DesktopFileName2));

    // and check as well KAboutData::applicationData itself
    const KAboutData applicationAboutData2 = KAboutData::applicationData();

    QCOMPARE(applicationAboutData2.componentName(), QLatin1String(AppName2));
    QCOMPARE(applicationAboutData2.displayName(), QLatin1String(ProgramName2));
    QCOMPARE(applicationAboutData2.organizationDomain(), QLatin1String(OrganizationDomain2));
    QCOMPARE(applicationAboutData2.version(), QLatin1String(Version2));
    QCOMPARE(applicationAboutData2.desktopFileName(), QLatin1String(DesktopFileName2));
}

#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
void KAboutDataApplicationDataTest::testRegisterPluginData()
{
    for (const auto &name : {QStringLiteral("foo"), QStringLiteral("bar")}) {
        QVERIFY(!KAboutData::pluginData(name));
        KAboutData::registerPluginData(KAboutData(name));

        auto v1 = KAboutData::pluginData(name);
        QVERIFY(v1);
        QCOMPARE(v1->componentName(), name);

        // re-registering will overwrite and not trigger memory leaks (check LSAN)
        KAboutData::registerPluginData(KAboutData(name));

        // the pointer staid the same, as QHash is node based
        QCOMPARE(KAboutData::pluginData(name), v1);
    }
}
#endif

QTEST_MAIN(KAboutDataApplicationDataTest)

#include "kaboutdataapplicationdatatest.moc"