summaryrefslogtreecommitdiffstats
path: root/tests/auto/other
diff options
context:
space:
mode:
authorJan-Arve Saether <jan-arve.saether@nokia.com>2012-03-07 11:59:30 +0100
committerQt by Nokia <qt-info@nokia.com>2012-07-11 02:47:34 +0200
commit159b28d97226c9b40e3e47188396a17cee70852e (patch)
tree1abec302b1433a111a6df8127ce5a15ce88252ce /tests/auto/other
parent825cd7b9e5ac16546fe224d48e5ea319fc171248 (diff)
Remove clipboard operations from QAccessibleEditableTextInterface
Also, remove its subclass QAccessibleSimpleEditableTextInterface Instead of having the subclass that implements this conveniently, we move this behaviour over to the bridge. The bridge should check if role() == EditableText is set, and then it should try to support the IAccessibleEditableText interface (i.e. it should accept the calls to replaceText(), deleteText() and insertText()) and change the text with the following operations: 1. Query the text using QAccessibleTextInterface::text() or by using QAccessibleInterface::text(QAccessible::Value) as a fallback 2. Do the requested delete/insert/replace manipulation 3. Update the text with setText(QAccessible::Value, newText); Change-Id: Iee5e41faf14351951e2bfca8c9eac970a113e878 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Diffstat (limited to 'tests/auto/other')
-rw-r--r--tests/auto/other/qaccessibility/qaccessibility.pro5
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp181
2 files changed, 133 insertions, 53 deletions
diff --git a/tests/auto/other/qaccessibility/qaccessibility.pro b/tests/auto/other/qaccessibility/qaccessibility.pro
index 0c224ad0a8..ac8b6c87a8 100644
--- a/tests/auto/other/qaccessibility/qaccessibility.pro
+++ b/tests/auto/other/qaccessibility/qaccessibility.pro
@@ -13,6 +13,9 @@ wince*: {
}
win32 {
- !*g++: include(../../../../src/3rdparty/iaccessible2/iaccessible2.pri)
+ !*g++ {
+ include(../../../../src/3rdparty/iaccessible2/iaccessible2.pri)
+ DEFINES += QT_SUPPORTS_IACCESSIBLE2
+ }
LIBS += -loleacc -loleaut32 -lole32
}
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index 2a4013347e..df7588465d 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -46,16 +46,19 @@
# include <oleacc.h>
# include <servprov.h>
# include <winuser.h>
-# ifndef Q_CC_MINGW
+# ifdef QT_SUPPORTS_IACCESSIBLE2
# include <Accessible2.h>
# include <AccessibleAction.h>
# include <AccessibleComponent.h>
+# include <AccessibleEditableText.h>
+# include <AccessibleText.h>
# endif
#endif
#include <QtTest/QtTest>
#include <QtGui>
#include <QtWidgets>
#include <math.h>
+#include <qpa/qplatformnativeinterface.h>
#if defined(Q_OS_WIN) && defined(interface)
# undef interface
@@ -1560,12 +1563,6 @@ void tst_QAccessibility::textEditTest()
QCOMPARE(iface->textInterface()->characterRect(5).size(), QSize(fm.width(" "), fm.height()));
QCOMPARE(iface->textInterface()->characterRect(6).size(), QSize(fm.width("w"), fm.height()));
- iface->editableTextInterface()->copyText(6, 11);
- QCOMPARE(QApplication::clipboard()->text(), QLatin1String("world"));
- iface->editableTextInterface()->cutText(12, 16);
- QCOMPARE(QApplication::clipboard()->text(), QLatin1String("how "));
- QCOMPARE(iface->textInterface()->text(12, 15), QLatin1String("are"));
-
QTestAccessibility::clearEvents();
// select text
@@ -2922,6 +2919,28 @@ void tst_QAccessibility::accelerators()
QTestAccessibility::clearEvents();
}
+#ifdef QT_SUPPORTS_IACCESSIBLE2
+static IUnknown *queryIA2(IAccessible *acc, const IID &iid)
+{
+ IUnknown *resultInterface = 0;
+ IServiceProvider *pService = 0;
+ HRESULT hr = acc->QueryInterface(IID_IServiceProvider, (void **)&pService);
+ if (SUCCEEDED(hr)) {
+ IAccessible2 *pIA2 = 0;
+ hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
+ if (SUCCEEDED(hr) && pIA2) {
+ // The control supports IAccessible2.
+ // pIA2 is the reference to the accessible object's IAccessible2 interface.
+ hr = pIA2->QueryInterface(iid, (void**)&resultInterface);
+ pIA2->Release();
+ }
+ // The control supports IAccessible2.
+ pService->Release();
+ }
+ return resultInterface;
+}
+#endif
+
void tst_QAccessibility::bridgeTest()
{
// For now this is a simple test to see if the bridge is working at all.
@@ -2931,27 +2950,31 @@ void tst_QAccessibility::bridgeTest()
QWidget *window = new QWidget;
QVBoxLayout *lay = new QVBoxLayout(window);
QPushButton *button = new QPushButton(tr("Push me"), window);
- QLineEdit *le = new QLineEdit(window);
+ QTextEdit *te = new QTextEdit(window);
+ te->setText(QLatin1String("hello world\nhow are you today?\n"));
lay->addWidget(button);
- lay->addWidget(le);
+ lay->addWidget(te);
window->show();
QTest::qWaitForWindowShown(window);
+
+ /**************************************************
+ * QPushButton
+ **************************************************/
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(button);
QPoint buttonPos = button->mapToGlobal(QPoint(0,0));
QRect buttonRect = iface->rect();
QCOMPARE(buttonRect.topLeft(), buttonPos);
-
// All set, now test the bridge.
POINT pt;
pt.x = buttonRect.center().x();
pt.y = buttonRect.center().y();
- IAccessible *iacc;
+ IAccessible *iaccButton;
VARIANT varChild;
- HRESULT hr = ::AccessibleObjectFromPoint(pt, &iacc, &varChild);
+ HRESULT hr = ::AccessibleObjectFromPoint(pt, &iaccButton, &varChild);
QVERIFY(SUCCEEDED(hr));
VARIANT varSELF;
varSELF.vt = VT_I4;
@@ -2959,7 +2982,7 @@ void tst_QAccessibility::bridgeTest()
// **** Test get_accRole ****
VARIANT varRole;
- hr = iacc->get_accRole(varSELF, &varRole);
+ hr = iaccButton->get_accRole(varSELF, &varRole);
QVERIFY(SUCCEEDED(hr));
QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
@@ -2967,52 +2990,106 @@ void tst_QAccessibility::bridgeTest()
// **** Test accLocation ****
long x, y, w, h;
- hr = iacc->accLocation(&x, &y, &w, &h, varSELF);
+ hr = iaccButton->accLocation(&x, &y, &w, &h, varSELF);
QCOMPARE(buttonRect, QRect(x, y, w, h));
-#ifndef Q_CC_MINGW
+#ifdef QT_SUPPORTS_IACCESSIBLE2
// Test IAccessible2 part of bridge
- IServiceProvider *pService = 0;
- hr = iacc->QueryInterface(IID_IServiceProvider, (void **)&pService);
- if (SUCCEEDED(hr)) {
- IAccessible2 *pIA2 = 0;
- hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
- if (SUCCEEDED(hr) && pIA2) {
- // The control supports IAccessible2.
- // pIA2 is the reference to the accessible object's IAccessible2 interface.
+ if (IAccessible2 *ia2Button = (IAccessible2*)queryIA2(iaccButton, IID_IAccessible2)) {
+ // The control supports IAccessible2.
+ // ia2Button is the reference to the accessible object's IAccessible2 interface.
+
+ /***** Test IAccessibleComponent *****/
+ IAccessibleComponent *ia2Component = 0;
+ hr = ia2Button->QueryInterface(IID_IAccessibleComponent, (void**)&ia2Component);
+ QVERIFY(SUCCEEDED(hr));
+ long x, y;
+ hr = ia2Component->get_locationInParent(&x, &y);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(button->pos(), QPoint(x, y));
+ ia2Component->Release();
+
+ /***** Test IAccessibleAction *****/
+ IAccessibleAction *ia2Action = 0;
+ hr = ia2Button->QueryInterface(IID_IAccessibleAction, (void**)&ia2Action);
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(ia2Action);
+ long nActions;
+ ia2Action->nActions(&nActions);
+ QVERIFY(nActions >= 1); // "Press" and "SetFocus"
+ BSTR actionName;
+ ia2Action->get_name(0, &actionName);
+ QString name((QChar*)actionName);
+ QCOMPARE(name, QAccessibleActionInterface::pressAction());
+ ia2Action->Release();
+
+
+ // Done testing
+ ia2Button->Release();
+ }
+#endif
+ iaccButton->Release();
- /***** Test IAccessibleComponent *****/
- IAccessibleComponent *ia2Component = 0;
- hr = pIA2->QueryInterface(IID_IAccessibleComponent, (void**)&ia2Component);
- QVERIFY(SUCCEEDED(hr));
- long x, y;
- hr = ia2Component->get_locationInParent(&x, &y);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(button->pos(), QPoint(x, y));
- ia2Component->Release();
-
- /***** Test IAccessibleAction *****/
- IAccessibleAction *ia2Action = 0;
- hr = pIA2->QueryInterface(IID_IAccessibleAction, (void**)&ia2Action);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(ia2Action);
- long nActions;
- ia2Action->nActions(&nActions);
- QVERIFY(nActions >= 1); // "Press" and "SetFocus"
- BSTR actionName;
- ia2Action->get_name(0, &actionName);
- QString name((QChar*)actionName);
- QCOMPARE(name, QAccessibleActionInterface::pressAction());
- ia2Action->Release();
-
- // Done testing
- pIA2->Release();
- }
- pService->Release();
+ /**************************************************
+ * QWidget
+ **************************************************/
+ QWindow *windowHandle = window->windowHandle();
+ QPlatformNativeInterface *platform = QGuiApplication::platformNativeInterface();
+ HWND hWnd = (HWND)platform->nativeResourceForWindow("handle", windowHandle);
+
+ IAccessible *iaccWindow;
+ hr = ::AccessibleObjectFromWindow(hWnd, OBJID_CLIENT, IID_IAccessible, (void**)&iaccWindow);
+ QVERIFY(SUCCEEDED(hr));
+ hr = iaccWindow->get_accRole(varSELF, &varRole);
+ QVERIFY(SUCCEEDED(hr));
+
+ QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
+ QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_CLIENT);
+
+ long nChildren;
+ hr = iaccWindow->get_accChildCount(&nChildren);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(nChildren, (long)2);
+
+ /**************************************************
+ * QTextEdit
+ **************************************************/
+ // Get the second child (the accessible interface for the text edit)
+ varChild.vt = VT_I4;
+ varChild.lVal = 2;
+ QVERIFY(iaccWindow);
+ IAccessible *iaccTextEdit;
+ hr = iaccWindow->get_accChild(varChild, (IDispatch**)&iaccTextEdit);
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(iaccTextEdit);
+ hr = iaccTextEdit->get_accRole(varSELF, &varRole);
+ QVERIFY(SUCCEEDED(hr));
+
+ QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
+ QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_TEXT);
+
+
+
+#ifdef QT_SUPPORTS_IACCESSIBLE2
+ if (IAccessibleEditableText *ia2TextEdit = (IAccessibleEditableText*)queryIA2(iaccTextEdit, IID_IAccessibleEditableText)) {
+ ia2TextEdit->copyText(6, 11);
+ QCOMPARE(QApplication::clipboard()->text(), QLatin1String("world"));
+ ia2TextEdit->cutText(12, 16);
+ QCOMPARE(QApplication::clipboard()->text(), QLatin1String("how "));
+ ia2TextEdit->Release();
+ }
+ if (IAccessibleText *ia2Text = (IAccessibleText*)queryIA2(iaccTextEdit, IID_IAccessibleText)) {
+ BSTR txt;
+ hr = ia2Text->get_text(12, 15, &txt);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(QString((QChar*)txt), QLatin1String("are"));
+ ia2Text->Release();
}
#endif
- iacc->Release();
+ iaccTextEdit->Release();
+
+ iaccWindow->Release();
QTestAccessibility::clearEvents();
#endif
}