Warning, file /graphics/okular/autotests/generatorstest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2015 Alex Richardson <arichardson.kde@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <KPluginFactory> 0008 #include <QDebug> 0009 #include <QDirIterator> 0010 #include <QLibrary> 0011 #include <QStringList> 0012 #include <QTest> 0013 0014 #include "../generator.h" 0015 0016 class GeneratorsTest : public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void testLoadsCorrectly(); 0021 }; 0022 0023 void GeneratorsTest::testLoadsCorrectly() 0024 { 0025 QCoreApplication::setLibraryPaths(QStringList()); 0026 QVERIFY2(QDir(QStringLiteral(GENERATORS_BUILD_DIR)).exists(), GENERATORS_BUILD_DIR); 0027 // find all possible generators in $CMAKE_BINARY_DIR/generators 0028 // We can't simply hardcore the list of generators since some might not be built 0029 // depending on which dependencies were found by CMake 0030 QStringList generatorLibs; 0031 QDirIterator it(QStringLiteral(GENERATORS_BUILD_DIR), QDir::Files | QDir::Executable, QDirIterator::Subdirectories); 0032 while (it.hasNext()) { 0033 it.next(); 0034 if (QLibrary::isLibrary(it.fileName())) { 0035 if (it.fileName().startsWith(QLatin1String("kio_"))) { 0036 continue; // don't check kio_msits.so 0037 } 0038 generatorLibs << it.fileInfo().absoluteFilePath(); 0039 } 0040 } 0041 int failures = 0; 0042 int successful = 0; 0043 for (const QString &lib : std::as_const(generatorLibs)) { 0044 auto factory = KPluginFactory::loadFactory(KPluginMetaData(lib)).plugin; 0045 if (!factory) { 0046 qWarning() << "Could not get KPluginFactory for" << lib; 0047 failures++; 0048 continue; 0049 } 0050 Okular::Generator *generator = factory->create<Okular::Generator>(); 0051 if (!generator) { 0052 qWarning() << "Failed to cast" << lib << "to Okular::Generator"; 0053 // without the necessary Q_INTERFACES() qobject_cast fails! 0054 auto obj = factory->create<QObject>(); 0055 qDebug() << "Object is of type " << obj->metaObject()->className(); 0056 qDebug() << "dynamic_cast:" << dynamic_cast<Okular::Generator *>(obj); 0057 qDebug() << "qobject_cast:" << qobject_cast<Okular::Generator *>(obj); 0058 failures++; 0059 continue; 0060 } 0061 successful++; 0062 } 0063 qDebug() << "Successfully loaded" << successful << "generators"; 0064 QCOMPARE(failures, 0); 0065 } 0066 0067 QTEST_MAIN(GeneratorsTest) 0068 0069 #include "generatorstest.moc"