2021-05-24 07:25:56 +00:00
|
|
|
/*
|
|
|
|
SPDX-FileCopyrightText: 2015 Alex Richardson <arichardson.kde@gmail.com>
|
|
|
|
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
*/
|
2015-04-22 12:10:03 +00:00
|
|
|
|
|
|
|
#include <KPluginFactory>
|
|
|
|
#include <QDebug>
|
|
|
|
#include <QDirIterator>
|
2023-09-11 14:47:03 +00:00
|
|
|
#include <QLibrary>
|
2015-04-22 12:10:03 +00:00
|
|
|
#include <QStringList>
|
2018-08-31 09:23:45 +00:00
|
|
|
#include <QTest>
|
2015-04-22 12:10:03 +00:00
|
|
|
|
|
|
|
#include "../generator.h"
|
|
|
|
|
|
|
|
class GeneratorsTest : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
2022-03-18 21:38:36 +00:00
|
|
|
private Q_SLOTS:
|
2015-04-22 12:10:03 +00:00
|
|
|
void testLoadsCorrectly();
|
|
|
|
};
|
|
|
|
|
|
|
|
void GeneratorsTest::testLoadsCorrectly()
|
|
|
|
{
|
2015-08-14 15:02:49 +00:00
|
|
|
QCoreApplication::setLibraryPaths(QStringList());
|
2016-07-11 20:01:10 +00:00
|
|
|
QVERIFY2(QDir(QStringLiteral(GENERATORS_BUILD_DIR)).exists(), GENERATORS_BUILD_DIR);
|
2015-04-22 12:10:03 +00:00
|
|
|
// find all possible generators in $CMAKE_BINARY_DIR/generators
|
|
|
|
// We can't simply hardcore the list of generators since some might not be built
|
|
|
|
// depending on which dependencies were found by CMake
|
|
|
|
QStringList generatorLibs;
|
2016-07-11 20:01:10 +00:00
|
|
|
QDirIterator it(QStringLiteral(GENERATORS_BUILD_DIR), QDir::Files | QDir::Executable, QDirIterator::Subdirectories);
|
2015-04-22 12:10:03 +00:00
|
|
|
while (it.hasNext()) {
|
|
|
|
it.next();
|
|
|
|
if (QLibrary::isLibrary(it.fileName())) {
|
|
|
|
if (it.fileName().startsWith(QLatin1String("kio_"))) {
|
|
|
|
continue; // don't check kio_msits.so
|
|
|
|
}
|
2015-08-14 15:02:49 +00:00
|
|
|
generatorLibs << it.fileInfo().absoluteFilePath();
|
2015-04-22 12:10:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
int failures = 0;
|
|
|
|
int successful = 0;
|
2023-12-19 08:58:22 +00:00
|
|
|
for (const QString &lib : std::as_const(generatorLibs)) {
|
2023-09-11 12:48:53 +00:00
|
|
|
auto factory = KPluginFactory::loadFactory(KPluginMetaData(lib)).plugin;
|
2015-04-22 12:10:03 +00:00
|
|
|
if (!factory) {
|
|
|
|
qWarning() << "Could not get KPluginFactory for" << lib;
|
|
|
|
failures++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
Okular::Generator *generator = factory->create<Okular::Generator>();
|
|
|
|
if (!generator) {
|
|
|
|
qWarning() << "Failed to cast" << lib << "to Okular::Generator";
|
|
|
|
// without the necessary Q_INTERFACES() qobject_cast fails!
|
|
|
|
auto obj = factory->create<QObject>();
|
|
|
|
qDebug() << "Object is of type " << obj->metaObject()->className();
|
|
|
|
qDebug() << "dynamic_cast:" << dynamic_cast<Okular::Generator *>(obj);
|
|
|
|
qDebug() << "qobject_cast:" << qobject_cast<Okular::Generator *>(obj);
|
|
|
|
failures++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
successful++;
|
|
|
|
}
|
|
|
|
qDebug() << "Successfully loaded" << successful << "generators";
|
|
|
|
QCOMPARE(failures, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
QTEST_MAIN(GeneratorsTest)
|
|
|
|
|
|
|
|
#include "generatorstest.moc"
|