From 8059e5b686cef4b4a8aab1f62d92255556a3ec09 Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Wed, 22 Apr 2015 13:10:03 +0100 Subject: [PATCH] Add a test to see whether generators can be loaded REVIEW: 123466 --- autotests/CMakeLists.txt | 6 +++ autotests/generatorstest.cpp | 73 ++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 autotests/generatorstest.cpp diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index f27f479ba..31f99863c 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -62,3 +62,9 @@ ecm_add_test(mainshelltest.cpp ../shell/okular_main.cpp ../shell/shellutils.cpp TEST_NAME "mainshelltest" LINK_LIBRARIES Qt5::Test KF5::Activities okularpart okularcore ) + +ecm_add_test(generatorstest.cpp + TEST_NAME "generatorstest" + LINK_LIBRARIES Qt5::Test KF5::CoreAddons okularcore +) +target_compile_definitions(generatorstest PRIVATE GENERATORS_BUILD_DIR="${CMAKE_BINARY_DIR}/generators") diff --git a/autotests/generatorstest.cpp b/autotests/generatorstest.cpp new file mode 100644 index 000000000..22b85fe33 --- /dev/null +++ b/autotests/generatorstest.cpp @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (C) 2015 by Alex Richardson * + * * + * 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 +#include +#include +#include +#include +#include + +#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(); + if (!generator) { + qWarning() << "Failed to cast" << lib << "to Okular::Generator"; + // without the necessary Q_INTERFACES() qobject_cast fails! + auto obj = factory->create(); + qDebug() << "Object is of type " << obj->metaObject()->className(); + qDebug() << "dynamic_cast:" << dynamic_cast(obj); + qDebug() << "qobject_cast:" << qobject_cast(obj); + failures++; + continue; + } + successful++; + } + qDebug() << "Successfully loaded" << successful << "generators"; + QCOMPARE(failures, 0); +} + +QTEST_MAIN(GeneratorsTest) + +#include "generatorstest.moc"