diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-20 23:30:31 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-20 23:30:31 +0100 |
commit | e5a11fbb3251a98fafd6bebf0b6fc366acb19088 (patch) | |
tree | 8e1bd6704205307e0a23484221ea1bb67a9f411e /tests/auto/widgets/itemviews | |
parent | 0646d1131b4bc65cdd9af29f4ce00fdd2398a3df (diff) | |
parent | 76c0be34cd4ff4564693162fa7528463e23ce9d8 (diff) |
Merge "Merge branch 'dev' into stable" into refs/staging/stable
Diffstat (limited to 'tests/auto/widgets/itemviews')
9 files changed, 204 insertions, 28 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 2d95c9d3a4..f0731eb3a6 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -235,6 +235,8 @@ private slots: void testDelegateDestroyEditor(); void testClickedSignal(); void testChangeEditorState(); + void deselectInSingleSelection(); + void testNoActivateOnDisabledItem(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -1599,5 +1601,70 @@ void tst_QAbstractItemView::testChangeEditorState() // No segfault - the test passes. } +void tst_QAbstractItemView::deselectInSingleSelection() +{ + QTableView view; + QStandardItemModel s; + s.setRowCount(10); + s.setColumnCount(10); + view.setModel(&s); + view.show(); + view.setSelectionMode(QAbstractItemView::SingleSelection); + view.setEditTriggers(QAbstractItemView::NoEditTriggers); + QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + // mouse + QModelIndex index22 = s.index(2, 2); + QRect rect22 = view.visualRect(index22); + QPoint clickpos = rect22.center(); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, clickpos); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, clickpos); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0); + + // second click with modifier however does select + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, clickpos); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); + + // keyboard + QTest::keyClick(&view, Qt::Key_Space, Qt::NoModifier); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); + QTest::keyClick(&view, Qt::Key_Space, Qt::ControlModifier); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0); + + // second keypress with modifier however does select + QTest::keyClick(&view, Qt::Key_Space, Qt::ControlModifier); + QCOMPARE(view.currentIndex(), index22); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); +} + +void tst_QAbstractItemView::testNoActivateOnDisabledItem() +{ + QTreeView treeView; + QStandardItemModel model(1, 1); + QStandardItem *item = new QStandardItem("item"); + model.setItem(0, 0, item); + item->setFlags(Qt::NoItemFlags); + treeView.setModel(&model); + treeView.show(); + + QApplication::setActiveWindow(&treeView); + QVERIFY(QTest::qWaitForWindowActive(&treeView)); + + QSignalSpy activatedSpy(&treeView, SIGNAL(activated(QModelIndex))); + + // Ensure clicking on a disabled item doesn't emit itemActivated. + QModelIndex itemIndex = treeView.model()->index(0, 0); + QPoint clickPos = treeView.visualRect(itemIndex).center(); + QTest::mouseClick(treeView.viewport(), Qt::LeftButton, 0, clickPos); + + QCOMPARE(activatedSpy.count(), 0); +} + QTEST_MAIN(tst_QAbstractItemView) #include "tst_qabstractitemview.moc" diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp index 81736ad0d0..3fa3fbe0ee 100644 --- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp +++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp @@ -165,7 +165,8 @@ public: QColumnView::setSelection(rect, command); } - QRegion visualRegionForSelection(QItemSelection selection){ + // visualRegionForSelection() is protected in QColumnView. + QRegion getVisualRegionForSelection(const QItemSelection &selection){ return QColumnView::visualRegionForSelection(selection); } protected: @@ -664,7 +665,7 @@ void tst_QColumnView::visualRegionForSelection() { ColumnView view; QItemSelection emptyItemSelection; - QCOMPARE(QRegion(), view.visualRegionForSelection(emptyItemSelection)); + QCOMPARE(QRegion(), view.getVisualRegionForSelection(emptyItemSelection)); // a region that isn't empty QDirModel model; @@ -680,7 +681,7 @@ void tst_QColumnView::visualRegionForSelection() QModelIndex home = model.index(location); QVERIFY(model.rowCount(home) > 1); QItemSelection itemSelection(model.index(0, 0, home), model.index(model.rowCount(home) - 1, 0, home)); - QVERIFY(QRegion() != view.visualRegionForSelection(itemSelection)); + QVERIFY(QRegion() != view.getVisualRegionForSelection(itemSelection)); } void tst_QColumnView::moveGrip_basic() diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 63d5389e12..fa67e16db9 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -157,7 +157,7 @@ private slots: void sortIndicatorTracking(); void removeAndInsertRow(); void unhideSection(); - void event(); + void testEvent(); void headerDataChanged(); void currentChanged(); void horizontalOffset(); @@ -1368,7 +1368,7 @@ void tst_QHeaderView::unhideSection() } -void tst_QHeaderView::event() +void tst_QHeaderView::testEvent() { protected_QHeaderView x(Qt::Vertical); x.testEvent(); diff --git a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp index 0224f9019a..22a1743ff1 100644 --- a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp +++ b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp @@ -220,7 +220,7 @@ private slots: void doLayout(); void rect_data(); void rect(); - void eventFilter(); + void testEventFilter(); void dateTimeEditor_data(); void dateTimeEditor(); void dateAndTimeEditorTest2(); @@ -695,7 +695,7 @@ void tst_QItemDelegate::rect() //TODO : Add a test for the keyPress event //with Qt::Key_Enter and Qt::Key_Return -void tst_QItemDelegate::eventFilter() +void tst_QItemDelegate::testEventFilter() { TestItemDelegate delegate; QWidget widget; diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index 02d5c5cdb7..113ec1fd30 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -505,11 +505,12 @@ class QMoveCursorListView : public QListView public: QMoveCursorListView() : QListView() {} + // enum CursorAction and moveCursor() are protected in QListView. enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight, MoveHome, MoveEnd, MovePageUp, MovePageDown, MoveNext, MovePrevious }; - QModelIndex moveCursor(QMoveCursorListView::CursorAction action, Qt::KeyboardModifiers modifiers) + QModelIndex doMoveCursor(QMoveCursorListView::CursorAction action, Qt::KeyboardModifiers modifiers) { return QListView::moveCursor((QListView::CursorAction)action, modifiers); } @@ -540,9 +541,9 @@ void tst_QListView::moveCursor2() vu.selectionModel()->setCurrentIndex(model.index(0,0), QItemSelectionModel::SelectCurrent); QCoreApplication::processEvents(); - QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier); + QModelIndex idx = vu.doMoveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier); QCOMPARE(idx, model.index(0,0)); - idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier); + idx = vu.doMoveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier); QCOMPARE(idx, model.index(8,0)); } @@ -1628,7 +1629,7 @@ void tst_QListView::task196118_visualRegionForSelection() class MyListView : public QListView { public: - QRegion visualRegionForSelection() const + QRegion getVisualRegionForSelection() const { return QListView::visualRegionForSelection( selectionModel()->selection()); } } view; @@ -1643,7 +1644,7 @@ void tst_QListView::task196118_visualRegionForSelection() view.selectionModel()->select(top1.index(), QItemSelectionModel::Select); QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); - QVERIFY(view.visualRegionForSelection().isEmpty()); + QVERIFY(view.getVisualRegionForSelection().isEmpty()); } void tst_QListView::task254449_draggingItemToNegativeCoordinates() @@ -1977,11 +1978,11 @@ void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp() vu.selectionModel()->setCurrentIndex(model.index(currentItemIndexes[i], 0), QItemSelectionModel::SelectCurrent); - QModelIndex idx = vu.moveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier); + QModelIndex idx = vu.doMoveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier); int newCurrent = qMin(currentItemIndexes[i] + scrolledRowCount, 99); QCOMPARE(idx, model.index(newCurrent, 0)); - idx = vu.moveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier); + idx = vu.doMoveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier); newCurrent = qMax(currentItemIndexes[i] - scrolledRowCount, 0); QCOMPARE(idx, model.index(newCurrent, 0)); } diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 8a679fd1a0..d1107a687c 100644 --- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -437,6 +437,7 @@ public: this, SLOT(itemSelectionChanged(QItemSelection,QItemSelection))); } + // enum CursorAction and moveCursor() are protected in QTableView. enum CursorAction { MoveUp = QAbstractItemView::MoveUp, MoveDown = QAbstractItemView::MoveDown, @@ -450,7 +451,7 @@ public: MovePrevious = QAbstractItemView::MovePrevious }; - QModelIndex moveCursor(QtTestTableView::CursorAction cursorAction, + QModelIndex doMoveCursor(QtTestTableView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { return QTableView::moveCursor((QAbstractItemView::CursorAction)cursorAction, modifiers); @@ -1192,7 +1193,7 @@ void tst_QTableView::moveCursor() QModelIndex index = model.index(startRow, startColumn); view.setCurrentIndex(index); - QModelIndex newIndex = view.moveCursor((QtTestTableView::CursorAction)cursorMoveAction, + QModelIndex newIndex = view.doMoveCursor((QtTestTableView::CursorAction)cursorMoveAction, (Qt::KeyboardModifiers)modifier); // expected fails, task 119433 if(newIndex.row() == -1) @@ -1339,7 +1340,7 @@ void tst_QTableView::moveCursorStrikesBack() int newRow = -1; int newColumn = -1; foreach (int cursorMoveAction, cursorMoveActions) { - QModelIndex newIndex = view.moveCursor((QtTestTableView::CursorAction)cursorMoveAction, 0); + QModelIndex newIndex = view.doMoveCursor((QtTestTableView::CursorAction)cursorMoveAction, 0); view.setCurrentIndex(newIndex); newRow = newIndex.row(); newColumn = newIndex.column(); diff --git a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp index e64dce1a11..f72467de08 100644 --- a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp +++ b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp @@ -1444,7 +1444,7 @@ void tst_QTableWidget::task231094() tw.setCurrentCell(1, 1); QCOMPARE(tw.currentRow(), 1); QCOMPARE(tw.currentColumn(), 1); - + //this would provoke a end-less loop QTest::keyClick(&tw, '1'); diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 0f69e951bf..ea1f846258 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -89,7 +89,8 @@ struct PublicView : public QTreeView MovePrevious = QAbstractItemView::MovePrevious }; - inline QModelIndex moveCursor(PublicCursorAction ca, Qt::KeyboardModifiers kbm) + // enum PublicCursorAction and moveCursor() are protected in QTreeView. + inline QModelIndex doMoveCursor(PublicCursorAction ca, Qt::KeyboardModifiers kbm) { return QTreeView::moveCursor((CursorAction)ca, kbm); } inline void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) @@ -177,6 +178,7 @@ private slots: void emptyModel(); void removeRows(); void removeCols(); + void limitedExpand(); void expandAndCollapse_data(); void expandAndCollapse(); void expandAndCollapseAll(); @@ -256,6 +258,7 @@ private slots: void taskQTBUG_13567_removeLastItemRegression(); void taskQTBUG_25333_adjustViewOptionsForIndex(); void taskQTBUG_18539_emitLayoutChanged(); + void taskQTBUG_8176_emitOnExpandAll(); }; class QtTestModel: public QAbstractItemModel @@ -1414,6 +1417,45 @@ void tst_QTreeView::removeCols() QCOMPARE(view.header()->count(), model.cols); } +void tst_QTreeView::limitedExpand() +{ + { + QStandardItemModel model; + QStandardItem *parentItem = model.invisibleRootItem(); + parentItem->appendRow(new QStandardItem); + parentItem->appendRow(new QStandardItem); + parentItem->appendRow(new QStandardItem); + + QStandardItem *firstItem = model.item(0, 0); + firstItem->setFlags(firstItem->flags() | Qt::ItemNeverHasChildren); + + QTreeView view; + view.setModel(&model); + + QSignalSpy spy(&view, SIGNAL(expanded(QModelIndex))); + QVERIFY(spy.isValid()); + + view.expand(model.index(0, 0)); + QCOMPARE(spy.count(), 0); + + view.expand(model.index(1, 0)); + QCOMPARE(spy.count(), 1); + } + { + QStringListModel model(QStringList() << "one" << "two"); + QTreeView view; + view.setModel(&model); + + QSignalSpy spy(&view, SIGNAL(expanded(QModelIndex))); + QVERIFY(spy.isValid()); + + view.expand(model.index(0, 0)); + QCOMPARE(spy.count(), 0); + view.expandAll(); + QCOMPARE(spy.count(), 0); + } +} + void tst_QTreeView::expandAndCollapse_data() { QTest::addColumn<bool>("animationEnabled"); @@ -1581,13 +1623,10 @@ void tst_QTreeView::expandAndCollapseAll() for (int r = 0; r < rows; ++r) parents.push(model.index(r, 0, p)); } -// ### why is expanded() signal not emitted? -// QCOMPARE(expandedSpy.count(), count); + QCOMPARE(expandedSpy.count(), 12); // == (3+1)*(2+1) from QtTestModel model(3, 2); view.collapseAll(); - QCOMPARE(expandedSpy.count(), 0); - parents.push(QModelIndex()); count = 0; while (!parents.isEmpty()) { @@ -1599,8 +1638,7 @@ void tst_QTreeView::expandAndCollapseAll() for (int r = 0; r < rows; ++r) parents.push(model.index(r, 0, p)); } -// ### why is collapsed() signal not emitted? -// QCOMPARE(collapsedSpy.count(), count); + QCOMPARE(collapsedSpy.count(), 12); } void tst_QTreeView::expandWithNoChildren() @@ -1765,7 +1803,7 @@ void tst_QTreeView::moveCursor() QCOMPARE(view.currentIndex(), expected); //then pressing down should go to the next line - QModelIndex actual = view.moveCursor(PublicView::MoveDown, Qt::NoModifier); + QModelIndex actual = view.doMoveCursor(PublicView::MoveDown, Qt::NoModifier); expected = model.index(2, 1, QModelIndex()); QCOMPARE(actual, expected); @@ -1774,7 +1812,7 @@ void tst_QTreeView::moveCursor() // PageUp was broken with uniform row heights turned on view.setCurrentIndex(model.index(1, 0)); - actual = view.moveCursor(PublicView::MovePageUp, Qt::NoModifier); + actual = view.doMoveCursor(PublicView::MovePageUp, Qt::NoModifier); expected = model.index(0, 0, QModelIndex()); QCOMPARE(actual, expected); @@ -2818,7 +2856,7 @@ void tst_QTreeView::evilModel() view.setSelection(rect, QItemSelectionModel::Select); model.change(); - view.moveCursor(PublicView::MoveDown, Qt::NoModifier); + view.doMoveCursor(PublicView::MoveDown, Qt::NoModifier); model.change(); view.resizeColumnToContents(1); @@ -4158,6 +4196,47 @@ void tst_QTreeView::taskQTBUG_18539_emitLayoutChanged() QCOMPARE(afterRISpy.size(), 0); } +void tst_QTreeView::taskQTBUG_8176_emitOnExpandAll() +{ + QTreeWidget tw; + QTreeWidgetItem *item = new QTreeWidgetItem(&tw, QStringList(QString("item 1"))); + QTreeWidgetItem *item2 = new QTreeWidgetItem(item, QStringList(QString("item 2"))); + new QTreeWidgetItem(item2, QStringList(QString("item 3"))); + new QTreeWidgetItem(item2, QStringList(QString("item 4"))); + QTreeWidgetItem *item5 = new QTreeWidgetItem(&tw, QStringList(QString("item 5"))); + new QTreeWidgetItem(item5, QStringList(QString("item 6"))); + QSignalSpy spy(&tw, SIGNAL(expanded(const QModelIndex&))); + + // expand all + tw.expandAll(); + QCOMPARE(spy.size(), 6); + spy.clear(); + tw.collapseAll(); + item2->setExpanded(true); + spy.clear(); + tw.expandAll(); + QCOMPARE(spy.size(), 5); + + // collapse all + QSignalSpy spy2(&tw, SIGNAL(collapsed(const QModelIndex&))); + tw.collapseAll(); + QCOMPARE(spy2.size(), 6); + tw.expandAll(); + item2->setExpanded(false); + spy2.clear(); + tw.collapseAll(); + QCOMPARE(spy2.size(), 5); + + // expand to depth + item2->setExpanded(true); + spy.clear(); + spy2.clear(); + tw.expandToDepth(0); + + QCOMPARE(spy.size(), 2); // item and item5 are expanded + QCOMPARE(spy2.size(), 1); // item2 is collapsed +} + #ifndef QT_NO_ANIMATION void tst_QTreeView::quickExpandCollapse() { diff --git a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp index 7ab68345fa..f1f9f1c01a 100644 --- a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp +++ b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp @@ -80,6 +80,7 @@ private slots: void updateIteratorAfterDeletedItem_and_ContinueIteration_data(); void updateIteratorAfterDeletedItem_and_ContinueIteration(); void initializeIterator(); + void sortingEnabled(); private: QTreeWidget *testWidget; }; @@ -1236,5 +1237,31 @@ void tst_QTreeWidgetItemIterator::initializeIterator() QCOMPARE((*it), static_cast<QTreeWidgetItem*>(0)); } +void tst_QTreeWidgetItemIterator::sortingEnabled() +{ + QTreeWidget *tree = new QTreeWidget; + tree->setColumnCount(2); + tree->headerItem()->setText(0, "Id"); + tree->headerItem()->setText(1, "Color"); + + tree->setSortingEnabled(true); + tree->sortByColumn(0, Qt::AscendingOrder); + + QTreeWidgetItem *second = new QTreeWidgetItem; + second->setText(0, "2"); + second->setText(1, "second"); + QTreeWidgetItem *first = new QTreeWidgetItem; + first->setText(0, "1"); + first->setText(1, "first"); + + tree->addTopLevelItem(second); + tree->addTopLevelItem(first); + + QTreeWidgetItemIterator it(tree); + QCOMPARE(*it, first); + ++it; + QCOMPARE(*it, second); +} + QTEST_MAIN(tst_QTreeWidgetItemIterator) #include "tst_qtreewidgetitemiterator.moc" |