summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/widgets')
-rw-r--r--tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp28
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp56
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp30
3 files changed, 92 insertions, 22 deletions
diff --git a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
index 789a280e80..d76dbf6b46 100644
--- a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
+++ b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
@@ -47,13 +47,12 @@
class Widget : public QWidget
{
+ Q_OBJECT
public:
- Widget() { }
-
QList<QEvent::Type> events;
protected:
- bool event(QEvent *ev) {
+ bool event(QEvent *ev) Q_DECL_OVERRIDE {
events.append(ev->type());
return QWidget::event(ev);
}
@@ -62,19 +61,14 @@ protected:
class tst_QLabel : public QObject
{
-Q_OBJECT
-
-public:
- tst_QLabel();
- virtual ~tst_QLabel();
-
+ Q_OBJECT
-public slots:
+private Q_SLOTS:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
-private slots:
+
void getSetCheck();
void setText_data();
void setText();
@@ -143,15 +137,6 @@ void tst_QLabel::getSetCheck()
delete var3;
}
-
-tst_QLabel::tst_QLabel(): test_box(0)
-{
-}
-
-tst_QLabel::~tst_QLabel()
-{
-}
-
void tst_QLabel::initTestCase()
{
// Create the test class
@@ -164,8 +149,7 @@ void tst_QLabel::cleanupTestCase()
{
delete testWidget;
testWidget = 0;
- if (test_box)
- delete test_box;
+ delete test_box;
}
void tst_QLabel::init()
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index eaa277093c..ec46d7e625 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -94,6 +94,7 @@ private slots:
void task208001_stylesheet();
void activeSubMenuPosition();
+ void activeSubMenuPositionExec();
void task242454_sizeHint();
void task176201_clear();
void task250673_activeMultiColumnSubMenuPosition();
@@ -694,6 +695,61 @@ void tst_QMenu::activeSubMenuPosition()
#endif
}
+// QTBUG-49588, QTBUG-48396: activeSubMenuPositionExec() is the same as
+// activeSubMenuPosition(), but uses QMenu::exec(), which produces a different
+// sequence of events. Verify that the sub menu is positioned to the right of the
+// main menu.
+class SubMenuPositionExecMenu : public QMenu
+{
+ Q_OBJECT
+public:
+ SubMenuPositionExecMenu() : QMenu("Menu-Title"), m_timerId(-1), m_timerTick(0)
+ {
+ addAction("Item 1");
+ m_subMenu = addMenu("Submenu");
+ m_subAction = m_subMenu->addAction("Sub-Item1");
+ setActiveAction(m_subMenu->menuAction());
+ }
+
+protected:
+ void showEvent(QShowEvent *e) Q_DECL_OVERRIDE
+ {
+ QVERIFY(m_subMenu->isVisible());
+ QVERIFY2(m_subMenu->x() > x(),
+ (QByteArray::number(m_subMenu->x()) + ' ' + QByteArray::number(x())).constData());
+ m_timerId = startTimer(50);
+ QMenu::showEvent(e);
+ }
+
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE
+ {
+ if (e->timerId() == m_timerId) {
+ switch (m_timerTick++) {
+ case 0:
+ m_subMenu->close();
+ break;
+ case 1:
+ close();
+ break;
+ }
+ }
+ }
+
+private:
+ int m_timerId;
+ int m_timerTick;
+ QMenu *m_subMenu;
+ QAction *m_subAction;
+};
+
+void tst_QMenu::activeSubMenuPositionExec()
+{
+#ifndef Q_OS_WINCE
+ SubMenuPositionExecMenu menu;
+ menu.exec(QGuiApplication::primaryScreen()->availableGeometry().center());
+#endif // !Q_OS_WINCE
+}
+
void tst_QMenu::task242454_sizeHint()
{
QMenu menu;
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index baf60551c4..f787d73a02 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -117,6 +117,7 @@ private slots:
// void check_mouse2();
void check_altPress();
+ void check_altClosePress();
#if !defined(Q_OS_MAC) && !defined(Q_OS_WINCE)
void check_shortcutPress();
void check_menuPosition();
@@ -978,6 +979,35 @@ void tst_QMenuBar::check_altPress()
QTRY_VERIFY( ::qobject_cast<QMenuBar *>(qApp->focusWidget()) );
}
+// QTBUG-47377: Pressing 'Alt' after opening a menu by pressing 'Alt+Accelerator'
+// should close it and QMenuBar::activeAction() should be 0.
+void tst_QMenuBar::check_altClosePress()
+{
+ const QStyle *style = QApplication::style();
+ if (!style->styleHint(QStyle::SH_MenuBar_AltKeyNavigation) ) {
+ QSKIP(("This test is not supposed to work in the " + style->objectName().toLatin1()
+ + " style. Skipping.").constData());
+ }
+
+ QMainWindow w;
+ w.setWindowTitle(QTest::currentTestFunction());
+ QMenu *menuFile = w.menuBar()->addMenu(tr("&File"));
+ menuFile->addAction("Quit");
+ QMenu *menuEdit = w.menuBar()->addMenu(tr("&Edit"));
+ menuEdit->addAction("Copy");
+
+ w.show();
+ w.move(QGuiApplication::primaryScreen()->availableGeometry().center());
+ QApplication::setActiveWindow(&w);
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+
+ QTest::keyClick(&w, Qt::Key_F, Qt::AltModifier);
+ QTRY_VERIFY(menuFile->isVisible());
+ QTest::keyClick(menuFile, Qt::Key_Alt, Qt::AltModifier);
+ QTRY_VERIFY(!menuFile->isVisible());
+ QTRY_VERIFY(!w.menuBar()->activeAction());
+}
+
// Qt/Mac,WinCE does not use the native popups/menubar
#if !defined(Q_OS_MAC) && !defined(Q_OS_WINCE)
void tst_QMenuBar::check_shortcutPress()