Ok, the long awaited config wizard is here (at least in a very basic state). There...
[quassel.git] / src / contrib / libqxt-2007-10-24 / tests / QxtGui / unit / main.cpp
1 #include <QtTest>
2 #include <QtGui>
3 #include <QxtGui>
4
5 class TestQxtGui : public QObject
6 {
7         Q_OBJECT
8         
9 private slots:
10         void testQxtApplication();
11         
12         void testQxtCheckComboBox_data();
13         void testQxtCheckComboBox();
14
15         void testQxtConfigDialog();
16         void testQxtConfirmationMessage();
17         void testQxtDesktopWidget();
18         void testQxtDockWidget();
19         void testQxtGroupBox();
20         void testQxtItemDelegate();
21
22         void testQxtLabel();
23         
24         void testQxtListWidget_data();
25         void testQxtListWidget();
26         
27         void testQxtProgressLabel();
28         void testQxtProxyStyle();
29         void testQxtPushButton();
30         void testQxtSpanSlider();
31         void testQxtStars();
32         void testQxtStringSpinBox();
33         
34         void testQxtTableWidget_data();
35         void testQxtTableWidget();
36         
37         void testQxtTabWidget();
38         void testQxtToolTip();
39
40         void testQxtTreeWidget_data();
41         void testQxtTreeWidget();
42 };
43
44 void TestQxtGui::testQxtApplication()
45 {
46         // See: test/app
47 }
48
49 void TestQxtGui::testQxtCheckComboBox_data()
50 {
51         QTest::addColumn<QTestEventList>("popup");
52         QTest::addColumn<QTestEventList>("select");
53         QTest::addColumn<QTestEventList>("close");
54         QTest::addColumn<QStringList>("expected");
55         
56         QTestEventList popup1;
57         popup1.addKeyClick(Qt::Key_Up); // popup
58         
59         QTestEventList popup2;
60         popup2.addKeyClick(Qt::Key_Down); // popup
61         
62         QTestEventList close1;
63         close1.addKeyClick(Qt::Key_Escape); // close
64         
65         QTestEventList close2;
66         close2.addKeyClick(Qt::Key_Return); // close
67
68         QTestEventList select0;
69         QStringList result0;
70
71         QTestEventList select1;
72         select1.addKeyClick(Qt::Key_Space); // select first
73         select1.addKeyClick(Qt::Key_Down); // move to second
74         select1.addKeyClick(Qt::Key_Down); // move to third
75         select1.addKeyClick(Qt::Key_Space); // select third
76         QStringList result1 = QStringList() << "1" << "3";
77         
78         QTestEventList select2;
79         select2.addKeyClick(Qt::Key_Down); // move to second
80         select2.addKeyClick(Qt::Key_Down); // move to third
81         select2.addKeyClick(Qt::Key_Up); // move back to second
82         select2.addKeyClick(Qt::Key_Space); // select second
83         QStringList result2 = QStringList() << "2";
84         
85         QTest::newRow("-")   << popup1 << select0 << close2 << result0;
86         QTest::newRow("1,3") << popup1 << select1 << close1 << result1;
87         QTest::newRow("2")   << popup2 << select2 << close2 << result2;
88 }
89
90 void TestQxtGui::testQxtCheckComboBox()
91 {
92         QFETCH(QTestEventList, popup);
93         QFETCH(QTestEventList, select);
94         QFETCH(QTestEventList, close);
95         QFETCH(QStringList, expected);
96
97         QxtCheckComboBox combo;
98         combo.addItems(QStringList() << "1" << "2" << "3" << "4");
99
100         QSignalSpy spy(&combo, SIGNAL(checkedItemsChanged(const QStringList&)));
101         QVERIFY(spy.isValid());
102
103         popup.simulate(&combo);
104         select.simulate(combo.view());
105         close.simulate(&combo);
106
107         QCOMPARE(combo.checkedItems(), expected);
108
109         if (!combo.checkedItems().isEmpty())
110         {
111                 QVERIFY(spy.count() > 0);
112                 while (!spy.isEmpty())
113                 {
114                         QList<QVariant> arguments = spy.takeFirst();
115                         QVERIFY(arguments.at(0).type() == QVariant::StringList);
116                 }
117         }
118         else
119         {
120                 QVERIFY(spy.count() == 0);
121         }
122 }
123
124 void TestQxtGui::testQxtConfigDialog()
125 {
126         // See: test/app, demos/configdialog
127 }
128
129 void TestQxtGui::testQxtConfirmationMessage()
130 {
131         // See: test/app
132 }
133
134 void TestQxtGui::testQxtDesktopWidget()
135 {
136         // See: demos/qxtsnapshot
137         WId activeId = QxtDesktopWidget::activeWindow();
138         QString activeTitle = QxtDesktopWidget::windowTitle(activeId);
139         WId foundId = QxtDesktopWidget::findWindow(activeTitle);
140         QString foundTitle = QxtDesktopWidget::windowTitle(foundId);
141         QRect activeRect = QxtDesktopWidget::windowGeometry(activeId);
142         WId atId = QxtDesktopWidget::windowAt(activeRect.center());
143         QString atTitle = QxtDesktopWidget::windowTitle(atId);
144         QVERIFY(activeId == foundId);
145         QVERIFY(foundId == atId);
146         QVERIFY(activeTitle == foundTitle);
147         QVERIFY(foundTitle == atTitle);
148 }
149
150 void TestQxtGui::testQxtDockWidget()
151 {
152         // See: demos/dockwidgets
153 }
154
155 void TestQxtGui::testQxtGroupBox()
156 {
157         // See: test/app
158 }
159
160 void TestQxtGui::testQxtItemDelegate()
161 {
162         // See:
163         // - testQxtListWidget()
164         // - testQxtTableWidget()
165         // - testQxtTreeWidget()
166 }
167
168 void TestQxtGui::testQxtLabel()
169 {
170         QxtLabel label("Text");
171         
172         QTestEventList events;
173         events.addMouseClick(Qt::LeftButton);
174         
175         QSignalSpy clicked(&label, SIGNAL(clicked()));
176         QSignalSpy textChanged(&label, SIGNAL(textChanged(const QString&)));
177         QVERIFY(clicked.isValid());
178         QVERIFY(textChanged.isValid());
179         
180         events.simulate(&label);
181         label.setText("Changed");
182         
183         QCOMPARE(clicked.count(), 1);
184         QCOMPARE(textChanged.count(), 1);
185         
186         QList<QVariant> arguments = clicked.takeFirst();
187         QVERIFY(arguments.isEmpty());
188         
189         arguments = textChanged.takeFirst();
190         QVERIFY(arguments.at(0).toString() == "Changed");
191 }
192
193 void TestQxtGui::testQxtListWidget_data()
194 {
195         QTest::addColumn<QTestEventList>("events");
196         QTest::addColumn<int>("amount");
197         
198         QTestEventList all;
199         for (int i = 0; i < 10; ++i)
200         {
201                 all.addKeyClick(Qt::Key_Down); // select/finish edit
202                 all.addKeyClick(Qt::Key_Space); // check
203                 all.addKeyClick(Qt::Key_F2); // start edit
204         }
205         all.addKeyClick(Qt::Key_Up);
206         QTest::newRow("all checked") << all << 10;
207         
208         QTestEventList second;
209         for (int i = 0; i < 10; i += 2)
210         {
211                 second.addKeyClick(Qt::Key_Down); // select
212                 second.addKeyClick(Qt::Key_Space); // check
213                 second.addKeyClick(Qt::Key_F2); // start edit
214                 second.addKeyClick(Qt::Key_Escape); // finish edit
215         }
216         second.addKeyClick(Qt::Key_Up);
217         QTest::newRow("every second checked") << second << 5;
218         
219         QTestEventList none;
220         QTest::newRow("none checked") << none << 0;
221 }
222
223 void TestQxtGui::testQxtListWidget()
224 {
225         QFETCH(QTestEventList, events);
226         QFETCH(int, amount);
227         
228         QxtListWidget listWidget;
229         listWidget.setEditTriggers(QAbstractItemView::EditKeyPressed);
230         for (int i = 0; i < 10; ++i)
231         {
232                 QxtListWidgetItem* item = new QxtListWidgetItem(QString::number(i), &listWidget);
233                 item->setFlag(Qt::ItemIsUserCheckable);
234                 item->setFlag(Qt::ItemIsEditable);
235                 item->setCheckState(Qt::Unchecked);
236         }
237         
238         qRegisterMetaType<QListWidgetItem*>("QListWidgetItem*");
239         qRegisterMetaType<QxtListWidgetItem*>("QxtListWidgetItem*");
240         QSignalSpy editStarted(&listWidget, SIGNAL(itemEditingStarted(QListWidgetItem*)));
241         QSignalSpy editFinished(&listWidget, SIGNAL(itemEditingFinished(QListWidgetItem*)));
242         QSignalSpy checkChanged(&listWidget, SIGNAL(itemCheckStateChanged(QxtListWidgetItem*)));
243         QVERIFY(editStarted.isValid());
244         QVERIFY(editFinished.isValid());
245         QVERIFY(checkChanged.isValid());
246         
247         events.simulate(listWidget.viewport());
248         
249         QList<QListWidgetItem*> checkedItems;
250         for (int i = 0; i < 10; ++i)
251         {
252                 QListWidgetItem* item = listWidget.item(i);
253                 if (item && item->data(Qt::CheckStateRole).toInt() == Qt::Checked)
254                         checkedItems += item;
255         }
256         
257         QCOMPARE(checkChanged.count(), checkedItems.count());
258         QCOMPARE(editStarted.count(),  amount);
259         QCOMPARE(editFinished.count(), amount);
260 }
261
262 void TestQxtGui::testQxtProgressLabel()
263 {
264         // See: test/app
265 }
266
267 void TestQxtGui::testQxtProxyStyle()
268 {
269         // Nothing to test
270 }
271
272 void TestQxtGui::testQxtPushButton()
273 {
274         // See: test/app
275 }
276
277 void TestQxtGui::testQxtStars()
278 {
279         // See: test/app
280 }
281
282 void TestQxtGui::testQxtSpanSlider()
283 {
284         QxtSpanSlider slider;
285         slider.setRange(0, 99);
286         
287         QSignalSpy spanChanged(&slider, SIGNAL(spanChanged(int, int)));
288         QSignalSpy lowerChanged(&slider, SIGNAL(lowerValueChanged(int)));
289         QSignalSpy upperChanged(&slider, SIGNAL(upperValueChanged(int)));
290         QVERIFY(spanChanged.isValid());
291         QVERIFY(lowerChanged.isValid());
292         QVERIFY(upperChanged.isValid());
293         
294         // #1 setSpan() - basic change
295         slider.setSpan(4, 75);
296         QCOMPARE(slider.lowerValue(), 4);
297         QCOMPARE(slider.upperValue(), 75);
298         QCOMPARE(spanChanged.count(), 1);
299         QCOMPARE(lowerChanged.count(), 1);
300         QCOMPARE(upperChanged.count(), 1);
301         QList<QVariant> args = spanChanged.takeLast();
302         QVERIFY(args.at(0).toInt() == 4);
303         QVERIFY(args.at(1).toInt() == 75);
304         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 4);
305         QVERIFY(upperChanged.takeLast().at(0).toInt() == 75);
306         
307         // #2 setSpan() - no change
308         slider.setSpan(75, 4);
309         QCOMPARE(slider.lowerValue(), 4);
310         QCOMPARE(slider.upperValue(), 75);
311         QCOMPARE(spanChanged.count(), 0);
312         QCOMPARE(lowerChanged.count(), 0);
313         QCOMPARE(upperChanged.count(), 0);
314         
315         // #3 setSpan() - inverse span
316         slider.setSpan(66, 33);
317         QCOMPARE(slider.lowerValue(), 33);
318         QCOMPARE(slider.upperValue(), 66);
319         QCOMPARE(spanChanged.count(), 1);
320         QCOMPARE(lowerChanged.count(), 1);
321         QCOMPARE(upperChanged.count(), 1);
322         args = spanChanged.takeLast();
323         QVERIFY(args.at(0).toInt() == 33);
324         QVERIFY(args.at(1).toInt() == 66);
325         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 33);
326         QVERIFY(upperChanged.takeLast().at(0).toInt() == 66);
327         
328         // #4 setSpan() - keep span in range
329         slider.setSpan(-400, 400);
330         QCOMPARE(slider.lowerValue(), 0);
331         QCOMPARE(slider.upperValue(), 99);
332         QCOMPARE(spanChanged.count(), 1);
333         QCOMPARE(lowerChanged.count(), 1);
334         QCOMPARE(upperChanged.count(), 1);
335         args = spanChanged.takeLast();
336         QVERIFY(args.at(0).toInt() == 0);
337         QVERIFY(args.at(1).toInt() == 99);
338         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 0);
339         QVERIFY(upperChanged.takeLast().at(0).toInt() == 99);
340         
341         // #5 setLowerValue() - basic change
342         slider.setLowerValue(3);
343         QCOMPARE(slider.lowerValue(), 3);
344         QCOMPARE(slider.upperValue(), 99);
345         QCOMPARE(spanChanged.count(), 1);
346         QCOMPARE(lowerChanged.count(), 1);
347         QCOMPARE(upperChanged.count(), 0);
348         args = spanChanged.takeLast();
349         QVERIFY(args.at(0).toInt() == 3);
350         QVERIFY(args.at(1).toInt() == 99);
351         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 3);
352         
353         // #6 setLowerValue() - no change
354         slider.setLowerValue(3);
355         QCOMPARE(slider.lowerValue(), 3);
356         QCOMPARE(slider.upperValue(), 99);
357         QCOMPARE(spanChanged.count(), 0);
358         QCOMPARE(lowerChanged.count(), 0);
359         QCOMPARE(upperChanged.count(), 0);
360         
361         // #7 setLowerValue() - keep span in range
362         slider.setLowerValue(-3);
363         QCOMPARE(slider.lowerValue(), 0);
364         QCOMPARE(slider.upperValue(), 99);
365         QCOMPARE(spanChanged.count(), 1);
366         QCOMPARE(lowerChanged.count(), 1);
367         QCOMPARE(upperChanged.count(), 0);
368         args = spanChanged.takeLast();
369         QVERIFY(args.at(0).toInt() == 0);
370         QVERIFY(args.at(1).toInt() == 99);
371         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 0);
372         
373         // #8 setUpperValue() - basic change
374         slider.setUpperValue(77);
375         QCOMPARE(slider.lowerValue(), 0);
376         QCOMPARE(slider.upperValue(), 77);
377         QCOMPARE(spanChanged.count(), 1);
378         QCOMPARE(lowerChanged.count(), 0);
379         QCOMPARE(upperChanged.count(), 1);
380         args = spanChanged.takeLast();
381         QVERIFY(args.at(0).toInt() == 0);
382         QVERIFY(args.at(1).toInt() == 77);
383         QVERIFY(upperChanged.takeLast().at(0).toInt() == 77);
384         
385         // #9 setUpperValue() - no change
386         slider.setUpperValue(77);
387         QCOMPARE(slider.lowerValue(), 0);
388         QCOMPARE(slider.upperValue(), 77);
389         QCOMPARE(spanChanged.count(), 0);
390         QCOMPARE(lowerChanged.count(), 0);
391         QCOMPARE(upperChanged.count(), 0);
392         
393         // #10 setUpperValue() - keep span in range
394         slider.setUpperValue(111);
395         QCOMPARE(slider.lowerValue(), 0);
396         QCOMPARE(slider.upperValue(), 99);
397         QCOMPARE(spanChanged.count(), 1);
398         QCOMPARE(lowerChanged.count(), 0);
399         QCOMPARE(upperChanged.count(), 1);
400         args = spanChanged.takeLast();
401         QVERIFY(args.at(0).toInt() == 0);
402         QVERIFY(args.at(1).toInt() == 99);
403         QVERIFY(upperChanged.takeLast().at(0).toInt() == 99);
404         
405         // #11 setLowerValue(), setUpperValue() - inverse span
406         slider.setLowerValue(66); // a: lower->66,upper=99
407         slider.setUpperValue(33); // b: lower->33,upper->66
408         slider.setLowerValue(77); // c: lower->66,upper->77
409         QCOMPARE(spanChanged.count(), 3);
410         QCOMPARE(lowerChanged.count(), 3);
411         QCOMPARE(upperChanged.count(), 2);
412         // a
413         args = spanChanged.takeFirst();
414         QVERIFY(args.at(0).toInt() == 66);
415         QVERIFY(args.at(1).toInt() == 99);
416         QVERIFY(lowerChanged.takeFirst().at(0).toInt() == 66);
417         // b
418         args = spanChanged.takeFirst();
419         QVERIFY(args.at(0).toInt() == 33);
420         QVERIFY(args.at(1).toInt() == 66);
421         QVERIFY(lowerChanged.takeFirst().at(0).toInt() == 33);
422         QVERIFY(upperChanged.takeFirst().at(0).toInt() == 66);
423         // c
424         args = spanChanged.takeFirst();
425         QVERIFY(args.at(0).toInt() == 66);
426         QVERIFY(args.at(1).toInt() == 77);
427         QVERIFY(lowerChanged.takeFirst().at(0).toInt() == 66);
428         QVERIFY(upperChanged.takeFirst().at(0).toInt() == 77);
429         
430         // # 12 change of range
431         slider.setRange(68, 72);
432         QCOMPARE(slider.lowerValue(), 68);
433         QCOMPARE(slider.upperValue(), 72);
434         QCOMPARE(spanChanged.count(), 1);
435         QCOMPARE(lowerChanged.count(), 1);
436         QCOMPARE(upperChanged.count(), 1);
437         args = spanChanged.takeLast();
438         QVERIFY(args.at(0).toInt() == 68);
439         QVERIFY(args.at(1).toInt() == 72);
440         QVERIFY(lowerChanged.takeLast().at(0).toInt() == 68);
441         QVERIFY(upperChanged.takeLast().at(0).toInt() == 72);
442 }
443
444 void TestQxtGui::testQxtStringSpinBox()
445 {
446         QStringList strings;
447         for (int i = 0; i < 10; ++i)
448                 strings += QString::number(i);
449         
450         QxtStringSpinBox spinBox;
451         spinBox.setStrings(strings);
452         
453         QTestEventList up;
454         up.addKeyClick(Qt::Key_Up);
455         
456         QTestEventList down;
457         down.addKeyClick(Qt::Key_Down);
458         
459         for (int i = 0; i < 10; ++i)
460         {
461                 QCOMPARE(spinBox.cleanText(), QString::number(i));
462                 up.simulate(&spinBox);
463                 QCOMPARE(spinBox.cleanText(), QString::number(qMin(i+1, 9)));
464         }
465         
466         for (int i = 9; i >= 0; --i)
467         {
468                 QCOMPARE(spinBox.cleanText(), QString::number(i));
469                 down.simulate(&spinBox);
470                 QCOMPARE(spinBox.cleanText(), QString::number(qMax(i-1, 0)));
471         }
472 }
473
474 void TestQxtGui::testQxtTableWidget_data()
475 {
476         QTest::addColumn<QTestEventList>("events");
477         QTest::addColumn<int>("amount");
478         
479         QTestEventList all;
480         all.addKeyClick(Qt::Key_Tab); // select first
481         all.addKeyClick(Qt::Key_F2); // start editing
482         all.addKeyClick(Qt::Key_Tab); // select second
483         all.addKeyClick(Qt::Key_F2); // start editing
484         all.addKeyClick(Qt::Key_Tab); // select third
485         all.addKeyClick(Qt::Key_F2); // start editing
486         all.addKeyClick(Qt::Key_Tab); // select fourth
487         all.addKeyClick(Qt::Key_F2); // start editing
488         all.addKeyClick(Qt::Key_Tab); // finish editing
489         QTest::newRow("all edited") << all << 4;
490         
491         QTestEventList second;
492         second.addKeyClick(Qt::Key_Tab); // select second
493         second.addKeyClick(Qt::Key_Tab);
494         second.addKeyClick(Qt::Key_F2); // edit
495         second.addKeyClick(Qt::Key_Tab); // select fourth
496         second.addKeyClick(Qt::Key_Tab);
497         second.addKeyClick(Qt::Key_F2); // edit
498         second.addKeyClick(Qt::Key_Tab); // abort
499         QTest::newRow("every second edited") << second << 2;
500         
501         QTestEventList none;
502         QTest::newRow("none edited") << none << 0;
503 }
504
505 void TestQxtGui::testQxtTableWidget()
506 {
507         QFETCH(QTestEventList, events);
508         QFETCH(int, amount);
509         
510         QxtTableWidget tableWidget(2, 2);
511         tableWidget.setEditTriggers(QAbstractItemView::EditKeyPressed);
512         
513         qRegisterMetaType<QTableWidgetItem*>("QTableWidgetItem*");
514         QSignalSpy editStarted(&tableWidget, SIGNAL(itemEditingStarted(QTableWidgetItem*)));
515         QSignalSpy editFinished(&tableWidget, SIGNAL(itemEditingFinished(QTableWidgetItem*)));
516         QVERIFY(editStarted.isValid());
517         QVERIFY(editFinished.isValid());
518         
519         events.simulate(tableWidget.viewport());
520         
521         QCOMPARE(editStarted.count(),  amount);
522         QCOMPARE(editFinished.count(), amount);
523 }
524
525 void TestQxtGui::testQxtTabWidget()
526 {
527         QxtTabWidget tabWidget;
528         tabWidget.setTabContextMenuPolicy(Qt::ActionsContextMenu);
529         tabWidget.addTab(new QLabel("1"), "1");
530         tabWidget.addTab(new QLabel("2"), "2");
531         tabWidget.addTab(new QLabel("3"), "3");
532         
533         QPointer<QAction> act1a = new QAction("1a", &tabWidget);
534         QPointer<QAction> act1b = new QAction("1b", &tabWidget);
535         QPointer<QAction> act2 = new QAction("2", &tabWidget);
536         
537         tabWidget.addTabAction(1, act2);
538         QCOMPARE(tabWidget.tabActions(0).count(), 0);
539         QCOMPARE(tabWidget.tabActions(1).count(), 1);
540         QCOMPARE(tabWidget.tabActions(2).count(), 0);
541         
542         QPointer<QAction> act3 = tabWidget.addTabAction(2, "3");
543         QCOMPARE(tabWidget.tabActions(0).count(), 0);
544         QCOMPARE(tabWidget.tabActions(1).count(), 1);
545         QCOMPARE(tabWidget.tabActions(2).count(), 1);
546         
547         QList<QAction*> actions;
548         actions << act1a << act1b;
549         tabWidget.addTabActions(0, actions);
550         QCOMPARE(tabWidget.tabActions(0).count(), 2);
551         QCOMPARE(tabWidget.tabActions(1).count(), 1);
552         QCOMPARE(tabWidget.tabActions(2).count(), 1);
553         
554         tabWidget.clearTabActions(0);
555         QCOMPARE(tabWidget.tabActions(0).count(), 0);
556         QCOMPARE(tabWidget.tabActions(1).count(), 1);
557         QCOMPARE(tabWidget.tabActions(2).count(), 1);
558         QVERIFY(act1a == 0 && act1b == 0); // must have been deleted
559         
560         tabWidget.removeTabAction(1, act2);
561         QCOMPARE(tabWidget.tabActions(0).count(), 0);
562         QCOMPARE(tabWidget.tabActions(1).count(), 0);
563         QCOMPARE(tabWidget.tabActions(2).count(), 1);
564         QVERIFY(act2 != 0); // must not have been deleted
565         
566         tabWidget.insertTabAction(2, act3, act2);
567         QCOMPARE(tabWidget.tabActions(0).count(), 0);
568         QCOMPARE(tabWidget.tabActions(1).count(), 0);
569         QCOMPARE(tabWidget.tabActions(2).count(), 2);
570         QVERIFY(tabWidget.tabActions(2).first() == act2);
571         QVERIFY(tabWidget.tabActions(2).last() == act3);
572 }
573
574 void TestQxtGui::testQxtToolTip()
575 {
576         // See demos/qxtsnapshot
577 }
578
579 void TestQxtGui::testQxtTreeWidget_data()
580 {
581         QTest::addColumn<QTestEventList>("events");
582         QTest::addColumn<int>("amount");
583         
584         QTestEventList all;
585         for (int i = 0; i < 10; ++i)
586         {
587                 all.addKeyClick(Qt::Key_Down); // select next
588                 all.addKeyClick(Qt::Key_Space); // check
589                 all.addKeyClick(Qt::Key_F2); // start editing
590         }
591         all.addKeyClick(Qt::Key_Up);
592         QTest::newRow("all checked") << all << 10;
593         
594         QTestEventList second;
595         for (int i = 0; i < 10; i += 2)
596         {
597                 second.addKeyClick(Qt::Key_Down); // select
598                 second.addKeyClick(Qt::Key_Space); // check
599                 second.addKeyClick(Qt::Key_F2); // start edit
600                 second.addKeyClick(Qt::Key_Escape); // finish edit
601         }
602         second.addKeyClick(Qt::Key_Up);
603         QTest::newRow("every second checked") << second << 5;
604         
605         QTestEventList none;
606         QTest::newRow("none checked") << none << 0;
607 }
608
609 void TestQxtGui::testQxtTreeWidget()
610 {
611         QFETCH(QTestEventList, events);
612         QFETCH(int, amount);
613         
614         QxtTreeWidget treeWidget;
615         treeWidget.setColumnCount(1);
616         treeWidget.setEditTriggers(QAbstractItemView::EditKeyPressed);
617         for (int i = 0; i < 10; ++i)
618         {
619                 QxtTreeWidgetItem* item = new QxtTreeWidgetItem(&treeWidget, QStringList(QString::number(i)));
620                 item->setFlag(Qt::ItemIsEditable);
621                 item->setFlag(Qt::ItemIsUserCheckable);
622                 item->setCheckState(0, Qt::Unchecked);
623         }
624
625         qRegisterMetaType<QTreeWidgetItem*>("QTreeWidgetItem*");
626         qRegisterMetaType<QxtTreeWidgetItem*>("QxtTreeWidgetItem*");
627         QSignalSpy editStarted(&treeWidget, SIGNAL(itemEditingStarted(QTreeWidgetItem*)));
628         QSignalSpy editFinished(&treeWidget, SIGNAL(itemEditingFinished(QTreeWidgetItem*)));
629         QSignalSpy checkChanged(&treeWidget, SIGNAL(itemCheckStateChanged(QxtTreeWidgetItem*)));
630         QVERIFY(editStarted.isValid());
631         QVERIFY(editFinished.isValid());
632         QVERIFY(checkChanged.isValid());
633         
634         events.simulate(treeWidget.viewport());
635         
636         QList<QTreeWidgetItem*> checkedItems;
637         for (int i = 0; i < 10; ++i)
638         {
639                 QTreeWidgetItem* item = treeWidget.topLevelItem(i);
640                 if (item && item->data(0, Qt::CheckStateRole).toInt() == Qt::Checked)
641                         checkedItems += item;
642         }
643         
644         QCOMPARE(checkChanged.count(), checkedItems.count());
645         QCOMPARE(editStarted.count(),  amount);
646         QCOMPARE(editFinished.count(), amount);
647 }
648
649 QTEST_MAIN(TestQxtGui)
650 #include "main.moc"