summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-10-17 10:19:31 +0200
committerLiang Qi <liang.qi@qt.io>2017-10-17 10:34:24 +0200
commitd0a0a3c0418a0fdd2ed84b2a5f7e6565537715c6 (patch)
treed6aeb4d51caf30ccf23eadb806a09295cbf679cd /tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
parent9f405f98a4247cd263b9c5d35659a4ba89e282de (diff)
parentac35f9c44c0fb3b2f40ae5585c497200b2ba743d (diff)
Merge remote-tracking branch 'origin/5.10' into dev
Conflicts: examples/network/fortuneclient/client.cpp examples/network/fortuneserver/server.cpp src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h src/plugins/platforms/cocoa/qcocoabackingstore.h src/plugins/platforms/cocoa/qcocoaintegration.h src/plugins/platforms/cocoa/qcocoascreen.h src/plugins/platforms/ios/qiosbackingstore.h src/plugins/sqldrivers/oci/qsql_oci.cpp src/widgets/kernel/qwidgetwindow.cpp Change-Id: Ia6dd2c52d4a691b671cf9a2ffca70deccece8f10
Diffstat (limited to 'tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp')
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp112
1 files changed, 109 insertions, 3 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 0fbb909646..7811c13ee1 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -55,6 +55,8 @@
#include <qproxystyle.h>
#include <qdialog.h>
+Q_DECLARE_METATYPE(Qt::ItemFlags);
+
static inline void setFrameless(QWidget *w)
{
Qt::WindowFlags flags = w->windowFlags();
@@ -154,6 +156,8 @@ private slots:
void testDialogAsEditor();
void QTBUG46785_mouseout_hover_state();
void testClearModelInClickedSignal();
+ void inputMethodEnabled_data();
+ void inputMethodEnabled();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -1811,7 +1815,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
view.setModel(&proxyModel);
view.setSelectionMode(QAbstractItemView::ExtendedSelection);
view.show();
- QTest::qWaitForWindowExposed(&view);
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
// Click "C"
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, view.visualRect(indexC).center());
@@ -1925,7 +1929,7 @@ void tst_QAbstractItemView::QTBUG48968_reentrant_updateEditorGeometries()
tree.setRootIsDecorated(false);
QObject::connect(&tree, SIGNAL(doubleClicked(QModelIndex)), &tree, SLOT(setRootIndex(QModelIndex)));
tree.show();
- QTest::qWaitForWindowActive(&tree);
+ QVERIFY(QTest::qWaitForWindowActive(&tree));
// Trigger editing idx
QModelIndex idx = m->index(1, 0);
@@ -2167,7 +2171,7 @@ void tst_QAbstractItemView::testClickToSelect()
SetSelectionTestView view;
view.setModel(&model);
view.show();
- QTest::qWaitForWindowExposed(&view);
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QSignalSpy spy(&view, &SetSelectionTestView::setSelectionCalled);
@@ -2295,5 +2299,107 @@ void tst_QAbstractItemView::testClearModelInClickedSignal()
QCOMPARE(view.model(), nullptr);
}
+void tst_QAbstractItemView::inputMethodEnabled_data()
+{
+ QTest::addColumn<QByteArray>("viewType");
+ QTest::addColumn<Qt::ItemFlags>("itemFlags");
+ QTest::addColumn<bool>("result");
+
+ QList<QByteArray> widgets;
+ widgets << "QListView" << "QTreeView" << "QTableView";
+
+ for (const QByteArray &widget : qAsConst(widgets)) {
+ QTest::newRow(widget + ": no flags") << widget << Qt::ItemFlags(Qt::NoItemFlags) << false;
+ QTest::newRow(widget + ": checkable") << widget << Qt::ItemFlags(Qt::ItemIsUserCheckable) << false;
+ QTest::newRow(widget + ": selectable") << widget << Qt::ItemFlags(Qt::ItemIsSelectable) << false;
+ QTest::newRow(widget + ": enabled") << widget << Qt::ItemFlags(Qt::ItemIsEnabled) << false;
+ QTest::newRow(widget + ": selectable|enabled")
+ << widget << Qt::ItemFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled) << false;
+ QTest::newRow(widget + ": editable|enabled")
+ << widget << Qt::ItemFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled) << true;
+ QTest::newRow(widget + ": editable|enabled|selectable")
+ << widget << Qt::ItemFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable) << true;
+ }
+}
+
+void tst_QAbstractItemView::inputMethodEnabled()
+{
+ QFETCH(QByteArray, viewType);
+ QFETCH(Qt::ItemFlags, itemFlags);
+ QFETCH(bool, result);
+
+ QScopedPointer<QAbstractItemView> view;
+ if (viewType == "QListView")
+ view.reset(new QListView());
+ else if (viewType == "QTableView")
+ view.reset(new QTableView());
+ else if (viewType == "QTreeView")
+ view.reset(new QTreeView());
+ else
+ QVERIFY(0);
+
+ centerOnScreen(view.data());
+ view->show();
+ QVERIFY(QTest::qWaitForWindowExposed(view.data()));
+
+ QStandardItemModel *model = new QStandardItemModel(view.data());
+ QStandardItem *item = new QStandardItem("first item");
+ item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ model->appendRow(item);
+
+ QStandardItem *secondItem = new QStandardItem("test item");
+ secondItem->setFlags(Qt::ItemFlags(itemFlags));
+ model->appendRow(secondItem);
+
+ view->setModel(model);
+
+ // Check current changed
+ view->setCurrentIndex(model->index(0, 0));
+ QVERIFY(!view->testAttribute(Qt::WA_InputMethodEnabled));
+ view->setCurrentIndex(model->index(1, 0));
+ QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
+ view->setCurrentIndex(model->index(0, 0));
+ QVERIFY(!view->testAttribute(Qt::WA_InputMethodEnabled));
+
+ // Check focus by switching the activation of the window to force a focus in
+ view->setCurrentIndex(model->index(1, 0));
+ QApplication::setActiveWindow(0);
+ QApplication::setActiveWindow(view.data());
+ QVERIFY(QTest::qWaitForWindowActive(view.data()));
+ QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
+
+ view->setCurrentIndex(QModelIndex());
+ QVERIFY(!view->testAttribute(Qt::WA_InputMethodEnabled));
+ QApplication::setActiveWindow(0);
+ QApplication::setActiveWindow(view.data());
+ QVERIFY(QTest::qWaitForWindowActive(view.data()));
+ QModelIndex index = model->index(1, 0);
+ QPoint p = view->visualRect(index).center();
+ QTest::mouseClick(view->viewport(), Qt::LeftButton, Qt::NoModifier, p);
+ if (itemFlags & Qt::ItemIsEnabled)
+ QCOMPARE(view->currentIndex(), index);
+ QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
+
+ index = model->index(0, 0);
+ QApplication::setActiveWindow(0);
+ QApplication::setActiveWindow(view.data());
+ QVERIFY(QTest::qWaitForWindowActive(view.data()));
+ p = view->visualRect(index).center();
+ QTest::mouseClick(view->viewport(), Qt::LeftButton, Qt::NoModifier, p);
+ QCOMPARE(view->currentIndex(), index);
+ QVERIFY(!view->testAttribute(Qt::WA_InputMethodEnabled));
+
+ // There is a case when it goes to the first visible item so we
+ // make the flags of the first item match the ones we are testing
+ // to check the attribute correctly
+ QApplication::setActiveWindow(0);
+ view->setCurrentIndex(QModelIndex());
+ view->reset();
+ item->setFlags(Qt::ItemFlags(itemFlags));
+ QApplication::setActiveWindow(view.data());
+ QVERIFY(QTest::qWaitForWindowActive(view.data()));
+ QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"