// SPDX-License-Identifier: MIT #include "../taskselection.h" #include #include #include using TaskManager::AbstractTasksModel; class TaskSelectionTest : public QObject { Q_OBJECT private Q_SLOTS: void returnsTopLevelTask(); void selectsChildByCyclePosition(); void startsWithFirstChild(); void startsWithLastChildWhenReversing(); void startsAfterActiveChild(); void startsBeforeActiveChildWhenReversing(); void keepsSeparateLaunchersAsSlots(); void mergesLauncherWithRunningApplication(); }; void TaskSelectionTest::returnsTopLevelTask() { QStandardItemModel model; model.appendRow(new QStandardItem(QStringLiteral("Dolphin"))); QCOMPARE(taskToActivate(model, 0, 0), model.index(0, 0)); QVERIFY(!taskToActivate(model, 1, 0).isValid()); } void TaskSelectionTest::selectsChildByCyclePosition() { QStandardItemModel model; auto *group = new QStandardItem(QStringLiteral("Dolphin")); group->appendRow(new QStandardItem(QStringLiteral("one"))); group->appendRow(new QStandardItem(QStringLiteral("two"))); group->appendRow(new QStandardItem(QStringLiteral("three"))); model.appendRow(group); const QModelIndex parent = model.index(0, 0); QCOMPARE(taskToActivate(model, 0, 0), model.index(0, 0, parent)); QCOMPARE(taskToActivate(model, 0, 1), model.index(1, 0, parent)); QCOMPARE(taskToActivate(model, 0, 2), model.index(2, 0, parent)); QCOMPARE(taskToActivate(model, 0, 3), model.index(0, 0, parent)); QCOMPARE(taskToActivate(model, 0, -1), model.index(2, 0, parent)); QCOMPARE(taskToActivate(model, 0, -2), model.index(1, 0, parent)); } void TaskSelectionTest::startsWithFirstChild() { QStandardItemModel model; auto *group = new QStandardItem(QStringLiteral("Firefox")); group->appendRow(new QStandardItem(QStringLiteral("first"))); group->appendRow(new QStandardItem(QStringLiteral("second"))); model.appendRow(group); QCOMPARE(taskToActivate(model, 0, 0), model.index(0, 0, model.index(0, 0))); } void TaskSelectionTest::startsWithLastChildWhenReversing() { QStandardItemModel model; auto *group = new QStandardItem(QStringLiteral("Dolphin")); group->appendRow(new QStandardItem(QStringLiteral("one"))); group->appendRow(new QStandardItem(QStringLiteral("two"))); group->appendRow(new QStandardItem(QStringLiteral("three"))); model.appendRow(group); QCOMPARE(initialCyclePosition(model, 0, true, true), 2); } void TaskSelectionTest::startsAfterActiveChild() { QStandardItemModel model; auto *group = new QStandardItem(QStringLiteral("Firefox")); group->appendRow(new QStandardItem(QStringLiteral("one"))); group->appendRow(new QStandardItem(QStringLiteral("two"))); group->appendRow(new QStandardItem(QStringLiteral("three"))); model.appendRow(group); group->child(1)->setData(true, AbstractTasksModel::IsActive); QCOMPARE(initialCyclePosition(model, 0, false, false), 2); } void TaskSelectionTest::startsBeforeActiveChildWhenReversing() { QStandardItemModel model; auto *group = new QStandardItem(QStringLiteral("Firefox")); group->appendRow(new QStandardItem(QStringLiteral("one"))); group->appendRow(new QStandardItem(QStringLiteral("two"))); group->appendRow(new QStandardItem(QStringLiteral("three"))); model.appendRow(group); group->child(0)->setData(true, AbstractTasksModel::IsActive); QCOMPARE(initialCyclePosition(model, 0, false, true), -1); QCOMPARE(taskToActivate(model, 0, -1), model.index(2, 0, model.index(0, 0))); } void TaskSelectionTest::keepsSeparateLaunchersAsSlots() { QStandardItemModel model; model.appendRow(new QStandardItem(QStringLiteral("launcher"))); model.appendRow(new QStandardItem(QStringLiteral("window"))); QCOMPARE(logicalTaskRows(model, true), QVector({0, 1})); } void TaskSelectionTest::mergesLauncherWithRunningApplication() { QStandardItemModel model; model.appendRow(new QStandardItem(QStringLiteral("Dolphin launcher"))); model.appendRow(new QStandardItem(QStringLiteral("Firefox window"))); model.appendRow(new QStandardItem(QStringLiteral("Dolphin windows"))); model.setData(model.index(0, 0), true, AbstractTasksModel::IsLauncher); model.setData(model.index(0, 0), QStringLiteral("org.kde.dolphin"), AbstractTasksModel::AppId); model.setData(model.index(1, 0), true, AbstractTasksModel::IsWindow); model.setData(model.index(1, 0), QStringLiteral("firefox"), AbstractTasksModel::AppId); model.setData(model.index(2, 0), true, AbstractTasksModel::IsWindow); model.setData(model.index(2, 0), QStringLiteral("org.kde.dolphin"), AbstractTasksModel::AppId); QCOMPARE(logicalTaskRows(model, false), QVector({2, 1})); } QTEST_GUILESS_MAIN(TaskSelectionTest) #include "test-taskselection.moc"