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"