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.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index 40327b0666..5993008c4a 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -52,6 +52,7 @@
#include <QQmlEngine>
#include "../../shared/util.h"
#include "../shared/viewtestutil.h"
+#include <QSignalSpy>
class TestItem : public QQuickItem
{
@@ -172,6 +173,8 @@ private slots:
void visualParentOwnership();
void visualParentOwnershipWindow();
+ void testSGInitializeAndInvalidate();
+
private:
enum PaintOrderOp {
@@ -1883,6 +1886,37 @@ void tst_qquickitem::visualParentOwnershipWindow()
}
}
+void tst_qquickitem::testSGInitializeAndInvalidate()
+{
+ for (int i=0; i<2; ++i) {
+ QScopedPointer<QQuickView> view(new QQuickView());
+
+ QQuickItem *item = new QQuickItem();
+
+ int expected;
+ if (i == 0) {
+ // First iteration, item has contents and should get signals
+ expected = 1;
+ item->setFlag(QQuickItem::ItemHasContents, true);
+ } else {
+ // Second iteration, item does not have content and will not get signals
+ expected = 0;
+ }
+
+ QSignalSpy initializeSpy(item, SIGNAL(sceneGraphInitialized()));
+ QSignalSpy invalidateSpy(item, SIGNAL(sceneGraphInvalidated()));
+ item->setParentItem(view->contentItem());
+ view->show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(view.data()));
+ QCOMPARE(initializeSpy.size(), expected);
+
+ delete view.take();
+ QCOMPARE(invalidateSpy.size(), expected);
+ }
+
+}
+
QTEST_MAIN(tst_qquickitem)
#include "tst_qquickitem.moc"