Add findViewDelegateItem function to visualtestutils.h

This helper function finds an item view delegate instance at a given
index, ensuring that the view is polished and positioned at the correct
index if necessary.

Change-Id: Ib133914df723251835be3812c1d0654c07a99f14
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
Mitch Curtis 2020-11-16 17:31:19 +01:00
parent 2a65d8127d
commit a0c95852fe
29 changed files with 67 additions and 1 deletions

View File

@ -31,6 +31,7 @@ qt_internal_add_test(tst_accessibility
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_cursor
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_customization
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_focus
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_font
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_palette
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickapplicationwindow
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickcontrol
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickdrawer
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -28,6 +28,7 @@ qt_internal_add_test(tst_qquickheaderview
Qt::QuickPrivate
Qt::QuickTemplates2
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -36,6 +36,7 @@ qt_internal_add_test(tst_qquickiconimage
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -32,6 +32,7 @@ qt_internal_add_test(tst_qquickiconlabel
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickmaterialstyleconf
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickmenu
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickmenubar
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -37,6 +37,7 @@ qt_internal_add_test(tst_qquickninepatchimage
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickpopup
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -31,6 +31,7 @@ qt_internal_add_test(tst_qquickstyle
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_qquickuniversalstyleconf
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -22,6 +22,7 @@ qt_internal_add_test(tst_sanity
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
)

View File

@ -1,4 +1,4 @@
QT += testlib-private core-private gui-private qml-private quick-private quicktemplates2-private quickcontrols2 quickcontrols2-private
QT += testlib-private core-private gui-private qml-private quick-private qmltest quicktemplates2-private quickcontrols2 quickcontrols2-private
HEADERS += $$PWD/visualtestutil.h \
$$PWD/util.h \

View File

@ -96,6 +96,35 @@ void QQuickVisualTestUtil::centerOnScreen(QQuickWindow *window)
window->setFramePosition(screenGeometry.center() - offset);
}
/*!
\internal
Finds the delegate at \c index belonging to \c itemView, using the given \c flags.
If the view needs to be polished, the function will wait for it to be done before continuing,
and returns \c nullptr if the polish didn't happen.
*/
QQuickItem *QQuickVisualTestUtil::findViewDelegateItem(QQuickItemView *itemView, int index, FindViewDelegateItemFlags flags)
{
if (QQuickTest::qIsPolishScheduled(itemView)) {
if (!QQuickTest::qWaitForItemPolished(itemView)) {
qWarning() << "failed to polish" << itemView;
return nullptr;
}
}
// Do this after the polish, just in case the count changes after a polish...
if (index <= -1 || index >= itemView->count()) {
qWarning() << "index" << index << "is out of bounds for" << itemView;
return nullptr;
}
if (flags.testFlag(FindViewDelegateItemFlag::PositionViewAtIndex))
itemView->positionViewAtIndex(index, QQuickItemView::Center);
return itemView->itemAtIndex(index);
}
void QQuickVisualTestUtil::forEachControl(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skipList, QQuickVisualTestUtil::ForEachCallback callback)
{
// We cannot use QQmlComponent to load QML files directly from the source tree.

View File

@ -43,6 +43,8 @@
#include <QtQuick/QQuickItem>
#include <QtQml/QQmlExpression>
#include <QtQuick/private/qquickitem_p.h>
#include <QtQuick/private/qquickitemview_p.h>
#include <QtQuickTest/quicktest.h>
#include <QtQuickControls2/qquickstyle.h>
#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
@ -116,6 +118,15 @@ namespace QQuickVisualTestUtil
return items;
}
enum class FindViewDelegateItemFlag {
None = 0x0,
PositionViewAtIndex = 0x01
};
Q_DECLARE_FLAGS(FindViewDelegateItemFlags, FindViewDelegateItemFlag)
QQuickItem* findViewDelegateItem(QQuickItemView *itemView, int index,
FindViewDelegateItemFlags flags = FindViewDelegateItemFlag::PositionViewAtIndex);
class QQuickApplicationHelper
{
public:

View File

@ -28,6 +28,7 @@ qt_internal_add_test(tst_styleimports
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_styleimportscompiletimematerial
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_styleimportscompiletimeqmlonly
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -27,6 +27,7 @@ qt_internal_add_test(tst_translation
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
TESTDATA ${test_data}
)

View File

@ -22,6 +22,7 @@ qt_internal_add_test(tst_creationtime
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
)

View File

@ -22,6 +22,7 @@ qt_internal_add_test(tst_objectcount
Qt::QuickControls2Private
Qt::QuickPrivate
Qt::QuickTemplates2Private
Qt::QuickTest
Qt::TestPrivate
)