aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-06-16 05:28:59 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-06-21 12:14:26 +0000
commit39b4ac1e79415e8da2545a9a9002a9d674da77a1 (patch)
tree471320d784c08cb6547141c1e2af5e9eea5a3c6d /tests/auto
parent8034df8c1ebc4a73e629f6c6014078b162bdaadf (diff)
Menu: allow horizontal flip for cascading sub-menus
Allow sub-menus to open on the left side if there's more space than on the right side. This is the expected behavior on desktop. Change-Id: I915cb93e98a42bf50758d9e98fd98632e55c2cfa Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/menu/data/subMenus.qml6
-rw-r--r--tests/auto/menu/tst_menu.cpp35
2 files changed, 25 insertions, 16 deletions
diff --git a/tests/auto/menu/data/subMenus.qml b/tests/auto/menu/data/subMenus.qml
index 314e7fed..f44d211f 100644
--- a/tests/auto/menu/data/subMenus.qml
+++ b/tests/auto/menu/data/subMenus.qml
@@ -52,7 +52,7 @@ import QtQuick 2.9
import QtQuick.Controls 2.3
ApplicationWindow {
- width: 400
+ width: 600
height: 400
property alias mainMenu: mainMenu
@@ -62,19 +62,16 @@ ApplicationWindow {
Menu {
id: mainMenu
- width: 100
MenuItem { id: mainMenuItem1; text: "Main 1" }
Menu {
id: subMenu1
- width: 100
title: "Sub Menu 1"
MenuItem { id: subMenuItem1; text: "Sub 1" }
MenuItem { id: subMenuItem2; text: "Sub 2" }
Menu {
id: subSubMenu1
- width: 100
title: "Sub Sub Menu 1"
MenuItem { id: subSubMenuItem1; text: "Sub Sub 1" }
MenuItem { id: subSubMenuItem2; text: "Sub Sub 2" }
@@ -85,7 +82,6 @@ ApplicationWindow {
Menu {
id: subMenu2
- width: 100
title: "Sub Menu 2"
MenuItem { id: subMenuItem3; text: "Sub 3" }
MenuItem { id: subMenuItem4; text: "Sub 4" }
diff --git a/tests/auto/menu/tst_menu.cpp b/tests/auto/menu/tst_menu.cpp
index 79a459b8..a2975c84 100644
--- a/tests/auto/menu/tst_menu.cpp
+++ b/tests/auto/menu/tst_menu.cpp
@@ -913,24 +913,37 @@ void tst_menu::subMenuKeyboard()
void tst_menu::subMenuPosition_data()
{
QTest::addColumn<bool>("cascade");
+ QTest::addColumn<bool>("flip");
QTest::addColumn<bool>("mirrored");
QTest::addColumn<qreal>("overlap");
- QTest::newRow("cascading") << true << false << 0.0;
- QTest::newRow("cascading,overlap") << true << false << 10.0;
- QTest::newRow("cascading,mirrored") << true << true << 0.0;
- QTest::newRow("cascading,mirrored,overlap") << true << true << 10.0;
- QTest::newRow("non-cascading") << false << false << 0.0;
+ QTest::newRow("cascading") << true << false << false << 0.0;
+ QTest::newRow("cascading,flip") << true << true << false << 0.0;
+ QTest::newRow("cascading,overlap") << true << false << false << 10.0;
+ QTest::newRow("cascading,flip,overlap") << true << true << false << 10.0;
+ QTest::newRow("cascading,mirrored") << true << false << true << 0.0;
+ QTest::newRow("cascading,mirrored,flip") << true << true << true << 0.0;
+ QTest::newRow("cascading,mirrored,overlap") << true << false << true << 10.0;
+ QTest::newRow("cascading,mirrored,flip,overlap") << true << true << true << 10.0;
+ QTest::newRow("non-cascading") << false << false << false << 0.0;
}
void tst_menu::subMenuPosition()
{
QFETCH(bool, cascade);
+ QFETCH(bool, flip);
QFETCH(bool, mirrored);
QFETCH(qreal, overlap);
QQuickApplicationHelper helper(this, QLatin1String("subMenus.qml"));
QQuickApplicationWindow *window = helper.appWindow;
+
+ // the default size of the window fits three menus side by side.
+ // when testing flipping, we resize the window so that the first
+ // sub-menu fits, but the second doesn't
+ if (flip)
+ window->setWidth(window->width() - 200);
+
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
moveMouseAway(window);
@@ -966,10 +979,10 @@ void tst_menu::subMenuPosition()
subSubMenu1->setOverlap(overlap);
QCOMPARE(subSubMenu1->overlap(), overlap);
+ // choose the main menu position so that there's room for the
+ // sub-menus to cascade to the left when mirrored
if (mirrored)
- mainMenu->setPosition(QPointF(290, 10));
- else
- mainMenu->setPosition(QPointF(10, 10));
+ mainMenu->setX(window->width() - 200);
mainMenu->open();
QVERIFY(mainMenu->isVisible());
@@ -977,7 +990,7 @@ void tst_menu::subMenuPosition()
QVERIFY(!subMenu2->isVisible());
QVERIFY(!subSubMenu1->isVisible());
- // open the sub-menu
+ // open the sub-menu (never flips)
QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
QVERIFY(subMenu1Item);
QCOMPARE(subMenu1Item->subMenu(), subMenu1);
@@ -1002,7 +1015,7 @@ void tst_menu::subMenuPosition()
QCOMPARE(subMenu1->popupItem()->y(), mainMenu->popupItem()->y() + (mainMenu->height() - subMenu1->height()) / 2);
}
- // open the sub-sub-menu
+ // open the sub-sub-menu (can flip)
QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
QVERIFY(subSubMenu1Item);
QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1);
@@ -1016,7 +1029,7 @@ void tst_menu::subMenuPosition()
QCOMPARE(subSubMenu1->parentItem(), subSubMenu1Item);
// vertically aligned to the parent menu item
QCOMPARE(subSubMenu1->popupItem()->y(), subMenu1->popupItem()->y() + subSubMenu1Item->y() - subSubMenu1->topPadding());
- if (mirrored)
+ if (mirrored != flip)
QCOMPARE(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() - subSubMenu1->width() + overlap); // on the left of the parent menu
else
QCOMPARE(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() + subMenu1->width() - overlap); // on the right of the parent menu