diff options
Diffstat (limited to 'tests/auto/shared')
-rw-r--r-- | tests/auto/shared/util.pri | 1 | ||||
-rw-r--r-- | tests/auto/shared/visualtestutil.cpp | 41 | ||||
-rw-r--r-- | tests/auto/shared/visualtestutil.h | 2 |
3 files changed, 44 insertions, 0 deletions
diff --git a/tests/auto/shared/util.pri b/tests/auto/shared/util.pri index 77c2cc59..16f37f8a 100644 --- a/tests/auto/shared/util.pri +++ b/tests/auto/shared/util.pri @@ -7,3 +7,4 @@ SOURCES += $$PWD/visualtestutil.cpp \ $$PWD/util.cpp DEFINES += QT_QMLTEST_DATADIR=\\\"$${_PRO_FILE_PWD_}/data\\\" +DEFINES += QQC2_IMPORT_PATH=\\\"$$QQC2_SOURCE_TREE/src/imports\\\" diff --git a/tests/auto/shared/visualtestutil.cpp b/tests/auto/shared/visualtestutil.cpp index c5e69812..3eaaa588 100644 --- a/tests/auto/shared/visualtestutil.cpp +++ b/tests/auto/shared/visualtestutil.cpp @@ -40,6 +40,8 @@ #include <QtCore/QDebug> #include <QtGui/QCursor> #include <QtCore/QCoreApplication> +#include <QtQml/QQmlFile> +#include <QtTest/QTest> bool QQuickVisualTestUtil::delegateVisible(QQuickItem *item) { @@ -92,3 +94,42 @@ void QQuickVisualTestUtil::centerOnScreen(QQuickWindow *window) const QPoint offset = QPoint(window->width() / 2, window->height() / 2); window->setFramePosition(screenGeometry.center() - offset); } + +void QQuickVisualTestUtil::addTestRowForEachControl(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skiplist) +{ + // We cannot use QQmlComponent to load QML files directly from the source tree. + // For styles that use internal QML types (eg. material/Ripple.qml), the source + // dir would be added as an "implicit" import path overriding the actual import + // path (qtbase/qml/QtQuick/Controls.2/Material). => The QML engine fails to load + // the style C++ plugin from the implicit import path (the source dir). + // + // Therefore we only use the source tree for finding out the set of QML files that + // a particular style implements, and then we locate the respective QML files in + // the engine's import path. This way we can use QQmlComponent to load each QML file + // for benchmarking. + + const QFileInfoList entries = QDir(QQC2_IMPORT_PATH "/" + sourcePath).entryInfoList(QStringList("*.qml"), QDir::Files); + for (const QFileInfo &entry : entries) { + QString name = entry.baseName(); + if (!skiplist.contains(name)) { + const auto importPathList = engine->importPathList(); + for (const QString &importPath : importPathList) { + QString name = entry.dir().dirName() + "/" + entry.fileName(); + QString filePath = importPath + "/" + targetPath + "/" + entry.fileName(); + if (filePath.startsWith(":")) + filePath.prepend("qrc"); + if (QFile::exists(filePath)) { + QTest::newRow(qPrintable(name)) << QUrl::fromLocalFile(filePath); + break; + } else { + QUrl url(filePath); + filePath = QQmlFile::urlToLocalFileOrQrc(filePath); + if (!filePath.isEmpty() && QFile::exists(filePath)) { + QTest::newRow(qPrintable(name)) << url; + break; + } + } + } + } + } +} diff --git a/tests/auto/shared/visualtestutil.h b/tests/auto/shared/visualtestutil.h index a6b52fef..d5e651c5 100644 --- a/tests/auto/shared/visualtestutil.h +++ b/tests/auto/shared/visualtestutil.h @@ -136,6 +136,8 @@ namespace QQuickVisualTestUtil QQuickApplicationWindow *appWindow; QQuickWindow *window; }; + + void addTestRowForEachControl(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skiplist = QStringList()); } #define QQUICK_VERIFY_POLISH(item) \ |