X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fa988586bc923b33497cbc97aaac07fc93a4ca83..ecc8b18b2a6aa6c45ae2db686cff9a8591c354f0:/src/tests/kitemlistcontrollertest.cpp diff --git a/src/tests/kitemlistcontrollertest.cpp b/src/tests/kitemlistcontrollertest.cpp index 42c0a8ed2..4cb1256e3 100644 --- a/src/tests/kitemlistcontrollertest.cpp +++ b/src/tests/kitemlistcontrollertest.cpp @@ -17,10 +17,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include -#include -#include - #include "kitemviews/kitemlistcontainer.h" #include "kitemviews/kfileitemlistview.h" #include "kitemviews/kfileitemmodel.h" @@ -29,20 +25,57 @@ #include "kitemviews/private/kitemlistviewlayouter.h" #include "testdir.h" -#include -#include - +#include #include #include +#include -namespace { - const int DefaultTimeout = 2000; +/** + * \class KItemListControllerTestStyle is a proxy style for testing the + * KItemListController with different style hint options, e.g. single/double + * click activation. + */ +class KItemListControllerTestStyle : public QProxyStyle +{ + Q_OBJECT +public: + KItemListControllerTestStyle(QStyle* style) : + QProxyStyle(style), + m_activateItemOnSingleClick((bool)style->styleHint(SH_ItemView_ActivateItemOnSingleClick)) + { + } + + void setActivateItemOnSingleClick(bool activateItemOnSingleClick) + { + m_activateItemOnSingleClick = activateItemOnSingleClick; + } + + bool activateItemOnSingleClick() const + { + return m_activateItemOnSingleClick; + } + + int styleHint(StyleHint hint, + const QStyleOption* option = nullptr, + const QWidget* widget = nullptr, + QStyleHintReturn* returnData = nullptr) const override + { + switch (hint) { + case QStyle::SH_ItemView_ActivateItemOnSingleClick: + return (int)activateItemOnSingleClick(); + default: + return QProxyStyle::styleHint(hint, option, widget, returnData); + } + } + +private: + bool m_activateItemOnSingleClick; }; -Q_DECLARE_METATYPE(KFileItemListView::ItemLayout); -Q_DECLARE_METATYPE(Qt::Orientation); -Q_DECLARE_METATYPE(KItemListController::SelectionBehavior); -Q_DECLARE_METATYPE(KItemSet); +Q_DECLARE_METATYPE(KFileItemListView::ItemLayout) +Q_DECLARE_METATYPE(Qt::Orientation) +Q_DECLARE_METATYPE(KItemListController::SelectionBehavior) +Q_DECLARE_METATYPE(KItemSet) class KItemListControllerTest : public QObject { @@ -73,6 +106,7 @@ private: KFileItemModel* m_model; TestDir* m_testDir; KItemListContainer* m_container; + KItemListControllerTestStyle* m_testStyle; }; /** @@ -92,6 +126,8 @@ void KItemListControllerTest::initTestCase() m_controller = m_container->controller(); m_controller->setSelectionBehavior(KItemListController::MultiSelection); m_selectionManager = m_controller->selectionManager(); + m_testStyle = new KItemListControllerTestStyle(m_view->style()); + m_view->setStyle(m_testStyle); QStringList files; files @@ -103,20 +139,20 @@ void KItemListControllerTest::initTestCase() m_testDir->createFiles(files); m_model->loadDirectory(m_testDir->url()); - QSignalSpy spyDirectoryLoadingCompleted(m_model, SIGNAL(directoryLoadingCompleted())); - QVERIFY(spyDirectoryLoadingCompleted.wait(DefaultTimeout)); + QSignalSpy spyDirectoryLoadingCompleted(m_model, &KFileItemModel::directoryLoadingCompleted); + QVERIFY(spyDirectoryLoadingCompleted.wait()); m_container->show(); - QTest::qWaitForWindowShown(m_container); + QVERIFY(QTest::qWaitForWindowExposed(m_container)); } void KItemListControllerTest::cleanupTestCase() { delete m_container; - m_container = 0; + m_container = nullptr; delete m_testDir; - m_testDir = 0; + m_testDir = nullptr; } /** Before each test, the current item, selection, and item size are reset to the defaults. */ @@ -161,7 +197,7 @@ struct KeyPress { */ struct ViewState { - ViewState(int current, const KItemSet selection, bool activated = false) : + ViewState(int current, const KItemSet &selection, bool activated = false) : m_current(current), m_selection(selection), m_activated(activated) @@ -174,7 +210,7 @@ struct ViewState { // We have to define a typedef for the pair in order to make the test compile. typedef QPair keyPressViewStatePair; -Q_DECLARE_METATYPE(QList); +Q_DECLARE_METATYPE(QList) /** * This function provides the data for the actual test function @@ -290,6 +326,12 @@ void KItemListControllerTest::testKeyboardNavigation_data() << qMakePair(KeyPress(Qt::Key_E), ViewState(13, KItemSet() << 13)) << qMakePair(KeyPress(Qt::Key_Space), ViewState(14, KItemSet() << 14)) << qMakePair(KeyPress(Qt::Key_3), ViewState(15, KItemSet() << 15)) + << qMakePair(KeyPress(Qt::Key_Escape), ViewState(15, KItemSet())) + << qMakePair(KeyPress(Qt::Key_E), ViewState(13, KItemSet() << 13)) + << qMakePair(KeyPress(Qt::Key_E), ViewState(14, KItemSet() << 14)) + << qMakePair(KeyPress(Qt::Key_E), ViewState(15, KItemSet() << 15)) + << qMakePair(KeyPress(Qt::Key_Escape), ViewState(15, KItemSet())) + << qMakePair(KeyPress(Qt::Key_E), ViewState(13, KItemSet() << 13)) << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, KItemSet() << 0)) << qMakePair(KeyPress(Qt::Key_Escape), ViewState(0, KItemSet())); @@ -425,7 +467,7 @@ void KItemListControllerTest::testKeyboardNavigation_data() selectionBehaviorNames[selectionBehavior] + ", " + groupingEnabledNames[groupingEnabled]; - const QByteArray testNameAscii = testName.toAscii(); + const QByteArray testNameAscii = testName.toLatin1(); QTest::newRow(testNameAscii.data()) << layout @@ -471,8 +513,8 @@ void KItemListControllerTest::testKeyboardNavigation() adjustGeometryForColumnCount(columnCount); QCOMPARE(m_view->m_layouter->m_columnCount, columnCount); - QSignalSpy spySingleItemActivated(m_controller, SIGNAL(itemActivated(int))); - QSignalSpy spyMultipleItemsActivated(m_controller, SIGNAL(itemsActivated(KItemSet))); + QSignalSpy spySingleItemActivated(m_controller, &KItemListController::itemActivated); + QSignalSpy spyMultipleItemsActivated(m_controller, &KItemListController::itemsActivated); while (!testList.isEmpty()) { const QPair test = testList.takeFirst(); @@ -509,6 +551,7 @@ void KItemListControllerTest::testKeyboardNavigation() } // No items are selected. Therefore, the current item should be activated. // This is handled by falling through to the NoSelection/SingleSelection case. + Q_FALLTHROUGH(); case KItemListController::NoSelection: case KItemListController::SingleSelection: // In NoSelection and SingleSelection mode, the current item should be activated. @@ -536,10 +579,7 @@ void KItemListControllerTest::testMouseClickActivation() const QPointF pos = m_view->itemContextRect(0).center(); // Save the "single click" setting. - const bool restoreKGlobalSettingsSingleClick = KGlobalSettings::singleClick(); - - KConfig config("kcminputrc"); - KConfigGroup group = config.group("KDE"); + const bool restoreSettingsSingleClick = m_testStyle->activateItemOnSingleClick(); QGraphicsSceneMouseEvent mousePressEvent(QEvent::GraphicsSceneMousePress); mousePressEvent.setPos(pos); @@ -551,46 +591,17 @@ void KItemListControllerTest::testMouseClickActivation() mouseReleaseEvent.setButton(Qt::LeftButton); mouseReleaseEvent.setButtons(Qt::NoButton); - QSignalSpy spyItemActivated(m_controller, SIGNAL(itemActivated(int))); + QSignalSpy spyItemActivated(m_controller, &KItemListController::itemActivated); // Default setting: single click activation. - group.writeEntry("SingleClick", true, KConfig::Persistent|KConfig::Global); - config.sync(); - KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE); - - int iterations = 0; - const int maxIterations = 20; - while (!KGlobalSettings::singleClick() && iterations < maxIterations) { - QTest::qWait(50); - ++iterations; - } - - if (!KGlobalSettings::singleClick()) { - // TODO: Try to find a way to make sure that changing the global setting works. - QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle); - } - + m_testStyle->setActivateItemOnSingleClick(true); m_view->event(&mousePressEvent); m_view->event(&mouseReleaseEvent); QCOMPARE(spyItemActivated.count(), 1); spyItemActivated.clear(); // Set the global setting to "double click activation". - group.writeEntry("SingleClick", false, KConfig::Persistent|KConfig::Global); - config.sync(); - KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE); - - iterations = 0; - while (KGlobalSettings::singleClick() && iterations < maxIterations) { - QTest::qWait(50); - ++iterations; - } - - if (KGlobalSettings::singleClick()) { - // TODO: Try to find a way to make sure that changing the global setting works. - QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle); - } - + m_testStyle->setActivateItemOnSingleClick(false); m_view->event(&mousePressEvent); m_view->event(&mouseReleaseEvent); QCOMPARE(spyItemActivated.count(), 0); @@ -611,21 +622,7 @@ void KItemListControllerTest::testMouseClickActivation() spyItemActivated.clear(); // Set the global setting back to "single click activation". - group.writeEntry("SingleClick", true, KConfig::Persistent|KConfig::Global); - config.sync(); - KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE); - - iterations = 0; - while (!KGlobalSettings::singleClick() && iterations < maxIterations) { - QTest::qWait(50); - ++iterations; - } - - if (!KGlobalSettings::singleClick()) { - // TODO: Try to find a way to make sure that changing the global setting works. - QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle); - } - + m_testStyle->setActivateItemOnSingleClick(true); m_view->event(&mousePressEvent); m_view->event(&mouseReleaseEvent); QCOMPARE(spyItemActivated.count(), 1); @@ -640,20 +637,7 @@ void KItemListControllerTest::testMouseClickActivation() // Restore previous settings. m_controller->setSingleClickActivationEnforced(true); - group.writeEntry("SingleClick", restoreKGlobalSettingsSingleClick, KConfig::Persistent|KConfig::Global); - config.sync(); - KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE); - - iterations = 0; - while (KGlobalSettings::singleClick() != restoreKGlobalSettingsSingleClick && iterations < maxIterations) { - QTest::qWait(50); - ++iterations; - } - - if (KGlobalSettings::singleClick() != restoreKGlobalSettingsSingleClick) { - // TODO: Try to find a way to make sure that changing the global setting works. - QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle); - } + m_testStyle->setActivateItemOnSingleClick(restoreSettingsSingleClick); } void KItemListControllerTest::adjustGeometryForColumnCount(int count)