aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickitem/tst_qquickitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquickitem/tst_qquickitem.cpp')
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index f4f2374183..efe9266d0a 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -40,11 +40,13 @@
****************************************************************************/
#include <qtest.h>
+#include <qsignalspy.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickwindow.h>
#include <QtQuick/qquickview.h>
#include "private/qquickfocusscope_p.h"
+#include "private/qquickwindow_p.h"
#include "private/qquickitem_p.h"
#include <qpa/qwindowsysteminterface.h>
#include <QDebug>
@@ -156,6 +158,8 @@ private slots:
void touchEventAcceptIgnore();
void polishOutsideAnimation();
void polishOnCompleted();
+ void polishLaterWhenVisible();
+ void polishWhenOtherHidden();
void wheelEvent_data();
void wheelEvent();
@@ -1396,6 +1400,63 @@ void tst_qquickitem::polishOnCompleted()
QTRY_VERIFY(item->wasPolished);
}
+void tst_qquickitem::polishLaterWhenVisible()
+{
+ QQuickWindow window;
+ QQuickWindowPrivate *wp = QQuickWindowPrivate::get(&window);
+ window.resize(200, 200);
+ window.show();
+ QTest::qWaitForWindowExposed(&window);
+
+ TestPolishItem *item = new TestPolishItem(window.contentItem());
+ item->setSize(QSizeF(200, 100));
+ item->setVisible(false);
+ item->polish();
+
+ QVERIFY(!wp->itemsToPolish.contains(item));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(!item->wasPolished);
+
+ item->setVisible(true);
+ QVERIFY(wp->itemsToPolish.contains(item));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(item->wasPolished);
+ QVERIFY(!wp->itemsToPolish.contains(item));
+}
+
+void tst_qquickitem::polishWhenOtherHidden()
+{
+ QQuickWindow window;
+ QQuickWindowPrivate *wp = QQuickWindowPrivate::get(&window);
+ window.resize(200, 200);
+ window.show();
+ QTest::qWaitForWindowExposed(&window);
+
+ // a hidden item pending for polish...
+ TestPolishItem *hiddenItem = new TestPolishItem(window.contentItem());
+ hiddenItem->setSize(QSizeF(200, 100));
+ hiddenItem->setVisible(false);
+ hiddenItem->polish();
+
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(!hiddenItem->wasPolished);
+
+ // ...should not block a visible item from being polished
+ TestPolishItem *visibleItem = new TestPolishItem(window.contentItem());
+ visibleItem->setSize(QSizeF(200, 100));
+ visibleItem->setVisible(true);
+ visibleItem->polish();
+
+ QVERIFY(wp->itemsToPolish.contains(visibleItem));
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(visibleItem->wasPolished);
+ QVERIFY(!hiddenItem->wasPolished);
+ QVERIFY(!wp->itemsToPolish.contains(visibleItem));
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+}
+
void tst_qquickitem::wheelEvent_data()
{
QTest::addColumn<bool>("visible");