diff --git a/src/testlib/qbenchmark.h b/src/testlib/qbenchmark.h
index de4f9a1..9481e91 100644
--- a/src/testlib/qbenchmark.h
+++ b/src/testlib/qbenchmark.h
@@ -70,7 +70,7 @@ template<> inline char *toString(const QLatin1String &str)
 
 template<> inline char *toString(const QByteArray &ba)
 {
-    return QTest::toHexRepresentation(ba.constData(), ba.length());
+    return QTest::toPrettyCString(ba.constData(), ba.length());
 }
 
 #ifndef QT_NO_DATESTRING
@@ -274,18 +274,37 @@ inline bool qCompare(quint32 const &t1, quint64 const &t2, const char *actual,
 }
 QT_END_NAMESPACE
 
+#ifdef QT_TESTCASE_BUILDDIR
+#  define QTEST_SET_MAIN_SOURCE_PATH  QTest::setMainSourcePath(__FILE__, QT_TESTCASE_BUILDDIR);
+#else
+#  define QTEST_SET_MAIN_SOURCE_PATH  QTest::setMainSourcePath(__FILE__);
+#endif
+
 #define QTEST_APPLESS_MAIN(TestObject) \
 int main(int argc, char *argv[]) \
 { \
     TestObject tc; \
+    QTEST_SET_MAIN_SOURCE_PATH \
     return QTest::qExec(&tc, argc, argv); \
 }
 
 #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_WIDGETS_LIB)
 
-#include <QtTest/qtest_gui.h>
+#include <QtTest/qtest_widgets.h>
 
 #ifdef QT_KEYPAD_NAVIGATION
 #  define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
@@ -294,12 +313,17 @@ int main(int argc, char *argv[]) \
 #endif
 
 #define QTEST_MAIN(TestObject) \
+QT_BEGIN_NAMESPACE \
+QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS \
+QT_END_NAMESPACE \
 int main(int argc, char *argv[]) \
 { \
     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); \
 }
 
@@ -308,11 +332,16 @@ int main(int argc, char *argv[]) \
 #include <QtTest/qtest_gui.h>
 
 #define QTEST_MAIN(TestObject) \
+QT_BEGIN_NAMESPACE \
+QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS \
+QT_END_NAMESPACE \
 int main(int argc, char *argv[]) \
 { \
     QGuiApplication app(argc, argv); \
     app.setAttribute(Qt::AA_Use96Dpi, true); \
+    QTEST_ADD_GPU_BLACKLIST_SUPPORT \
     TestObject tc; \
+    QTEST_SET_MAIN_SOURCE_PATH \
     return QTest::qExec(&tc, argc, argv); \
 }
 
@@ -324,6 +353,7 @@ int main(int argc, char *argv[]) \
     QCoreApplication app(argc, argv); \
     app.setAttribute(Qt::AA_Use96Dpi, true); \
     TestObject tc; \
+    QTEST_SET_MAIN_SOURCE_PATH \
     return QTest::qExec(&tc, argc, argv); \
 }
 
@@ -335,6 +365,7 @@ int main(int argc, char *argv[]) \
     QCoreApplication app(argc, argv); \
     app.setAttribute(Qt::AA_Use96Dpi, true); \
     TestObject tc; \
+    QTEST_SET_MAIN_SOURCE_PATH \
     return QTest::qExec(&tc, argc, argv); \
 }
 
diff --git a/src/testlib/qtest_global.h b/src/testlib/qtest_global.h
index 7bf7dbf..f57d05c 100644
--- a/src/testlib/qtest_global.h
+++ b/src/testlib/qtest_global.h
@@ -49,8 +49,72 @@
 #pragma qt_no_master_include
 #endif
 
+#include <QtWidgets/QSizePolicy>
+#include <QtCore/QMetaEnum>
+
 QT_BEGIN_NAMESPACE
 
+namespace QTest
+{
+
+//
+// QSizePolicy & friends:
+//
+
+namespace Internal
+{
+
+inline const char *toString(QSizePolicy::Policy p)
+{
+    static const QMetaEnum me = QSizePolicy::staticMetaObject.enumerator(QSizePolicy::staticMetaObject.indexOfEnumerator("Policy"));
+    return me.valueToKey(int(p));
+}
+
+inline QByteArray toString(QSizePolicy::ControlTypes ct)
+{
+    static const QMetaEnum me = QSizePolicy::staticMetaObject.enumerator(QSizePolicy::staticMetaObject.indexOfEnumerator("ControlTypes"));
+    return me.valueToKeys(int(ct));
+}
+
+inline QByteArray toString(QSizePolicy sp)
+{
+    static const char comma[] = ", ";
+    return QByteArray("QSizePolicy(")
+            + Internal::toString(sp.horizontalPolicy()) + comma
+            + Internal::toString(sp.verticalPolicy()) + comma
+            + QByteArray::number(sp.horizontalStretch()) + comma
+            + QByteArray::number(sp.verticalStretch()) + comma
+            + Internal::toString(QSizePolicy::ControlTypes(sp.controlType())) + comma
+            + "height for width: " + (sp.hasHeightForWidth() ? "yes" : "no") + comma
+            + "width for height: " + (sp.hasWidthForHeight() ? "yes" : "no") + comma
+            + (sp.retainSizeWhenHidden() ? "" : "don't " ) + "retain size when hidden"
+            + ')';
+}
+
+} // namespace Internal
+
+inline char *toString(QSizePolicy::Policy p)
+{
+    return qstrdup(Internal::toString(p));
+}
+
+inline char *toString(QSizePolicy::ControlTypes ct)
+{
+    return qstrdup(Internal::toString(ct).constData());
+}
+
+inline char *toString(QSizePolicy::ControlType ct)
+{
+    return toString(QSizePolicy::ControlTypes(ct));
+}
+
+inline char *toString(QSizePolicy sp)
+{
+    return qstrdup(Internal::toString(sp).constData());
+}
+
+} // namespace QTest
+
 QT_END_NAMESPACE
 
 #endif
diff --git a/src/testlib/qtestaccessible.h b/src/testlib/qtestaccessible.h
index fc5b0ce..f1ac625 100644
--- a/src/testlib/qtestaccessible.h
+++ b/src/testlib/qtestaccessible.h
@@ -209,6 +209,9 @@ do {\
     QTest::qFindTestData(basepath, __FILE__, __LINE__)
 #endif
 
+# define QEXTRACTTESTDATA(resourcePath) \
+    QTest::qExtractTestData(resourcePath)
+
 class QObject;
 class QTestData;
 
@@ -225,6 +228,7 @@ namespace QTest
 
 
     Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length);
+    Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, int length);
     Q_TESTLIB_EXPORT char *toPrettyUnicode(const ushort *unicode, int length);
     Q_TESTLIB_EXPORT char *toString(const char *);
     Q_TESTLIB_EXPORT char *toString(const void *);
@@ -232,6 +236,8 @@ namespace QTest
     Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = 0);
     Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments);
 
+    Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = 0);
+
     Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
                                  const char *file, int line);
     Q_TESTLIB_EXPORT void qFail(const char *statementStr, const char *file, int line);
@@ -244,6 +250,7 @@ namespace QTest
     Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern);
 #endif
 
+    Q_TESTLIB_EXPORT QString qExtractTestData(const QString &dirName);
     Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = 0, int line = 0, const char* builddir = 0);
     Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = 0, int line = 0, const char* builddir = 0);
 
@@ -282,7 +289,7 @@ namespace QTest
                         const char *file, int line)
     {
         return compare_helper(t1 == t2, "Compared values are not the same",
-                              toString<T>(t1), toString<T>(t2), actual, expected, file, line);
+                              toString(t1), toString(t2), actual, expected, file, line);
     }
 
     Q_TESTLIB_EXPORT bool qCompare(float const &t1, float const &t2,
diff --git a/src/testlib/qtestdata.h b/src/testlib/qtestdata.h
index 6c3847c..2540b74 100644
--- a/src/testlib/qtestdata.h
+++ b/src/testlib/qtestdata.h
@@ -57,6 +57,7 @@
 QT_BEGIN_NAMESPACE
 
 Q_GUI_EXPORT void qt_handleKeyEvent(QWindow *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
+Q_GUI_EXPORT bool qt_sendShortcutOverrideEvent(QObject *o, ulong timestamp, int k, Qt::KeyboardModifiers mods, const QString &text = QString(), bool autorep = false, ushort count = 1);
 
 namespace QTest
 {
@@ -170,6 +171,9 @@ namespace QTest
 
         QKeyEvent a(press ? QEvent::KeyPress : QEvent::KeyRelease, code, modifier, text, repeat);
         QSpontaneKeyEvent::setSpontaneous(&a);
+
+        if (press && qt_sendShortcutOverrideEvent(widget, a.timestamp(), code, modifier, text, repeat))
+            return;
         if (!qApp->notify(widget, &a))
             QTest::qWarn("Keyboard event not accepted by receiving widget");
     }
diff --git a/src/testlib/qtestmouse.h b/src/testlib/qtestmouse.h
index f29db92..ad6671a 100644
--- a/src/testlib/qtestmouse.h
+++ b/src/testlib/qtestmouse.h
@@ -198,7 +198,7 @@ namespace QTest
         }
         QSpontaneKeyEvent::setSpontaneous(&me);
         if (!qApp->notify(widget, &me)) {
-            static const char *mouseActionNames[] =
+            static const char *const mouseActionNames[] =
                 { "MousePress", "MouseRelease", "MouseClick", "MouseDClick", "MouseMove" };
             QString warning = QString::fromLatin1("Mouse event \"%1\" not accepted by receiving widget");
             QTest::qWarn(warning.arg(QString::fromLatin1(mouseActionNames[static_cast<int>(action)])).toLatin1().data());
diff --git a/src/testlib/qtestspontaneevent.h b/src/testlib/qtestspontaneevent.h
index 888f6c8..18c4221 100644
--- a/src/testlib/qtestspontaneevent.h
+++ b/src/testlib/qtestspontaneevent.h
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to