parent
0ef5903c73
commit
8059e5b686
2 changed files with 79 additions and 0 deletions
@ -0,0 +1,73 @@ |
||||
/***************************************************************************
|
||||
* Copyright (C) 2015 by Alex Richardson <arichardson.kde@gmail.com> * |
||||
* * |
||||
* This program is free software; you can redistribute it and/or modify * |
||||
* it under the terms of the GNU General Public License as published by * |
||||
* the Free Software Foundation; either version 2 of the License, or * |
||||
* (at your option) any later version. * |
||||
***************************************************************************/ |
||||
|
||||
#include <QtTest/QTest> |
||||
#include <QDirIterator> |
||||
#include <QDebug> |
||||
#include <QStringList> |
||||
#include <KPluginFactory> |
||||
#include <KPluginLoader> |
||||
|
||||
#include "../generator.h" |
||||
|
||||
class GeneratorsTest : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
private slots: |
||||
void testLoadsCorrectly(); |
||||
}; |
||||
|
||||
void GeneratorsTest::testLoadsCorrectly() |
||||
{ |
||||
QVERIFY2(QDir(GENERATORS_BUILD_DIR).exists(), GENERATORS_BUILD_DIR); |
||||
// 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; |
||||
QDirIterator it(GENERATORS_BUILD_DIR, QDir::Files | QDir::Executable, QDirIterator::Subdirectories); |
||||
while (it.hasNext()) { |
||||
it.next(); |
||||
if (QLibrary::isLibrary(it.fileName())) { |
||||
if (it.fileName().startsWith(QLatin1String("kio_"))) { |
||||
continue; // don't check kio_msits.so
|
||||
} |
||||
generatorLibs << it.fileName(); |
||||
} |
||||
} |
||||
int failures = 0; |
||||
int successful = 0; |
||||
foreach (const QString& lib, generatorLibs) { |
||||
KPluginLoader loader(lib); |
||||
QVERIFY(!loader.fileName().isEmpty()); |
||||
auto factory = loader.factory(); |
||||
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" |
||||
Loading…
Reference in new issue