diff options
Diffstat (limited to 'tests/auto/other/qaccessibilitylinux')
-rw-r--r-- | tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp | 76 |
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" |