[krita/krita/4.1] /: Make it possible for tests to access resources

Boudewijn Rempt null at kde.org
Thu Jul 26 16:06:12 BST 2018


Git commit fa130025ebbe8bf207d4d2a451eed11e6a3b346c by Boudewijn Rempt.
Committed on 26/07/2018 at 14:56.
Pushed by rempt into branch 'krita/4.1'.

Make it possible for tests to access resources

If a test needs access to the resources in the install folder, it
needs to use KISTEST_MAIN instead of QTEST_MAIN. This will set an
env variable, EXTRA_RESOURCE_DIRS, where KoREsourcePaths will then
also look.

Also remove the setReady/isReady methods for KoResourcePaths: we
don't need that. We can add resource dirs in as many places as
we want.

CCMAIL:kimageshop at kde.org

M  +3    -0    KoConfig.h.cmake
M  +5    -3    libs/image/tests/kis_painter_test.cpp
M  +1    -4    libs/ui/KisApplication.cpp
M  +73   -72   libs/widgetutils/KoResourcePaths.cpp
M  +0    -12   libs/widgetutils/KoResourcePaths.h
M  +3    -10   plugins/color/lcms2engine/LcmsEnginePlugin.cpp
M  +49   -0    sdk/tests/testutil.h

https://commits.kde.org/krita/fa130025ebbe8bf207d4d2a451eed11e6a3b346c

diff --git a/KoConfig.h.cmake b/KoConfig.h.cmake
index fbf063d758d..bd4c2de3a70 100644
--- a/KoConfig.h.cmake
+++ b/KoConfig.h.cmake
@@ -60,3 +60,6 @@
 
 /* This variable contains the path to the current build directory */
 #define KRITA_BUILD_DIR "${CMAKE_BINARY_DIR}"
+
+/* This variable contains the path to the data install dir */
+#define KRITA_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR}"
diff --git a/libs/image/tests/kis_painter_test.cpp b/libs/image/tests/kis_painter_test.cpp
index 73657c897fd..4785896ccc0 100644
--- a/libs/image/tests/kis_painter_test.cpp
+++ b/libs/image/tests/kis_painter_test.cpp
@@ -42,9 +42,11 @@
 
 void KisPainterTest::allCsApplicator(void (KisPainterTest::* funcPtr)(const KoColorSpace*cs))
 {
-    QList<const KoColorSpace*> colorsapces = KoColorSpaceRegistry::instance()->allColorSpaces(KoColorSpaceRegistry::AllColorSpaces, KoColorSpaceRegistry::OnlyDefaultProfile);
+    qDebug() << qAppName();
 
-    Q_FOREACH (const KoColorSpace* cs, colorsapces) {
+    QList<const KoColorSpace*> colorspaces = KoColorSpaceRegistry::instance()->allColorSpaces(KoColorSpaceRegistry::AllColorSpaces, KoColorSpaceRegistry::OnlyDefaultProfile);
+
+    Q_FOREACH (const KoColorSpace* cs, colorspaces) {
 
         QString csId = cs->id();
         // ALL THESE COLORSPACES ARE BROKEN: WE NEED UNITTESTS FOR COLORSPACES!
@@ -862,6 +864,6 @@ void KisPainterTest::testOptimizedCopying()
 
 }
 
-QTEST_MAIN(KisPainterTest)
+KISTEST_MAIN(KisPainterTest)
 
 
diff --git a/libs/ui/KisApplication.cpp b/libs/ui/KisApplication.cpp
index aaea1acf514..a70d9d70a0c 100644
--- a/libs/ui/KisApplication.cpp
+++ b/libs/ui/KisApplication.cpp
@@ -234,7 +234,6 @@ void KisApplication::addResourceTypes()
     // All Krita's resource types
     KoResourcePaths::addResourceType("kis_pics", "data", "/pics/");
     KoResourcePaths::addResourceType("kis_images", "data", "/images/");
-    KoResourcePaths::addResourceType("icc_profiles", "data", "/profiles/");
     KoResourcePaths::addResourceType("metadata_schema", "data", "/metadata/schemas/");
     KoResourcePaths::addResourceType("kis_brushes", "data", "/brushes/");
     KoResourcePaths::addResourceType("kis_taskset", "data", "/taskset/");
@@ -254,6 +253,7 @@ void KisApplication::addResourceTypes()
     KoResourcePaths::addResourceType("kis_shortcuts", "data", "/shortcuts/");
     KoResourcePaths::addResourceType("kis_actions", "data", "/actions");
     KoResourcePaths::addResourceType("icc_profiles", "data", "/color/icc");
+    KoResourcePaths::addResourceType("icc_profiles", "data", "/profiles/");
     KoResourcePaths::addResourceType("ko_effects", "data", "/effects/");
     KoResourcePaths::addResourceType("tags", "data", "/tags/");
     KoResourcePaths::addResourceType("templates", "data", "/templates");
@@ -290,9 +290,6 @@ void KisApplication::addResourceTypes()
     d.mkpath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/preset_icons/");
     d.mkpath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/preset_icons/tool_icons/");
     d.mkpath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/preset_icons/emblem_icons/");
-
-    // Indicate that it is now safe for users of KoResourcePaths to load resources
-    KoResourcePaths::setReady();
 }
 
 void KisApplication::loadResources()
diff --git a/libs/widgetutils/KoResourcePaths.cpp b/libs/widgetutils/KoResourcePaths.cpp
index 1ea1d30d27a..22157fd8fd7 100644
--- a/libs/widgetutils/KoResourcePaths.cpp
+++ b/libs/widgetutils/KoResourcePaths.cpp
@@ -28,7 +28,7 @@
 #include <QApplication>
 #include <QMutex>
 #include "kis_debug.h"
-#include "WidgetUtilsDebug.h"
+
 
 Q_GLOBAL_STATIC(KoResourcePaths, s_instance);
 
@@ -89,15 +89,15 @@ QString getInstallationPrefix() {
 #ifdef Q_OS_OSX
      QString appPath = qApp->applicationDirPath();
 
-     debugWidgetUtils << "1" << appPath;
+     dbgResources << "1" << appPath;
      appPath.chop(QString("MacOS/").length());
-     debugWidgetUtils << "2" << appPath;
+     dbgResources << "2" << appPath;
 
      bool makeInstall = QDir(appPath + "/../../../share/kritaplugins").exists();
      bool inBundle = QDir(appPath + "/Resources/kritaplugins").exists();
 
-     debugWidgetUtils << "3. After make install" << makeInstall;
-     debugWidgetUtils << "4. In Bundle" << inBundle;
+     dbgResources << "3. After make install" << makeInstall;
+     dbgResources << "4. In Bundle" << inBundle;
 
      QString bundlePath;
 
@@ -112,7 +112,7 @@ QString getInstallationPrefix() {
          qFatal("Cannot calculate the bundle path from the app path");
      }
 
-     debugWidgetUtils << ">>>>>>>>>>>" << bundlePath;
+     dbgResources << ">>>>>>>>>>>" << bundlePath;
      return bundlePath;
 #else
     #ifdef Q_OS_QWIN
@@ -141,8 +141,6 @@ public:
     QMutex relativesMutex;
     QMutex absolutesMutex;
 
-    bool ready = false; // Paths have been initialized
-
     QStringList aliases(const QString &type)
     {
         QStringList r;
@@ -152,12 +150,12 @@ public:
             r += relatives[type];
         }
         relativesMutex.unlock();
-        debugWidgetUtils << "\trelatives" << r;
+        dbgResources << "\trelatives" << r;
         absolutesMutex.lock();
         if (absolutes.contains(type)) {
             a += absolutes[type];
         }
-        debugWidgetUtils << "\tabsolutes" << a;
+        dbgResources << "\tabsolutes" << a;
         absolutesMutex.unlock();
 
         return r + a;
@@ -275,7 +273,7 @@ void KoResourcePaths::addResourceTypeInternal(const QString &type, const QString
     }
     d->relativesMutex.unlock();
 
-    debugWidgetUtils << "addResourceType: type" << type << "basetype" << basetype << "relativename" << relativename << "priority" << priority << d->relatives[type];
+    dbgResources << "addResourceType: type" << type << "basetype" << basetype << "relativename" << relativename << "priority" << priority << d->relatives[type];
 }
 
 void KoResourcePaths::addResourceDirInternal(const QString &type, const QString &absdir, bool priority)
@@ -299,19 +297,19 @@ void KoResourcePaths::addResourceDirInternal(const QString &type, const QString
     }
     d->absolutesMutex.unlock();
 
-    debugWidgetUtils << "addResourceDir: type" << type << "absdir" << absdir << "priority" << priority << d->absolutes[type];
+    dbgResources << "addResourceDir: type" << type << "absdir" << absdir << "priority" << priority << d->absolutes[type];
 }
 
 QString KoResourcePaths::findResourceInternal(const QString &type, const QString &fileName)
 {
     QStringList aliases = d->aliases(type);
-    debugWidgetUtils << "aliases" << aliases << getApplicationRoot();
+    dbgResources << "aliases" << aliases << getApplicationRoot();
     QString resource = QStandardPaths::locate(QStandardPaths::AppDataLocation, fileName, QStandardPaths::LocateFile);
 
     if (resource.isEmpty()) {
         Q_FOREACH (const QString &alias, aliases) {
             resource = QStandardPaths::locate(d->mapTypeToQStandardPaths(type), alias + '/' + fileName, QStandardPaths::LocateFile);
-            debugWidgetUtils << "\t1" << resource;
+            dbgResources << "\t1" << resource;
             if (QFile::exists(resource)) {
                 continue;
             }
@@ -321,7 +319,7 @@ QString KoResourcePaths::findResourceInternal(const QString &type, const QString
         QString approot = getApplicationRoot();
         Q_FOREACH (const QString &alias, aliases) {
             resource = approot + "/share/" + alias + '/' + fileName;
-            debugWidgetUtils << "\t1" << resource;
+            dbgResources << "\t1" << resource;
 
             if (QFile::exists(resource)) {
                 continue;
@@ -332,22 +330,49 @@ QString KoResourcePaths::findResourceInternal(const QString &type, const QString
         QString approot = getApplicationRoot();
         Q_FOREACH (const QString &alias, aliases) {
             resource = approot + "/share/krita/" + alias + '/' + fileName;
-            debugWidgetUtils << "\t1" << resource;
+            dbgResources << "\t1" << resource;
             if (QFile::exists(resource)) {
                 continue;
             }
         }
     }
 
-    debugWidgetUtils << "findResource: type" << type << "filename" << fileName << "resource" << resource;
+    dbgResources << "findResource: type" << type << "filename" << fileName << "resource" << resource;
     Q_ASSERT(!resource.isEmpty());
     return resource;
 }
 
+
+QStringList filesInDir(const QString &startdir, const QString & filter, bool recursive)
+{
+    dbgResources << "filesInDir: startdir" << startdir << "filter" << filter << "recursive" << recursive;
+    QStringList result;
+
+    // First the entries in this path
+    QStringList nameFilters;
+    nameFilters << filter;
+    const QStringList fileNames = QDir(startdir).entryList(nameFilters, QDir::Files | QDir::CaseSensitive, QDir::Name);
+    dbgResources << "\tFound:" << fileNames.size() << ":" << fileNames;
+    Q_FOREACH (const QString &fileName, fileNames) {
+        QString file = startdir + '/' + fileName;
+        result << file;
+    }
+
+    // And then everything underneath, if recursive is specified
+    if (recursive) {
+        const QStringList entries = QDir(startdir).entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+        Q_FOREACH (const QString &subdir, entries) {
+            dbgResources << "\tGoing to look in subdir" << subdir << "of" << startdir;
+            result << filesInDir(startdir + '/' + subdir, filter, recursive);
+        }
+    }
+    return result;
+}
+
 QStringList KoResourcePaths::findDirsInternal(const QString &type)
 {
     QStringList aliases = d->aliases(type);
-    debugWidgetUtils << type << aliases << d->mapTypeToQStandardPaths(type);
+    dbgResources << type << aliases << d->mapTypeToQStandardPaths(type);
 
     QStringList dirs;
     QStringList standardDirs =
@@ -356,17 +381,17 @@ QStringList KoResourcePaths::findDirsInternal(const QString &type)
 
     Q_FOREACH (const QString &alias, aliases) {
         QStringList aliasDirs =
-            QStandardPaths::locateAll(d->mapTypeToQStandardPaths(type), alias + '/', QStandardPaths::LocateDirectory);
+           QStandardPaths::locateAll(d->mapTypeToQStandardPaths(type), alias + '/', QStandardPaths::LocateDirectory);
         appendResources(&dirs, aliasDirs, true);
 
 #ifdef Q_OS_OSX
-        debugWidgetUtils << "MAC:" << getApplicationRoot();
+        dbgResources << "MAC:" << getApplicationRoot();
         QStringList bundlePaths;
         bundlePaths << getApplicationRoot() + "/share/krita/" + alias;
         bundlePaths << getApplicationRoot() + "/../share/krita/" + alias;
-        debugWidgetUtils << "bundlePaths" << bundlePaths;
+        dbgResources << "bundlePaths" << bundlePaths;
         appendResources(&dirs, bundlePaths, true);
-        Q_ASSERT(!dirs.isEmpty());
+       Q_ASSERT(!dirs.isEmpty());
 #endif
 
         QStringList fallbackPaths;
@@ -375,47 +400,21 @@ QStringList KoResourcePaths::findDirsInternal(const QString &type)
         appendResources(&dirs, fallbackPaths, true);
 
     }
-    debugWidgetUtils << "findDirs: type" << type << "resource" << dirs;
+    dbgResources << "findDirs: type" << type << "resource" << dirs;
     return dirs;
 }
 
 
-QStringList filesInDir(const QString &startdir, const QString & filter, bool recursive)
-{
-    debugWidgetUtils << "filesInDir: startdir" << startdir << "filter" << filter << "recursive" << recursive;
-    QStringList result;
-
-    // First the entries in this path
-    QStringList nameFilters;
-    nameFilters << filter;
-    const QStringList fileNames = QDir(startdir).entryList(nameFilters, QDir::Files | QDir::CaseSensitive, QDir::Name);
-    debugWidgetUtils << "\tFound:" << fileNames.size() << ":" << fileNames;
-    Q_FOREACH (const QString &fileName, fileNames) {
-        QString file = startdir + '/' + fileName;
-        result << file;
-    }
-
-    // And then everything underneath, if recursive is specified
-    if (recursive) {
-        const QStringList entries = QDir(startdir).entryList(QDir::Dirs | QDir::NoDotAndDotDot);
-        Q_FOREACH (const QString &subdir, entries) {
-            debugWidgetUtils << "\tGoing to look in subdir" << subdir << "of" << startdir;
-            result << filesInDir(startdir + '/' + subdir, filter, recursive);
-        }
-    }
-    return result;
-}
-
 QStringList KoResourcePaths::findAllResourcesInternal(const QString &type,
                                                       const QString &_filter,
                                                       SearchOptions options) const
 {
-    debugWidgetUtils << "=====================================================";
-    debugWidgetUtils << type << _filter << QStandardPaths::standardLocations(d->mapTypeToQStandardPaths(type));
+    dbgResources << "=====================================================";
+    dbgResources << type << _filter << QStandardPaths::standardLocations(d->mapTypeToQStandardPaths(type));
 
     bool recursive = options & KoResourcePaths::Recursive;
 
-    debugWidgetUtils << "findAllResources: type" << type << "filter" << _filter << "recursive" << recursive;
+    dbgResources << "findAllResources: type" << type << "filter" << _filter << "recursive" << recursive;
 
     QStringList aliases = d->aliases(type);
     QString filter = _filter;
@@ -424,7 +423,7 @@ QStringList KoResourcePaths::findAllResourcesInternal(const QString &type,
     if (filter.indexOf('*') > 0) {
         aliases << filter.split('*').first();
         filter = '*' + filter.split('*')[1];
-        debugWidgetUtils << "Split up alias" << aliases << "filter" << filter;
+        dbgResources << "Split up alias" << aliases << "filter" << filter;
     }
 
     QStringList resources;
@@ -432,13 +431,25 @@ QStringList KoResourcePaths::findAllResourcesInternal(const QString &type,
         QStringList standardResources =
             QStandardPaths::locateAll(d->mapTypeToQStandardPaths(type),
                                       filter, QStandardPaths::LocateFile);
+        dbgResources << "standardResources" << standardResources;
         appendResources(&resources, standardResources, true);
+        dbgResources << "1" << resources;
     }
 
-    debugWidgetUtils << "\tresources from qstandardpaths:" << resources.size();
+
+    QString extraResourceDirs = qgetenv("EXTRA_RESOURCE_DIRS");
+    dbgResources << ">>>>>>>>>>>>>>>>" << extraResourceDirs;
+    if (!extraResourceDirs.isEmpty()) {
+        Q_FOREACH(const QString &extraResourceDir, extraResourceDirs.split(':', QString::SkipEmptyParts)) {
+            appendResources(&resources, filesInDir(extraResourceDir, filter, recursive), true);
+        }
+
+    }
+
+    dbgResources << "\tresources from qstandardpaths:" << resources.size();
 
     Q_FOREACH (const QString &alias, aliases) {
-        debugWidgetUtils << "\t\talias:" << alias;
+        dbgResources << "\t\talias:" << alias;
         QStringList dirs;
 
         QFileInfo dirInfo(alias);
@@ -457,7 +468,7 @@ QStringList KoResourcePaths::findAllResourcesInternal(const QString &type,
         }
     }
 
-    debugWidgetUtils << "\tresources also from aliases:" << resources.size();
+    dbgResources << "\tresources also from aliases:" << resources.size();
 
     // if the original filter is "input/*", we only want share/input/* and share/krita/input/* here, but not
     // share/*. therefore, use _filter here instead of filter which was split into alias and "*".
@@ -468,8 +479,8 @@ QStringList KoResourcePaths::findAllResourcesInternal(const QString &type,
     prefixResources << filesInDir(getInstallationPrefix() + "share/krita/" + fi.path(), fi.fileName(), false);
     appendResources(&resources, prefixResources, true);
 
-    debugWidgetUtils << "\tresources from installation:" << resources.size();
-    debugWidgetUtils << "=====================================================";
+    dbgResources << "\tresources from installation:" << resources.size();
+    dbgResources << "=====================================================";
 
     return resources;
 }
@@ -492,7 +503,7 @@ QStringList KoResourcePaths::resourceDirsInternal(const QString &type)
         appendResources(&resourceDirs, aliasDirs, true);
     }
 
-    debugWidgetUtils << "resourceDirs: type" << type << resourceDirs;
+    dbgResources << "resourceDirs: type" << type << resourceDirs;
 
     return resourceDirs;
 }
@@ -519,7 +530,7 @@ QString KoResourcePaths::saveLocationInternal(const QString &type, const QString
     if (!d.exists() && create) {
         d.mkpath(path);
     }
-    debugWidgetUtils << "saveLocation: type" << type << "suffix" << suffix << "create" << create << "path" << path;
+    dbgResources << "saveLocation: type" << type << "suffix" << suffix << "create" << create << "path" << path;
 
     return path;
 }
@@ -537,7 +548,7 @@ QString KoResourcePaths::locateInternal(const QString &type, const QString &file
         locations << QStandardPaths::locate(d->mapTypeToQStandardPaths(type),
                                             (alias.endsWith('/') ? alias : alias + '/') + filename, QStandardPaths::LocateFile);
     }
-    debugWidgetUtils << "locate: type" << type << "filename" << filename << "locations" << locations;
+    dbgResources << "locate: type" << type << "filename" << filename << "locations" << locations;
     if (locations.size() > 0) {
         return locations.first();
     }
@@ -549,16 +560,6 @@ QString KoResourcePaths::locateInternal(const QString &type, const QString &file
 QString KoResourcePaths::locateLocalInternal(const QString &type, const QString &filename, bool createDir)
 {
     QString path = saveLocationInternal(type, "", createDir);
-    debugWidgetUtils << "locateLocal: type" << type << "filename" << filename << "CreateDir" << createDir << "path" << path;
+    dbgResources << "locateLocal: type" << type << "filename" << filename << "CreateDir" << createDir << "path" << path;
     return path + '/' + filename;
 }
-
-void KoResourcePaths::setReady()
-{
-    s_instance->d->ready = true;
-}
-
-bool KoResourcePaths::isReady()
-{
-    return s_instance->d->ready;
-}
diff --git a/libs/widgetutils/KoResourcePaths.h b/libs/widgetutils/KoResourcePaths.h
index 853ad89bbc2..5dd831396ab 100644
--- a/libs/widgetutils/KoResourcePaths.h
+++ b/libs/widgetutils/KoResourcePaths.h
@@ -219,18 +219,6 @@ public:
      **/
     static QString locateLocal(const char *type, const QString &filename, bool createDir = false);
 
-    /**
-     * Indicate that resource paths have been initialized and users
-     * of this class may expect to load resources from the proper paths.
-     */
-    static void setReady();
-
-    /**
-     * Return if resource paths have been initialized and users
-     * of this class may expect to load resources from the proper paths.
-     */
-    static bool isReady();
-
 private:
 
     void addResourceTypeInternal(const QString &type, const QString &basetype,
diff --git a/plugins/color/lcms2engine/LcmsEnginePlugin.cpp b/plugins/color/lcms2engine/LcmsEnginePlugin.cpp
index 0d572b5a560..a2df81c249b 100644
--- a/plugins/color/lcms2engine/LcmsEnginePlugin.cpp
+++ b/plugins/color/lcms2engine/LcmsEnginePlugin.cpp
@@ -81,20 +81,13 @@ void lcms2LogErrorHandlerFunction(cmsContext /*ContextID*/, cmsUInt32Number Erro
     qCritical() << "Lcms2 error: " << ErrorCode << Text;
 }
 
-K_PLUGIN_FACTORY_WITH_JSON(PluginFactory, "kolcmsengine.json",
-                           registerPlugin<LcmsEnginePlugin>();)
+K_PLUGIN_FACTORY_WITH_JSON(PluginFactory, "kolcmsengine.json", registerPlugin<LcmsEnginePlugin>();)
 
 LcmsEnginePlugin::LcmsEnginePlugin(QObject *parent, const QVariantList &)
     : QObject(parent)
 {
-    // We need all resource paths to be properly initialized via KisApplication, otherwise we will
-    // initialize this instance with lacking color profiles which will cause lookup errors later on.
-
-    KIS_ASSERT_X(KoResourcePaths::isReady() ||
-                 (QApplication::instance()->applicationName() != "krita" &&
-                  QApplication::instance()->applicationName() != "krita.exe"),
-                 "LcmsEnginePlugin::LcmsEnginePlugin", "Resource paths are not ready yet.");
-
+    KoResourcePaths::addResourceType("icc_profiles", "data", "/color/icc");
+    KoResourcePaths::addResourceType("icc_profiles", "data", "/profiles/");
 
     // Set the lmcs error reporting function
     cmsSetLogErrorHandler(&lcms2LogErrorHandlerFunction);
diff --git a/sdk/tests/testutil.h b/sdk/tests/testutil.h
index 0cc62921f82..79dfa16ee6d 100644
--- a/sdk/tests/testutil.h
+++ b/sdk/tests/testutil.h
@@ -25,6 +25,7 @@
 #include <QTime>
 #include <QDir>
 
+#include <KoConfig.h>
 #include <KoColorSpace.h>
 #include <KoColorSpaceRegistry.h>
 #include <KoColorProfile.h>
@@ -524,4 +525,52 @@ bool checkHierarchy(KisNodeSP root, const QStringList &expected);
 
 }
 
+#include <QtTest/qtestsystem.h>
+#include <set>
+
+#include <QtTest/qtestsystem.h>
+#include <set>
+
+#ifndef QT_NO_OPENGL
+#  define QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS \
+    extern Q_TESTLIB_EXPORT std::set<QByteArray> *(*qgpu_features_ptr)(const QString &); \
+    extern Q_GUI_EXPORT std::set<QByteArray> *qgpu_features(const QString &);
+#  define QTEST_ADD_GPU_BLACKLIST_SUPPORT \
+    qgpu_features_ptr = qgpu_features;
+#else
+#  define QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS
+#  define QTEST_ADD_GPU_BLACKLIST_SUPPORT
+#endif
+
+#if defined(QT_NETWORK_LIB)
+#  include <QtTest/qtest_network.h>
+#endif
+#include <QtTest/qtest_widgets.h>
+
+#ifdef QT_KEYPAD_NAVIGATION
+#  define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
+#else
+#  define QTEST_DISABLE_KEYPAD_NAVIGATION
+#endif
+
+#define KISTEST_MAIN(TestObject) \
+QT_BEGIN_NAMESPACE \
+QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS \
+QT_END_NAMESPACE \
+int main(int argc, char *argv[]) \
+{ \
+    qputenv("EXTRA_RESOURCE_DIRS", QByteArray(KRITA_INSTALL_DIR)); \
+    QApplication app(argc, argv); \
+    app.setAttribute(Qt::AA_Use96Dpi, true); \
+    QTEST_DISABLE_KEYPAD_NAVIGATION \
+    QTEST_ADD_GPU_BLACKLIST_SUPPORT \
+    TestObject tc; \
+    QTEST_SET_MAIN_SOURCE_PATH \
+    return QTest::qExec(&tc, argc, argv); \
+}
+
+
+
+
+
 #endif



More information about the kimageshop mailing list