kaboutdataapplicationdatatest.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. SPDX-FileCopyrightText: 2016 Friedrich W. H. Kossebau <kossebau@kde.org>
  3. SPDX-License-Identifier: LGPL-2.0-only
  4. */
  5. // test object
  6. #include <kaboutdata.h>
  7. // Qt
  8. #include <QObject>
  9. #include <QTest>
  10. // Separate test for reading & setting applicationData
  11. // to ensure a separate process where no other test case has
  12. // directly or indirectly called KAboutData::setApplicationData before
  13. // and thus created the global KAboutData object
  14. class KAboutDataApplicationDataTest : public QObject
  15. {
  16. Q_OBJECT
  17. private Q_SLOTS:
  18. void testInteractionWithQApplicationData();
  19. #if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
  20. void testRegisterPluginData();
  21. #endif
  22. };
  23. static const char AppName[] = "app";
  24. static const char ProgramName[] = "ProgramName";
  25. static const char Version[] = "Version";
  26. static const char OrganizationDomain[] = "no.where";
  27. static const char DesktopFileName[] = "org.kde.someapp";
  28. static const char AppName2[] = "otherapp";
  29. static const char ProgramName2[] = "OtherProgramName";
  30. static const char Version2[] = "OtherVersion";
  31. static const char OrganizationDomain2[] = "other.no.where";
  32. static const char DesktopFileName2[] = "org.kde.otherapp";
  33. void KAboutDataApplicationDataTest::testInteractionWithQApplicationData()
  34. {
  35. // init the app metadata the Qt way
  36. QCoreApplication *app = QCoreApplication::instance();
  37. app->setApplicationName(QLatin1String(AppName));
  38. app->setProperty("applicationDisplayName", QLatin1String(ProgramName));
  39. app->setApplicationVersion(QLatin1String(Version));
  40. app->setOrganizationDomain(QLatin1String(OrganizationDomain));
  41. app->setProperty("desktopFileName", QLatin1String(DesktopFileName));
  42. // without setting before, get KAboutData::applicationData
  43. const KAboutData applicationAboutData = KAboutData::applicationData();
  44. // should be initialized with Q*Application metadata
  45. QCOMPARE(applicationAboutData.componentName(), QLatin1String(AppName));
  46. QCOMPARE(applicationAboutData.displayName(), QLatin1String(ProgramName));
  47. QCOMPARE(applicationAboutData.organizationDomain(), QLatin1String(OrganizationDomain));
  48. QCOMPARE(applicationAboutData.version(), QLatin1String(Version));
  49. QCOMPARE(applicationAboutData.desktopFileName(), QLatin1String(DesktopFileName));
  50. // now set some new KAboutData, with different values
  51. KAboutData aboutData2(QString::fromLatin1(AppName2), QString::fromLatin1(ProgramName2), QString::fromLatin1(Version2));
  52. aboutData2.setOrganizationDomain(OrganizationDomain2);
  53. aboutData2.setDesktopFileName(QLatin1String(DesktopFileName2));
  54. KAboutData::setApplicationData(aboutData2);
  55. // check that Q*Application metadata has been updated, as expected per API definition
  56. QCOMPARE(app->applicationName(), QLatin1String(AppName2));
  57. QCOMPARE(app->property("applicationDisplayName").toString(), QLatin1String(ProgramName2));
  58. QCOMPARE(app->organizationDomain(), QLatin1String(OrganizationDomain2));
  59. QCOMPARE(app->applicationVersion(), QLatin1String(Version2));
  60. QCOMPARE(app->property("desktopFileName").toString(), QLatin1String(DesktopFileName2));
  61. // and check as well KAboutData::applicationData itself
  62. const KAboutData applicationAboutData2 = KAboutData::applicationData();
  63. QCOMPARE(applicationAboutData2.componentName(), QLatin1String(AppName2));
  64. QCOMPARE(applicationAboutData2.displayName(), QLatin1String(ProgramName2));
  65. QCOMPARE(applicationAboutData2.organizationDomain(), QLatin1String(OrganizationDomain2));
  66. QCOMPARE(applicationAboutData2.version(), QLatin1String(Version2));
  67. QCOMPARE(applicationAboutData2.desktopFileName(), QLatin1String(DesktopFileName2));
  68. }
  69. #if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
  70. void KAboutDataApplicationDataTest::testRegisterPluginData()
  71. {
  72. for (const auto &name : {QStringLiteral("foo"), QStringLiteral("bar")}) {
  73. QVERIFY(!KAboutData::pluginData(name));
  74. KAboutData::registerPluginData(KAboutData(name));
  75. auto v1 = KAboutData::pluginData(name);
  76. QVERIFY(v1);
  77. QCOMPARE(v1->componentName(), name);
  78. // re-registering will overwrite and not trigger memory leaks (check LSAN)
  79. KAboutData::registerPluginData(KAboutData(name));
  80. // the pointer staid the same, as QHash is node based
  81. QCOMPARE(KAboutData::pluginData(name), v1);
  82. }
  83. }
  84. #endif
  85. QTEST_MAIN(KAboutDataApplicationDataTest)
  86. #include "kaboutdataapplicationdatatest.moc"