┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2023-09-08 17:10:29 +0200
committerFelix Ernst <[email protected]>2023-10-05 12:09:25 +0000
commitb58fead9beaf3165146d3e536b6b14ae1cc9514d (patch)
tree88227865e448ea8f0f7c24549d3c77f1ba90b941 /src
parent549fad2daeeccac53b88b4777dcc9effbc2110e5 (diff)
Add test for accessibility ancestor tree
This is to make sure that all items that can be tabbed to and their accessible children have the main window somewhere in their ancestry/ancestor tree.
Diffstat (limited to 'src')
-rw-r--r--src/tests/dolphinmainwindowtest.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/tests/dolphinmainwindowtest.cpp b/src/tests/dolphinmainwindowtest.cpp
index 009008002..e6c355a87 100644
--- a/src/tests/dolphinmainwindowtest.cpp
+++ b/src/tests/dolphinmainwindowtest.cpp
@@ -14,11 +14,14 @@
#include <KActionCollection>
+#include <QAccessible>
#include <QScopedPointer>
#include <QSignalSpy>
#include <QStandardPaths>
#include <QTest>
+#include <set>
+
class DolphinMainWindowTest : public QObject
{
Q_OBJECT
@@ -39,6 +42,7 @@ private Q_SLOTS:
void testPlacesPanelWidthResistance();
void testGoActions();
void testOpenFiles();
+ void testAccessibilityAncestorTree();
void cleanupTestCase();
private:
@@ -524,6 +528,39 @@ void DolphinMainWindowTest::testOpenFiles()
QTRY_COMPARE(m_mainWindow->m_activeViewContainer->view()->selectedItems().count(), 1);
}
+void DolphinMainWindowTest::testAccessibilityAncestorTree()
+{
+ m_mainWindow->openDirectories({QUrl::fromLocalFile(QDir::homePath())}, false);
+ m_mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+
+ std::set<const QObject *> testedObjects; // Makes sure we stop testing if we arrive at an item that was already tested.
+ QAccessibleInterface *accessibleInterfaceOfMainWindow = QAccessible::queryAccessibleInterface(m_mainWindow.get());
+ Q_CHECK_PTR(accessibleInterfaceOfMainWindow);
+
+ // We will do accessibility checks for every object that gets focus. Focus will be changed using the Tab key.
+ while (qApp->focusObject() && !testedObjects.count(qApp->focusObject())) {
+ const auto currentlyFocusedObject = qApp->focusObject();
+ QAccessibleInterface *accessibleInterface = QAccessible::queryAccessibleInterface(currentlyFocusedObject);
+
+ // The accessibleInterfaces of focused objects might themselves have children.
+ // We go down that hierarchy as far as possible and then test the ancestor tree from there.
+ while (accessibleInterface->childCount() > 0) {
+ accessibleInterface = accessibleInterface->child(0);
+ }
+ while (accessibleInterface != accessibleInterfaceOfMainWindow) {
+ QVERIFY2(accessibleInterface,
+ qPrintable(QString("%1's accessibleInterface or one of its accessible children doesn't have the main window as an ancestor.")
+ .arg(currentlyFocusedObject->metaObject()->className())));
+ accessibleInterface = accessibleInterface->parent();
+ }
+
+ testedObjects.insert(currentlyFocusedObject); // Add it to testedObjects so we won't test it again later.
+ QTest::keyClick(m_mainWindow.get(), Qt::Key::Key_Tab, Qt::ShiftModifier); // ShiftModifier because the Tab cycle is currently broken going forward.
+ }
+}
+
void DolphinMainWindowTest::cleanupTestCase()
{
m_mainWindow->showNormal();