summaryrefslogtreecommitdiffstats
path: root/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp')
-rw-r--r--tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp76
1 files changed, 67 insertions, 9 deletions
diff --git a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
index 50bf342365..4ff90e85cc 100644
--- a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
+++ b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -47,6 +47,7 @@
#include <QtWidgets/QListWidget>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QTextEdit>
+#include <QtWidgets/QPushButton>
#include <QDBusArgument>
#include <QDBusConnection>
@@ -102,6 +103,7 @@ private slots:
void testTreeWidget();
void testTextEdit();
void testSlider();
+ void testFocus();
void cleanupTestCase();
@@ -421,14 +423,22 @@ void tst_QAccessibilityLinux::testTextEdit()
QCOMPARE(callResult.at(2).toInt(), 17);
// Check if at least CharacterExtents and RangeExtents give a consistent result
- QDBusReply<QRect> replyRect20 = textInterface->call(QDBus::Block, "GetCharacterExtents", 20, ATSPI_COORD_TYPE_SCREEN);
- QVERIFY(replyRect20.isValid());
- QRect r1 = replyRect20.value();
- QDBusReply<QRect> replyRect21 = textInterface->call(QDBus::Block, "GetCharacterExtents", 21, ATSPI_COORD_TYPE_SCREEN);
- QRect r2 = replyRect21.value();
- QDBusReply<QRect> reply = textInterface->call(QDBus::Block, "GetRangeExtents", 20, 21, ATSPI_COORD_TYPE_SCREEN);
- QRect rect = reply.value();
- QCOMPARE(rect, r1|r2);
+
+ QDBusMessage replyRect20 = textInterface->call(QDBus::Block, "GetCharacterExtents", 20, ATSPI_COORD_TYPE_SCREEN);
+ QCOMPARE(replyRect20.type(), QDBusMessage::ReplyMessage);
+ QCOMPARE(replyRect20.signature(), QStringLiteral("iiii"));
+ callResult = replyRect20.arguments();
+ QRect r1 = QRect(callResult.at(0).toInt(), callResult.at(1).toInt(), callResult.at(2).toInt(), callResult.at(3).toInt());
+ QDBusMessage replyRect21 = textInterface->call(QDBus::Block, "GetCharacterExtents", 21, ATSPI_COORD_TYPE_SCREEN);
+ QCOMPARE(replyRect21.type(), QDBusMessage::ReplyMessage);
+ QCOMPARE(replyRect21.signature(), QStringLiteral("iiii"));
+ callResult = replyRect21.arguments();
+ QRect r2 = QRect(callResult.at(0).toInt(), callResult.at(1).toInt(), callResult.at(2).toInt(), callResult.at(3).toInt());
+
+ QDBusMessage replyRange = textInterface->call(QDBus::Block, "GetRangeExtents", 20, 21, ATSPI_COORD_TYPE_SCREEN);
+ callResult = replyRange.arguments();
+ QRect rectRangeExtents = QRect(callResult.at(0).toInt(), callResult.at(1).toInt(), callResult.at(2).toInt(), callResult.at(3).toInt());
+ QCOMPARE(rectRangeExtents, r1|r2);
m_window->clearChildren();
delete textInterface;
@@ -457,6 +467,54 @@ void tst_QAccessibilityLinux::testSlider()
QCOMPARE(valueInterface->property("CurrentValue").toInt(), 4);
}
+quint64 getAtspiState(QDBusInterface *interface)
+{
+ QDBusMessage msg = interface->call(QDBus::Block, "GetState");
+ const QDBusArgument arg = msg.arguments().at(0).value<QDBusArgument>();
+ quint32 state1 = 0;
+ quint64 state2 = 0;
+ arg.beginArray();
+ arg >> state1;
+ arg >> state2;
+ arg.endArray();
+
+ state2 = state2 << 32;
+ return state2 | state1;
+}
+
+void tst_QAccessibilityLinux::testFocus()
+{
+ QLineEdit *lineEdit1 = new QLineEdit(m_window);
+ lineEdit1->setText("lineEdit 1");
+ QLineEdit *lineEdit2 = new QLineEdit(m_window);
+ lineEdit2->setText("lineEdit 2");
+
+ m_window->addWidget(lineEdit1);
+ m_window->addWidget(lineEdit2);
+ lineEdit1->setFocus();
+
+ QStringList children = getChildren(mainWindow);
+ QCOMPARE(children.length(), 2);
+ QDBusInterface *accessibleInterfaceLineEdit1 = getInterface(children.at(0), "org.a11y.atspi.Accessible");
+ QVERIFY(accessibleInterfaceLineEdit1->isValid());
+ QDBusInterface *accessibleInterfaceLineEdit2 = getInterface(children.at(1), "org.a11y.atspi.Accessible");
+ QVERIFY(accessibleInterfaceLineEdit2->isValid());
+ QDBusInterface *componentInterfaceLineEdit1 = getInterface(children.at(0), "org.a11y.atspi.Component");
+ QVERIFY(componentInterfaceLineEdit1->isValid());
+ QDBusInterface *componentInterfaceLineEdit2 = getInterface(children.at(1), "org.a11y.atspi.Component");
+ QVERIFY(componentInterfaceLineEdit2->isValid());
+
+ quint64 focusedState = quint64(1) << ATSPI_STATE_FOCUSED;
+ QVERIFY(getAtspiState(accessibleInterfaceLineEdit1) & focusedState);
+ QVERIFY(!(getAtspiState(accessibleInterfaceLineEdit2) & focusedState));
+
+ QDBusMessage focusReply = componentInterfaceLineEdit2->call(QDBus::Block, "GrabFocus");
+ QVERIFY(focusReply.arguments().at(0).toBool());
+ QVERIFY(lineEdit2->hasFocus());
+ QVERIFY(!(getAtspiState(accessibleInterfaceLineEdit1) & focusedState));
+ QVERIFY(getAtspiState(accessibleInterfaceLineEdit2) & focusedState);
+}
+
QTEST_MAIN(tst_QAccessibilityLinux)
#include "tst_qaccessibilitylinux.moc"