aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qquickmenu/tst_qquickmenu.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2018-04-10 17:40:07 +0200
committerMitch Curtis <mitch.curtis@qt.io>2018-09-05 14:57:22 +0000
commitd5cb26bc56a3b6f6e99c88654d4f7a65f43551ac (patch)
tree614cfe06c0cb5ae35202e7e9e57cb1170fb0eff0 /tests/auto/qquickmenu/tst_qquickmenu.cpp
parent65374a95a33a677740f6e6b25c424b4a4b466b3f (diff)
Menu: ensure the correct delegates are used when created via Component
Don't add items until we're complete, as the delegate could change in the meantime. Instead, add them to contentData and create them when we're complete. Task-number: QTBUG-67559 Change-Id: I5f42129f49de861ff5f15d0069daeda0b4e5017c Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'tests/auto/qquickmenu/tst_qquickmenu.cpp')
-rw-r--r--tests/auto/qquickmenu/tst_qquickmenu.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/auto/qquickmenu/tst_qquickmenu.cpp b/tests/auto/qquickmenu/tst_qquickmenu.cpp
index 5a676c03..adb3d7aa 100644
--- a/tests/auto/qquickmenu/tst_qquickmenu.cpp
+++ b/tests/auto/qquickmenu/tst_qquickmenu.cpp
@@ -43,6 +43,8 @@
#include <QtQml/qqmlcontext.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qquicklistview_p.h>
+#include "../shared/menuutil.h"
#include "../shared/util.h"
#include "../shared/visualtestutil.h"
@@ -86,6 +88,7 @@ private slots:
void addRemoveSubMenus();
void scrollable_data();
void scrollable();
+ void delegateFromSeparateComponent();
};
void tst_QQuickMenu::defaults()
@@ -145,6 +148,7 @@ void tst_QQuickMenu::mouse()
menu->open();
QVERIFY(menu->isVisible());
QVERIFY(window->overlay()->childItems().contains(menu->contentItem()->parentItem()));
+ waitForMenuListViewPolish(menu);
QQuickItem *firstItem = menu->itemAt(0);
QSignalSpy clickedSpy(firstItem, SIGNAL(clicked()));
@@ -268,6 +272,8 @@ void tst_QQuickMenu::contextMenuKeyboard()
QCOMPARE(visibleSpy.count(), 1);
QVERIFY(menu->isVisible());
QVERIFY(window->overlay()->childItems().contains(menu->contentItem()->parentItem()));
+ waitForMenuListViewPolish(menu);
+
QVERIFY(!firstItem->hasActiveFocus());
QVERIFY(!firstItem->property("highlighted").toBool());
QCOMPARE(menu->currentIndex(), -1);
@@ -934,6 +940,7 @@ void tst_QQuickMenu::subMenuMouse()
QVERIFY(!subMenu1->isVisible());
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
+ waitForMenuListViewPolish(mainMenu);
// open the sub-menu with mouse click
QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
@@ -944,6 +951,7 @@ void tst_QQuickMenu::subMenuMouse()
QVERIFY(subMenu1->isVisible());
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
+ waitForMenuListViewPolish(subMenu1);
// open the cascading sub-sub-menu with mouse hover
QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
@@ -954,6 +962,7 @@ void tst_QQuickMenu::subMenuMouse()
QVERIFY(subMenu1->isVisible());
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
+ QVERIFY(subSubMenu1Item->isHovered());
if (cascade)
QTRY_VERIFY(subSubMenu1->isVisible());
@@ -973,6 +982,7 @@ void tst_QQuickMenu::subMenuMouse()
QVERIFY(subMenu1->isVisible());
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
+ QVERIFY(subSubMenu1Item->isHovered());
if (cascade)
QTRY_VERIFY(subSubMenu1->isVisible());
@@ -1199,6 +1209,7 @@ void tst_QQuickMenu::subMenuPosition()
QVERIFY(!subMenu1->isVisible());
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
+ waitForMenuListViewPolish(mainMenu);
// open the sub-menu (never flips)
QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
@@ -1333,9 +1344,96 @@ void tst_QQuickMenu::scrollable()
QVERIFY(menu->isVisible());
QQuickItem *contentItem = menu->contentItem();
+ // Can only be scrollable if it exceeds the height of the window.
+ QTRY_VERIFY(contentItem->property("contentHeight").toReal() > window->height());
QCOMPARE(contentItem->property("interactive").toBool(), true);
}
+// QTBUG-67559
+// Test that Actions and MenuItems declared as children of a Menu have the
+// correct delegate when it is declared outside of the Menu as a Component.
+void tst_QQuickMenu::delegateFromSeparateComponent()
+{
+ QQuickApplicationHelper helper(this, QLatin1String("delegateFromSeparateComponent.qml"));
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ const QColor green = QColor::fromRgb(0x00ff00);
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+
+ // "Action Item 1"
+ QQuickMenuItem *actionItem1 = qobject_cast<QQuickMenuItem*>(menu->itemAt(0));
+ QVERIFY(actionItem1);
+ QCOMPARE(actionItem1->text(), QLatin1String("Action Item 1"));
+
+ QQuickItem *actionItem1Bg = actionItem1->property("background").value<QQuickItem*>();
+ QVERIFY(actionItem1Bg);
+ QCOMPARE(actionItem1Bg->property("color").value<QColor>(), green);
+
+ // "Sub-menu"
+ QQuickMenuItem *subMenuItem = qobject_cast<QQuickMenuItem*>(menu->itemAt(1));
+ QVERIFY(subMenuItem);
+ QCOMPARE(subMenuItem->text(), QLatin1String("Sub-menu"));
+
+ QQuickItem *subMenuItemBg = subMenuItem->property("background").value<QQuickItem*>();
+ QVERIFY(subMenuItemBg);
+ QCOMPARE(subMenuItemBg->property("color").value<QColor>(), green);
+
+ QQuickMenu *subMenu = subMenuItem->subMenu();
+ QVERIFY(subMenu);
+
+ // "Sub-menu Action Item 1"
+ QQuickMenuItem *subMenuActionItem1 = qobject_cast<QQuickMenuItem*>(subMenu->itemAt(0));
+ QVERIFY(subMenuActionItem1);
+ QCOMPARE(subMenuActionItem1->text(), QLatin1String("Sub-menu Action Item 1"));
+
+ QQuickItem *subMenuActionItem1Bg = subMenuActionItem1->property("background").value<QQuickItem*>();
+ QVERIFY(subMenuActionItem1Bg);
+ QCOMPARE(subMenuActionItem1Bg->property("color").value<QColor>(), green);
+
+ // "Sub-sub-menu"
+ QQuickMenuItem *subSubMenuItem = qobject_cast<QQuickMenuItem*>(subMenu->itemAt(1));
+ QVERIFY(subSubMenuItem);
+ QCOMPARE(subSubMenuItem->text(), QLatin1String("Sub-sub-menu"));
+
+ QQuickItem *subSubMenuItemBg = subSubMenuItem->property("background").value<QQuickItem*>();
+ QVERIFY(subSubMenuItemBg);
+ QCOMPARE(subSubMenuItemBg->property("color").value<QColor>(), green);
+
+ QQuickMenu *subSubMenu = subSubMenuItem->subMenu();
+ QVERIFY(subSubMenu);
+
+ // "Sub-sub-menu Action Item 1"
+ QQuickMenuItem *subSubMenuActionItem1 = qobject_cast<QQuickMenuItem*>(subSubMenu->itemAt(0));
+ QVERIFY(subSubMenuActionItem1);
+ QCOMPARE(subSubMenuActionItem1->text(), QLatin1String("Sub-sub-menu Action Item 1"));
+
+ QQuickItem *subSubMenuActionItem1Bg = subSubMenuActionItem1->property("background").value<QQuickItem*>();
+ QVERIFY(subSubMenuActionItem1Bg);
+ QCOMPARE(subSubMenuActionItem1Bg->property("color").value<QColor>(), green);
+
+ // "Sub-menu Action Item 2"
+ QQuickMenuItem *subMenuActionItem2 = qobject_cast<QQuickMenuItem*>(subMenu->itemAt(2));
+ QVERIFY(subMenuActionItem2);
+ QCOMPARE(subMenuActionItem2->text(), QLatin1String("Sub-menu Action Item 2"));
+
+ QQuickItem *subMenuActionItem2Bg = subMenuActionItem2->property("background").value<QQuickItem*>();
+ QVERIFY(subMenuActionItem2Bg);
+ QCOMPARE(subMenuActionItem2Bg->property("color").value<QColor>(), green);
+
+ // "Action Item 2"
+ QQuickMenuItem *actionItem2 = qobject_cast<QQuickMenuItem*>(menu->itemAt(2));
+ QVERIFY(actionItem2);
+ QCOMPARE(actionItem2->text(), QLatin1String("Action Item 2"));
+
+ QQuickItem *actionItem2Bg = actionItem2->property("background").value<QQuickItem*>();
+ QVERIFY(actionItem2Bg);
+ QCOMPARE(actionItem2Bg->property("color").value<QColor>(), green);
+}
+
QTEST_MAIN(tst_QQuickMenu)
#include "tst_qquickmenu.moc"