tests/auto/qmenu/tst_qmenu.cpp
branchGCC_SURGE
changeset 31 5daf16870df6
parent 30 5dc02b23752f
child 33 3e2da88830cd
equal deleted inserted replaced
27:93b982ccede2 31:5daf16870df6
    49 #include <QToolButton>
    49 #include <QToolButton>
    50 #include <QStatusBar>
    50 #include <QStatusBar>
    51 #include <QListWidget>
    51 #include <QListWidget>
    52 #include <QWidgetAction>
    52 #include <QWidgetAction>
    53 #include <QDesktopWidget>
    53 #include <QDesktopWidget>
       
    54 #include <qdialog.h>
    54 
    55 
    55 #include <qmenu.h>
    56 #include <qmenu.h>
    56 #include <qstyle.h>
    57 #include <qstyle.h>
    57 #include <qdebug.h>
    58 #include <qdebug.h>
    58 
    59 
   102     void menuSizeHint();
   103     void menuSizeHint();
   103     void task258920_mouseBorder();
   104     void task258920_mouseBorder();
   104     void setFixedWidth();
   105     void setFixedWidth();
   105     void deleteActionInTriggered();
   106     void deleteActionInTriggered();
   106     void pushButtonPopulateOnAboutToShow();
   107     void pushButtonPopulateOnAboutToShow();
       
   108     void QTBUG7907_submenus_autoselect();
       
   109     void QTBUG7411_submenus_activate();
       
   110     void QTBUG_10735_crashWithDialog();
   107 protected slots:
   111 protected slots:
   108     void onActivated(QAction*);
   112     void onActivated(QAction*);
   109     void onHighlighted(QAction*);
   113     void onHighlighted(QAction*);
   110     void onStatusMessageChanged(const QString &);
   114     void onStatusMessageChanged(const QString &);
   111     void onStatusTipTimer();
   115     void onStatusTipTimer();
   928     QTimer::singleShot(300,lastMenu, SLOT(hide()));
   932     QTimer::singleShot(300,lastMenu, SLOT(hide()));
   929     QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
   933     QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
   930     QVERIFY(!lastMenu->geometry().intersects(b.geometry()));
   934     QVERIFY(!lastMenu->geometry().intersects(b.geometry()));
   931 
   935 
   932 }
   936 }
       
   937 void tst_QMenu::QTBUG7907_submenus_autoselect()
       
   938 {
       
   939     QMenu menu("Test Menu");
       
   940     QMenu set1("Setting1");
       
   941     QMenu set2("Setting2");
       
   942     QMenu subset("Subsetting");
       
   943     subset.addAction("Values");
       
   944     set1.addMenu(&subset);
       
   945     menu.addMenu(&set1);
       
   946     menu.addMenu(&set2);
       
   947     menu.show();
       
   948     QTest::qWaitForWindowShown(&menu);
       
   949     QTest::mouseClick(&menu, Qt::LeftButton, Qt::NoModifier, QPoint(5,5) );
       
   950     QTest::qWait(500);
       
   951     QVERIFY(!subset.isVisible());
       
   952 }
       
   953 
       
   954 void tst_QMenu::QTBUG7411_submenus_activate()
       
   955 {
       
   956     QMenu menu("Test Menu");
       
   957     QAction *act = menu.addAction("foo");
       
   958     QMenu sub1("&sub1");
       
   959     sub1.addAction("foo");
       
   960     sub1.setTitle("&sub1");
       
   961     QAction *act1 = menu.addMenu(&sub1);
       
   962     menu.show();
       
   963     QTest::qWaitForWindowShown(&menu);
       
   964     menu.setActiveAction(act);
       
   965     QTest::keyPress(&menu, Qt::Key_Down);
       
   966     QCOMPARE(menu.activeAction(), act1);
       
   967     QVERIFY(!sub1.isVisible());
       
   968     QTest::keyPress(&menu, Qt::Key_S);
       
   969     QTRY_VERIFY(sub1.isVisible());
       
   970 }
       
   971 
       
   972 
       
   973 
       
   974 class MyMenu : public QMenu
       
   975 {
       
   976     Q_OBJECT
       
   977 public:
       
   978     MyMenu() : m_currentIndex(0)
       
   979     {
       
   980         for (int i = 0; i < 2; ++i)
       
   981             dialogActions[i] = addAction( QString("dialog %1").arg(i), dialogs + i, SLOT(exec()));
       
   982     }
       
   983 
       
   984 
       
   985     void activateAction(int index)
       
   986     {
       
   987         m_currentIndex = index;
       
   988         popup(QPoint());
       
   989         QTest::qWaitForWindowShown(this);
       
   990         setActiveAction(dialogActions[index]);
       
   991         QTimer::singleShot(500, this, SLOT(checkVisibility()));
       
   992         QTest::keyClick(this, Qt::Key_Enter); //activation
       
   993     }
       
   994 
       
   995 public slots:
       
   996     void activateLastAction()
       
   997     {
       
   998         activateAction(1); 
       
   999     }
       
  1000 
       
  1001     void checkVisibility()
       
  1002     {
       
  1003         QTRY_VERIFY(dialogs[m_currentIndex].isVisible());
       
  1004         if (m_currentIndex == 1) {
       
  1005             QApplication::closeAllWindows(); //this is the end of the test
       
  1006         }
       
  1007     }
       
  1008 
       
  1009 
       
  1010 private:
       
  1011     QAction *dialogActions[2];
       
  1012     QDialog dialogs[2];
       
  1013     int m_currentIndex;
       
  1014 };
       
  1015 
       
  1016 void tst_QMenu::QTBUG_10735_crashWithDialog()
       
  1017 {
       
  1018     MyMenu menu;
       
  1019 
       
  1020     QTimer::singleShot(1000, &menu, SLOT(activateLastAction()));
       
  1021     menu.activateAction(0);
       
  1022  
       
  1023 }
   933 
  1024 
   934 
  1025 
   935 QTEST_MAIN(tst_QMenu)
  1026 QTEST_MAIN(tst_QMenu)
   936 #include "tst_qmenu.moc"
  1027 #include "tst_qmenu.moc"