tests/auto/qdockwidget/tst_qdockwidget.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    48 #include <qdockwidget.h>
    48 #include <qdockwidget.h>
    49 #include <qmainwindow.h>
    49 #include <qmainwindow.h>
    50 #include <qlineedit.h>
    50 #include <qlineedit.h>
    51 #include <QDesktopWidget>
    51 #include <QDesktopWidget>
    52 #include <QtGui/QPainter>
    52 #include <QtGui/QPainter>
       
    53 #include "private/qdockwidget_p.h"
    53 
    54 
    54 bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature)
    55 bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature)
    55 { return (dockwidget->features() & feature) == feature; }
    56 { return (dockwidget->features() & feature) == feature; }
    56 
    57 
    57 void setFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature, bool on = true)
    58 void setFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature, bool on = true)
    84     void topLevelChanged();
    85     void topLevelChanged();
    85     void allowedAreasChanged();
    86     void allowedAreasChanged();
    86     void visibilityChanged();
    87     void visibilityChanged();
    87     void dockLocationChanged();
    88     void dockLocationChanged();
    88     void setTitleBarWidget();
    89     void setTitleBarWidget();
       
    90     void titleBarDoubleClick();
       
    91     void restoreStateOfFloating();
    89     // task specific tests:
    92     // task specific tests:
    90     void task165177_deleteFocusWidget();
    93     void task165177_deleteFocusWidget();
    91     void task169808_setFloating();
    94     void task169808_setFloating();
    92     void task237438_setFloatingCrash();
    95     void task237438_setFloatingCrash();
    93     void task248604_infiniteResize();
    96     void task248604_infiniteResize();
    94     void task258459_visibilityChanged();
    97     void task258459_visibilityChanged();
       
    98     void taskQTBUG_1665_closableChanged();
    95 };
    99 };
    96 
   100 
    97 // Testing get/set functions
   101 // Testing get/set functions
    98 void tst_QDockWidget::getSetCheck()
   102 void tst_QDockWidget::getSetCheck()
    99 {
   103 {
   609 {
   613 {
   610     qRegisterMetaType<Qt::DockWidgetArea>("Qt::DockWidgetArea");
   614     qRegisterMetaType<Qt::DockWidgetArea>("Qt::DockWidgetArea");
   611 
   615 
   612     QMainWindow mw;
   616     QMainWindow mw;
   613     QDockWidget dw;
   617     QDockWidget dw;
       
   618     dw.setObjectName("dock1");
   614     QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)));
   619     QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)));
   615 
   620 
   616     mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
   621     mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
   617     QCOMPARE(spy.count(), 1);
   622     QCOMPARE(spy.count(), 1);
   618     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   623     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   633 
   638 
   634     mw.removeDockWidget(&dw);
   639     mw.removeDockWidget(&dw);
   635     QCOMPARE(spy.count(), 0);
   640     QCOMPARE(spy.count(), 0);
   636 
   641 
   637     QDockWidget dw2;
   642     QDockWidget dw2;
       
   643     dw2.setObjectName("dock2");
   638     mw.addDockWidget(Qt::TopDockWidgetArea, &dw2);
   644     mw.addDockWidget(Qt::TopDockWidgetArea, &dw2);
   639     mw.tabifyDockWidget(&dw2, &dw);
   645     mw.tabifyDockWidget(&dw2, &dw);
   640     QCOMPARE(spy.count(), 1);
   646     QCOMPARE(spy.count(), 1);
   641     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   647     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   642                 Qt::TopDockWidgetArea);
   648                 Qt::TopDockWidgetArea);
   654     QTest::qWait(100);
   660     QTest::qWait(100);
   655     QCOMPARE(spy.count(), 1);
   661     QCOMPARE(spy.count(), 1);
   656     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   662     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
   657              Qt::TopDockWidgetArea);
   663              Qt::TopDockWidgetArea);
   658     spy.clear();
   664     spy.clear();
       
   665 
       
   666     QByteArray ba = mw.saveState();
       
   667     mw.restoreState(ba);
       
   668     QCOMPARE(spy.count(), 1);
       
   669     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
       
   670              Qt::TopDockWidgetArea);
   659 }
   671 }
   660 
   672 
   661 void tst_QDockWidget::featuresChanged()
   673 void tst_QDockWidget::featuresChanged()
   662 { DEPENDS_ON("features()"); }
   674 { DEPENDS_ON("features()"); }
   663 
   675 
   690     //tries to reset the titlebarwidget to none
   702     //tries to reset the titlebarwidget to none
   691     dock.setTitleBarWidget(0);
   703     dock.setTitleBarWidget(0);
   692     qApp->processEvents();
   704     qApp->processEvents();
   693     QCOMPARE(w.isVisible(), false);
   705     QCOMPARE(w.isVisible(), false);
   694     QCOMPARE(w2.isVisible(), false);
   706     QCOMPARE(w2.isVisible(), false);
       
   707 }
       
   708 
       
   709 void tst_QDockWidget::titleBarDoubleClick()
       
   710 {
       
   711     QMainWindow win;
       
   712     QDockWidget dock(&win);
       
   713     win.show();
       
   714     dock.setFloating(true);
       
   715 
       
   716     QEvent e(QEvent::NonClientAreaMouseButtonDblClick);
       
   717     QApplication::sendEvent(&dock, &e);
       
   718     QVERIFY(dock.isFloating());
       
   719     QCOMPARE(win.dockWidgetArea(&dock), Qt::NoDockWidgetArea);
       
   720 
       
   721     win.addDockWidget(Qt::TopDockWidgetArea, &dock);
       
   722     dock.setFloating(true);
       
   723     QApplication::sendEvent(&dock, &e);
       
   724     QVERIFY(!dock.isFloating());
       
   725     QCOMPARE(win.dockWidgetArea(&dock), Qt::TopDockWidgetArea);
       
   726 }
       
   727 
       
   728 void tst_QDockWidget::restoreStateOfFloating()
       
   729 {
       
   730     QMainWindow mw;
       
   731     QDockWidget dock;
       
   732     dock.setObjectName("dock1");
       
   733     mw.addDockWidget(Qt::TopDockWidgetArea, &dock);
       
   734     QVERIFY(!dock.isFloating());
       
   735     QByteArray ba = mw.saveState();
       
   736     dock.setFloating(true);
       
   737     QVERIFY(dock.isFloating());
       
   738     QVERIFY(mw.restoreState(ba));
       
   739     QVERIFY(!dock.isFloating());
   695 }
   740 }
   696 
   741 
   697 
   742 
   698 void tst_QDockWidget::task165177_deleteFocusWidget()
   743 void tst_QDockWidget::task165177_deleteFocusWidget()
   699 {
   744 {
   813     QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible
   858     QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible
   814     QCOMPARE(spy2.count(), 1);
   859     QCOMPARE(spy2.count(), 1);
   815     QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible
   860     QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible
   816 }
   861 }
   817 
   862 
       
   863 void tst_QDockWidget::taskQTBUG_1665_closableChanged()
       
   864 {
       
   865     QDockWidget dock;
       
   866     dock.show();
       
   867     QTest::qWaitForWindowShown(&dock);
       
   868 
       
   869     QDockWidgetLayout *l = qobject_cast<QDockWidgetLayout*>(dock.layout());
       
   870 
       
   871     if (l && !l->nativeWindowDeco())
       
   872         QSKIP("this machine doesn't support native dock widget", SkipAll);
       
   873 
       
   874     QVERIFY(dock.windowFlags() & Qt::WindowCloseButtonHint);
       
   875 
       
   876     //now let's remove the closable attribute
       
   877     dock.setFeatures(dock.features() ^ QDockWidget::DockWidgetClosable);
       
   878     QVERIFY(!(dock.windowFlags() & Qt::WindowCloseButtonHint));
       
   879 }
       
   880 
       
   881 
   818 QTEST_MAIN(tst_QDockWidget)
   882 QTEST_MAIN(tst_QDockWidget)
   819 #include "tst_qdockwidget.moc"
   883 #include "tst_qdockwidget.moc"