tests/auto/qdockwidget/tst_qdockwidget.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/tests/auto/qdockwidget/tst_qdockwidget.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/tests/auto/qdockwidget/tst_qdockwidget.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -50,6 +50,7 @@
 #include <qlineedit.h>
 #include <QDesktopWidget>
 #include <QtGui/QPainter>
+#include "private/qdockwidget_p.h"
 
 bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature)
 { return (dockwidget->features() & feature) == feature; }
@@ -86,12 +87,15 @@
     void visibilityChanged();
     void dockLocationChanged();
     void setTitleBarWidget();
+    void titleBarDoubleClick();
+    void restoreStateOfFloating();
     // task specific tests:
     void task165177_deleteFocusWidget();
     void task169808_setFloating();
     void task237438_setFloatingCrash();
     void task248604_infiniteResize();
     void task258459_visibilityChanged();
+    void taskQTBUG_1665_closableChanged();
 };
 
 // Testing get/set functions
@@ -611,6 +615,7 @@
 
     QMainWindow mw;
     QDockWidget dw;
+    dw.setObjectName("dock1");
     QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)));
 
     mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
@@ -635,6 +640,7 @@
     QCOMPARE(spy.count(), 0);
 
     QDockWidget dw2;
+    dw2.setObjectName("dock2");
     mw.addDockWidget(Qt::TopDockWidgetArea, &dw2);
     mw.tabifyDockWidget(&dw2, &dw);
     QCOMPARE(spy.count(), 1);
@@ -656,6 +662,12 @@
     QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
              Qt::TopDockWidgetArea);
     spy.clear();
+
+    QByteArray ba = mw.saveState();
+    mw.restoreState(ba);
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
+             Qt::TopDockWidgetArea);
 }
 
 void tst_QDockWidget::featuresChanged()
@@ -694,6 +706,39 @@
     QCOMPARE(w2.isVisible(), false);
 }
 
+void tst_QDockWidget::titleBarDoubleClick()
+{
+    QMainWindow win;
+    QDockWidget dock(&win);
+    win.show();
+    dock.setFloating(true);
+
+    QEvent e(QEvent::NonClientAreaMouseButtonDblClick);
+    QApplication::sendEvent(&dock, &e);
+    QVERIFY(dock.isFloating());
+    QCOMPARE(win.dockWidgetArea(&dock), Qt::NoDockWidgetArea);
+
+    win.addDockWidget(Qt::TopDockWidgetArea, &dock);
+    dock.setFloating(true);
+    QApplication::sendEvent(&dock, &e);
+    QVERIFY(!dock.isFloating());
+    QCOMPARE(win.dockWidgetArea(&dock), Qt::TopDockWidgetArea);
+}
+
+void tst_QDockWidget::restoreStateOfFloating()
+{
+    QMainWindow mw;
+    QDockWidget dock;
+    dock.setObjectName("dock1");
+    mw.addDockWidget(Qt::TopDockWidgetArea, &dock);
+    QVERIFY(!dock.isFloating());
+    QByteArray ba = mw.saveState();
+    dock.setFloating(true);
+    QVERIFY(dock.isFloating());
+    QVERIFY(mw.restoreState(ba));
+    QVERIFY(!dock.isFloating());
+}
+
 
 void tst_QDockWidget::task165177_deleteFocusWidget()
 {
@@ -815,5 +860,24 @@
     QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible
 }
 
+void tst_QDockWidget::taskQTBUG_1665_closableChanged()
+{
+    QDockWidget dock;
+    dock.show();
+    QTest::qWaitForWindowShown(&dock);
+
+    QDockWidgetLayout *l = qobject_cast<QDockWidgetLayout*>(dock.layout());
+
+    if (l && !l->nativeWindowDeco())
+        QSKIP("this machine doesn't support native dock widget", SkipAll);
+
+    QVERIFY(dock.windowFlags() & Qt::WindowCloseButtonHint);
+
+    //now let's remove the closable attribute
+    dock.setFeatures(dock.features() ^ QDockWidget::DockWidgetClosable);
+    QVERIFY(!(dock.windowFlags() & Qt::WindowCloseButtonHint));
+}
+
+
 QTEST_MAIN(tst_QDockWidget)
 #include "tst_qdockwidget.moc"