1 /***************************************************************************
2 testqgsdockwidget.cpp
3 ----------------------
4 Date : June 2016
5 Copyright : (C) 2016 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16
17 #include "qgstest.h"
18
19 #include "qgsdockwidget.h"
20 #include <QApplication>
21 #include <QMainWindow>
22 #include <QAction>
23 #include <QSignalSpy>
24
25 class TestQgsDockWidget: public QObject
26 {
27 Q_OBJECT
28 private slots:
29 void initTestCase(); // will be called before the first testfunction is executed.
30 void cleanupTestCase(); // will be called after the last testfunction was executed.
31 void init(); // will be called before each testfunction is executed.
32 void cleanup(); // will be called after every testfunction.
33
34 void testSignals();
35 void testUserVisible();
36 void testSetUserVisible();
37 void testToggleUserVisible();
38 void testAction();
39
40 private:
41
42 };
43
initTestCase()44 void TestQgsDockWidget::initTestCase()
45 {
46 }
47
cleanupTestCase()48 void TestQgsDockWidget::cleanupTestCase()
49 {
50 }
51
init()52 void TestQgsDockWidget::init()
53 {
54 }
55
cleanup()56 void TestQgsDockWidget::cleanup()
57 {
58 }
59
testSignals()60 void TestQgsDockWidget::testSignals()
61 {
62 QWidget *w = new QWidget();
63 QApplication::setActiveWindow( w ); //required for focus events
64 QgsDockWidget *d = new QgsDockWidget( w );
65
66 QSignalSpy spyClosedStateChanged( d, SIGNAL( closedStateChanged( bool ) ) );
67 const QSignalSpy spyClosed( d, SIGNAL( closed() ) );
68 QSignalSpy spyOpenedStateChanged( d, SIGNAL( openedStateChanged( bool ) ) );
69 const QSignalSpy spyOpened( d, SIGNAL( opened() ) );
70
71 w->show();
72
73 d->show();
74 QCOMPARE( spyClosedStateChanged.count(), 1 );
75 QCOMPARE( spyClosedStateChanged.last().at( 0 ).toBool(), false );
76 QCOMPARE( spyOpenedStateChanged.count(), 1 );
77 QCOMPARE( spyOpenedStateChanged.last().at( 0 ).toBool(), true );
78 QCOMPARE( spyClosed.count(), 0 );
79 QCOMPARE( spyOpened.count(), 1 );
80
81 d->close();
82 QCOMPARE( spyClosedStateChanged.count(), 2 );
83 QCOMPARE( spyClosedStateChanged.last().at( 0 ).toBool(), true );
84 QCOMPARE( spyOpenedStateChanged.count(), 2 );
85 QCOMPARE( spyOpenedStateChanged.last().at( 0 ).toBool(), false );
86 QCOMPARE( spyClosed.count(), 1 );
87 QCOMPARE( spyOpened.count(), 1 );
88
89 delete w;
90 }
91
testUserVisible()92 void TestQgsDockWidget::testUserVisible()
93 {
94 QgsDockWidget *w = new QgsDockWidget();
95 QVERIFY( !w->isUserVisible() );
96
97 w->show();
98 QVERIFY( w->isUserVisible() );
99
100 w->hide();
101 QVERIFY( !w->isUserVisible() );
102 delete w;
103 }
104
testSetUserVisible()105 void TestQgsDockWidget::testSetUserVisible()
106 {
107 QMainWindow *w = new QMainWindow();
108 QApplication::setActiveWindow( w ); //required for focus events
109 QgsDockWidget *d1 = new QgsDockWidget( w );
110 QgsDockWidget *d2 = new QgsDockWidget( w );
111 w->addDockWidget( Qt::RightDockWidgetArea, d1 );
112 w->addDockWidget( Qt::RightDockWidgetArea, d2 );
113 w->tabifyDockWidget( d1, d2 );
114 w->show();
115
116 QVERIFY( d2->isUserVisible() );
117 QVERIFY( !d1->isUserVisible() );
118
119 // showing dock widgets
120
121 // already visible
122 d2->setUserVisible( true );
123 QVERIFY( d2->isUserVisible() );
124 QVERIFY( d2->isVisible() );
125 QVERIFY( !d1->isUserVisible() );
126 QVERIFY( d1->isVisible() );
127
128 // visible, but hidden by other dock
129 d1->setUserVisible( true );
130 QVERIFY( !d2->isUserVisible() );
131 QVERIFY( d2->isVisible() );
132 QVERIFY( d1->isUserVisible() );
133 QVERIFY( d1->isVisible() );
134
135 // hidden
136 d2->hide();
137 d2->setUserVisible( true );
138 QVERIFY( d2->isUserVisible() );
139 QVERIFY( d2->isVisible() );
140 QVERIFY( !d1->isUserVisible() );
141 QVERIFY( d1->isVisible() );
142
143 // hiding dock widgets
144
145 // already hidden by other tab
146 d1->setUserVisible( false );
147 QVERIFY( d2->isUserVisible() );
148 QVERIFY( d2->isVisible() );
149 QVERIFY( !d1->isUserVisible() );
150 QVERIFY( d1->isVisible() );
151
152 // already hidden
153 d2->hide();
154 d1->raise(); //shouldn't be necessary outside of tests
155 QVERIFY( !d2->isUserVisible() );
156 QVERIFY( !d2->isVisible() );
157 QVERIFY( d1->isUserVisible() );
158 QVERIFY( d1->isVisible() );
159
160 d2->setUserVisible( false );
161 QVERIFY( !d2->isUserVisible() );
162 QVERIFY( !d2->isVisible() );
163 QVERIFY( d1->isUserVisible() );
164 QVERIFY( d1->isVisible() );
165
166 // setting active dock as not user visible should hide it
167 d2->show();
168 d1->raise();
169 QVERIFY( !d2->isUserVisible() );
170 QVERIFY( d2->isVisible() );
171 QVERIFY( d1->isUserVisible() );
172 QVERIFY( d1->isVisible() );
173
174 d1->setUserVisible( false );
175 QVERIFY( d2->isVisible() );
176 QVERIFY( !d1->isUserVisible() );
177 QVERIFY( !d1->isVisible() );
178
179 delete w;
180
181 }
182
testToggleUserVisible()183 void TestQgsDockWidget::testToggleUserVisible()
184 {
185 QMainWindow *w = new QMainWindow();
186 QApplication::setActiveWindow( w ); //required for focus events
187 QgsDockWidget *d1 = new QgsDockWidget( w );
188 QgsDockWidget *d2 = new QgsDockWidget( w );
189 w->addDockWidget( Qt::RightDockWidgetArea, d1 );
190 w->addDockWidget( Qt::RightDockWidgetArea, d2 );
191 w->tabifyDockWidget( d1, d2 );
192 w->show();
193
194 QVERIFY( d2->isUserVisible() );
195 QVERIFY( !d1->isUserVisible() );
196
197 d1->toggleUserVisible();
198 QVERIFY( !d2->isUserVisible() );
199 QVERIFY( d2->isVisible() );
200 QVERIFY( d1->isUserVisible() );
201 QVERIFY( d1->isVisible() );
202
203 d2->hide();
204 d2->toggleUserVisible();
205 QVERIFY( d2->isUserVisible() );
206 QVERIFY( d2->isVisible() );
207 QVERIFY( !d1->isUserVisible() );
208 QVERIFY( d1->isVisible() );
209
210 d2->hide();
211 d1->raise(); //shouldn't be necessary outside of tests
212 QVERIFY( !d2->isUserVisible() );
213 QVERIFY( !d2->isVisible() );
214 QVERIFY( d1->isUserVisible() );
215 QVERIFY( d1->isVisible() );
216
217 d1->toggleUserVisible();
218 QVERIFY( !d2->isVisible() );
219 QVERIFY( !d1->isUserVisible() );
220 QVERIFY( !d1->isVisible() );
221
222 delete w;
223
224 }
225
testAction()226 void TestQgsDockWidget::testAction()
227 {
228 QMainWindow *w = new QMainWindow();
229 QApplication::setActiveWindow( w ); //required for focus events
230 QgsDockWidget *d1 = new QgsDockWidget( w );
231 QgsDockWidget *d2 = new QgsDockWidget( w );
232 w->addDockWidget( Qt::RightDockWidgetArea, d1 );
233 w->addDockWidget( Qt::RightDockWidgetArea, d2 );
234 w->tabifyDockWidget( d1, d2 );
235 w->show();
236
237 QAction *a1 = new QAction( w );
238 QAction *a2 = new QAction( w );
239
240 QVERIFY( ! d1->toggleVisibilityAction() );
241 d1->setToggleVisibilityAction( a1 );
242 d2->setToggleVisibilityAction( a2 );
243 QVERIFY( a1->isCheckable() );
244 QVERIFY( a2->isCheckable() );
245 QCOMPARE( d1->toggleVisibilityAction(), a1 );
246 QCOMPARE( d2->toggleVisibilityAction(), a2 );
247
248 QVERIFY( d2->isUserVisible() );
249 QVERIFY( a2->isChecked() );
250 QVERIFY( !d1->isUserVisible() );
251 QVERIFY( !a1->isChecked() );
252
253 a1->setChecked( true );
254 QVERIFY( !d2->isUserVisible() );
255 QVERIFY( !a2->isChecked() );
256 QVERIFY( d1->isUserVisible() );
257 QVERIFY( a1->isChecked() );
258
259 a1->setChecked( true );
260 QVERIFY( !d2->isUserVisible() );
261 QVERIFY( !a2->isChecked() );
262 QVERIFY( d1->isUserVisible() );
263 QVERIFY( a1->isChecked() );
264
265 a2->setChecked( true );
266 QVERIFY( d2->isUserVisible() );
267 QVERIFY( a2->isChecked() );
268 QVERIFY( !d1->isUserVisible() );
269 QVERIFY( !a1->isChecked() );
270
271 d2->hide();
272 d1->raise(); //shouldn't be necessary outside of tests
273 QVERIFY( !a2->isChecked() );
274 QVERIFY( d1->isUserVisible() );
275 QVERIFY( a1->isChecked() );
276
277 a1->setChecked( false );
278 QVERIFY( !d1->isUserVisible() );
279 QVERIFY( !a1->isChecked() );
280 }
281
282 QGSTEST_MAIN( TestQgsDockWidget )
283 #include "testqgsdockwidget.moc"
284