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"
|