aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-05-20 15:23:05 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-05-23 14:17:19 +0000
commit93cd723a4a6f479909f9ad89f67b0537874f626f (patch)
tree1e8a61c52c3c5512d00803dae3bb04b58a86bd60 /tests
parent0bd08232c5034aec06d5c6554a74c84cb79e53f6 (diff)
Make Overlay.modal and modeless Components
This way we can simply instantiate a visual overlay for each modal or dimming popup without having tricky problems with overlay's stacking order. It makes also sense to not instantiate the overlays for hidden popups. Coincidentally, this change also fixes a problem that the overlay turned out to be _always_ visible since a hidden overlay background was always instantiated no matter if there were open popups, or popups at all. Change-Id: Ieb64a72c827d0a005418027428378ebe04f41117 Task-number: QTBUG-53519 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/controls/data/tst_popup.qml114
-rw-r--r--tests/auto/popup/tst_popup.cpp28
2 files changed, 94 insertions, 48 deletions
diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml
index 20b5a551..50933c20 100644
--- a/tests/auto/controls/data/tst_popup.qml
+++ b/tests/auto/controls/data/tst_popup.qml
@@ -1013,91 +1013,121 @@ TestCase {
}
}
+ function indexOf(array, item) {
+ for (var idx = 0; idx < array.length; ++idx) {
+ if (item === array[idx])
+ return idx;
+ }
+ return -1
+ }
+
+ function findOverlay(window, popup) {
+ var item = popup.contentItem.parent
+ var idx = indexOf(window.overlay.children, item)
+ return window.overlay.children[idx - 1]
+ }
+
function test_overlay() {
var window = overlayTest.createObject(testCase)
verify(window)
window.requestActivate()
tryCompare(window, "active", true)
- compare(window.overlay.modal.opacity, 0.0)
- compare(window.overlay.modeless.opacity, 0.0)
+ compare(window.overlay.children.length, 6) // 3 drawers + 3 overlays
+
+ var firstOverlay = findOverlay(window, window.firstDrawer)
+ verify(firstOverlay)
+ compare(firstOverlay.opacity, 0.0)
+ compare(firstOverlay.z, window.firstDrawer.z)
+ compare(indexOf(window.overlay.children, firstOverlay),
+ indexOf(window.overlay.children, window.firstDrawer.contentItem.parent) - 1)
+
+ var secondOverlay = findOverlay(window, window.secondDrawer)
+ verify(secondOverlay)
+ compare(secondOverlay.opacity, 0.0)
+ compare(secondOverlay.z, window.secondDrawer.z)
+ compare(indexOf(window.overlay.children, secondOverlay),
+ indexOf(window.overlay.children, window.secondDrawer.contentItem.parent) - 1)
+
+ var upperOverlay = findOverlay(window, window.upperDrawer)
+ verify(upperOverlay)
+ compare(upperOverlay.opacity, 0.0)
+ compare(upperOverlay.z, window.upperDrawer.z)
+ compare(indexOf(window.overlay.children, upperOverlay),
+ indexOf(window.overlay.children, window.upperDrawer.contentItem.parent) - 1)
window.firstDrawer.open()
- compare(window.overlay.modal.z, 1.0)
- tryCompare(window.overlay.modal, "opacity", 1.0)
+ compare(firstOverlay.z, 1.0)
+ tryCompare(firstOverlay, "opacity", 1.0)
window.firstDrawer.close()
- tryCompare(window.overlay.modal, "opacity", 0.0)
+ tryCompare(firstOverlay, "opacity", 0.0)
+ tryCompare(window.firstDrawer, "visible", false)
window.secondDrawer.open()
- compare(window.overlay.modal.z, 1.0)
- tryCompare(window.overlay.modal, "opacity", 1.0)
+ compare(secondOverlay.z, 1.0)
+ tryCompare(secondOverlay, "opacity", 1.0)
window.secondDrawer.close()
- tryCompare(window.overlay.modal, "opacity", 0.0)
+ tryCompare(secondOverlay, "opacity", 0.0)
+ tryCompare(window.secondDrawer, "visible", false)
window.firstDrawer.open()
window.secondDrawer.open()
- compare(window.overlay.modal.z, 1.0)
- tryCompare(window.overlay.modal, "opacity", 1.0)
+ tryCompare(firstOverlay, "opacity", 1.0)
+ tryCompare(secondOverlay, "opacity", 1.0)
window.firstDrawer.close()
window.secondDrawer.close()
- tryCompare(window.overlay.modal, "opacity", 0.0)
+ tryCompare(firstOverlay, "opacity", 0.0)
+ tryCompare(secondOverlay, "opacity", 0.0)
+ var modalOverlay = findOverlay(window, window.modalPopup)
+ verify(!modalOverlay)
window.modalPopup.open()
- compare(window.overlay.modal.z, 1.0)
+ modalOverlay = findOverlay(window, window.modalPopup)
+ verify(modalOverlay)
+ compare(modalOverlay.z, window.modalPopup.z)
compare(window.modalPopup.visible, true)
- tryCompare(window.overlay.modal, "opacity", 1.0)
+ tryCompare(modalOverlay, "opacity", 1.0)
+ var modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(!modelessOverlay)
window.modelessPopup.open()
- compare(window.overlay.modeless.z, 3.0)
+ modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(modelessOverlay)
+ compare(modelessOverlay.z, window.modelessPopup.z)
compare(window.modelessPopup.visible, true)
- tryCompare(window.overlay.modeless, "opacity", 1.0)
+ tryCompare(modelessOverlay, "opacity", 1.0)
window.modelessPopup.close()
+ tryCompare(modelessOverlay, "opacity", 0.0)
tryCompare(window.modelessPopup, "visible", false)
- tryCompare(window.overlay.modeless, "opacity", 0.0)
- compare(window.overlay.modeless.z, 0.0)
+ modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(!modelessOverlay)
compare(window.modalPopup.visible, true)
- compare(window.overlay.modal.opacity, 1.0)
+ compare(modalOverlay.opacity, 1.0)
window.modalPopup.close()
+ tryCompare(modalOverlay, "opacity", 0.0)
tryCompare(window.modalPopup, "visible", false)
- tryCompare(window.overlay.modal, "opacity", 0.0)
- compare(window.overlay.modal.z, 1.0)
+ modalOverlay = findOverlay(window, window.modalPopup)
+ verify(!modalOverlay)
+ var countBefore = window.overlay.children.length
window.plainPopup.open()
tryCompare(window.plainPopup, "visible", true)
- compare(window.overlay.modal.opacity, 0.0)
- compare(window.overlay.modeless.opacity, 0.0)
+ compare(window.overlay.children.length, countBefore + 1) // only popup added, no overlays involved
window.plainPopup.close()
tryCompare(window.plainPopup, "visible", false)
- compare(window.overlay.modal.opacity, 0.0)
- compare(window.overlay.modeless.opacity, 0.0)
+ compare(window.overlay.children.length, countBefore) // only popup removed, no overlays involved
window.modalPopupWithoutDim.open()
tryCompare(window.modalPopupWithoutDim, "visible", true)
- compare(window.overlay.modal.opacity, 0.0)
- compare(window.overlay.modeless.opacity, 0.0)
+ compare(window.overlay.children.length, countBefore + 1) // only popup added, no overlays involved
window.modalPopupWithoutDim.close()
tryCompare(window.modalPopupWithoutDim, "visible", false)
- compare(window.overlay.modal.opacity, 0.0)
- compare(window.overlay.modeless.opacity, 0.0)
-
- window.upperDrawer.open()
- compare(window.overlay.modal.z, 1.0)
- tryCompare(window.overlay.modal, "opacity", 1.0)
- window.upperDrawer.close()
- tryCompare(window.overlay.modal, "opacity", 0.0)
-
- window.firstDrawer.open()
- window.upperDrawer.open()
- compare(window.overlay.modal.z, 1.0)
- tryCompare(window.overlay.modal, "opacity", 1.0)
- window.firstDrawer.close()
- window.upperDrawer.close()
- tryCompare(window.overlay.modal, "opacity", 0.0)
+ compare(window.overlay.children.length, countBefore) // only popup added, no overlays involved
window.destroy()
}
diff --git a/tests/auto/popup/tst_popup.cpp b/tests/auto/popup/tst_popup.cpp
index 97cbb474..3da32407 100644
--- a/tests/auto/popup/tst_popup.cpp
+++ b/tests/auto/popup/tst_popup.cpp
@@ -105,13 +105,11 @@ void tst_popup::overlay()
QVERIFY(overlayPressedSignal.isValid());
QVERIFY(overlayReleasedSignal.isValid());
- QTest::mousePress(window, Qt::LeftButton);
- QCOMPARE(overlayPressedSignal.count(), 1);
- QCOMPARE(overlayReleasedSignal.count(), 0);
+ QVERIFY(!overlay->isVisible()); // no popups open
- QTest::mouseRelease(window, Qt::LeftButton);
- QCOMPARE(overlayPressedSignal.count(), 1);
- QCOMPARE(overlayReleasedSignal.count(), 0); // no modal popups open
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(overlayPressedSignal.count(), 0);
+ QCOMPARE(overlayReleasedSignal.count(), 0);
QQuickPopup *popup = helper.window->property("popup").value<QQuickPopup*>();
QVERIFY(popup);
@@ -119,10 +117,27 @@ void tst_popup::overlay()
QQuickButton *button = helper.window->property("button").value<QQuickButton*>();
QVERIFY(button);
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), 1);
+ QCOMPARE(overlayReleasedSignal.count(), 0);
+
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), 1);
+ QCOMPARE(overlayReleasedSignal.count(), 0); // no modal-popups open
+
+ popup->close();
+ QVERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+
popup->setModal(true);
popup->open();
QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
QCOMPARE(overlayPressedSignal.count(), 2);
@@ -133,6 +148,7 @@ void tst_popup::overlay()
QCOMPARE(overlayReleasedSignal.count(), 1);
QVERIFY(!popup->isVisible());
+ QVERIFY(overlay->isVisible());
}
void tst_popup::windowChange()