a11y tests: Port AccessibleFixedText test to C++

Port this Java a11y test to C++.
This mostly ports the existing logic from
Java to C++ and switches to the existing
helpers for testing the XAccessible* interfaces.

Change-Id: Ib39b2d301b98896a5ce29cd90c56c0d97e8cb892
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186679
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn
2025-06-19 19:37:04 +02:00
parent 9bec15a39f
commit 00b7325a50
8 changed files with 157 additions and 215 deletions
+2
View File
@@ -98,6 +98,8 @@ protected:
void dumpA11YTree(const css::uno::Reference<css::accessibility::XAccessibleContext>& xContext,
const int depth = 0);
void dumpA11YTree(const css::uno::Reference<css::accessibility::XAccessible>& xAccessible,
const int depth = 0);
css::uno::Reference<css::accessibility::XAccessibleContext>
getItemFromName(const css::uno::Reference<css::accessibility::XAccessibleContext>& xMenuCtx,
-1
View File
@@ -1146,7 +1146,6 @@ $(eval $(call gb_Jar_add_sourcefiles,OOoRunner,\
qadevOOo/tests/java/mod/_toolkit/AccessibleComboBox \
qadevOOo/tests/java/mod/_toolkit/AccessibleDropDownComboBox \
qadevOOo/tests/java/mod/_toolkit/AccessibleEdit \
qadevOOo/tests/java/mod/_toolkit/AccessibleFixedText \
qadevOOo/tests/java/mod/_toolkit/AccessibleList \
qadevOOo/tests/java/mod/_toolkit/AccessibleListBox \
qadevOOo/tests/java/mod/_toolkit/AccessibleListItem \
@@ -1,40 +0,0 @@
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleExtendedComponent";"getTitledBorderText()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleExtendedComponent";"getToolTipText()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleEventBroadcaster";"addEventListener()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleEventBroadcaster";"removeEventListener()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"containsPoint()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getAccessibleAtPoint()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getBounds()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getLocation()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getLocationOnScreen()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getSize()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"grabFocus()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getForeground()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleComponent";"getBackground()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getCaretPosition()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"setCaretPosition()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getCharacter()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getCharacterAttributes()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getCharacterBounds()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getCharacterCount()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getIndexAtPoint()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getSelectedText()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getSelectionStart()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getSelectionEnd()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"setSelection()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getText()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getTextRange()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getTextAtIndex()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getTextBeforeIndex()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"getTextBehindIndex()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleText";"copyText()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleChildCount()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleChild()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleParent()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleIndexInParent()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleRole()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleDescription()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleName()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleRelationSet()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getAccessibleStateSet()"
"AccessibleFixedText";"com::sun::star::accessibility::XAccessibleContext";"getLocale()"
1 AccessibleFixedText com::sun::star::accessibility::XAccessibleExtendedComponent getTitledBorderText()
2 AccessibleFixedText com::sun::star::accessibility::XAccessibleExtendedComponent getToolTipText()
3 AccessibleFixedText com::sun::star::accessibility::XAccessibleEventBroadcaster addEventListener()
4 AccessibleFixedText com::sun::star::accessibility::XAccessibleEventBroadcaster removeEventListener()
5 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent containsPoint()
6 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getAccessibleAtPoint()
7 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getBounds()
8 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getLocation()
9 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getLocationOnScreen()
10 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getSize()
11 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent grabFocus()
12 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getForeground()
13 AccessibleFixedText com::sun::star::accessibility::XAccessibleComponent getBackground()
14 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getCaretPosition()
15 AccessibleFixedText com::sun::star::accessibility::XAccessibleText setCaretPosition()
16 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getCharacter()
17 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getCharacterAttributes()
18 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getCharacterBounds()
19 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getCharacterCount()
20 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getIndexAtPoint()
21 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getSelectedText()
22 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getSelectionStart()
23 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getSelectionEnd()
24 AccessibleFixedText com::sun::star::accessibility::XAccessibleText setSelection()
25 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getText()
26 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getTextRange()
27 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getTextAtIndex()
28 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getTextBeforeIndex()
29 AccessibleFixedText com::sun::star::accessibility::XAccessibleText getTextBehindIndex()
30 AccessibleFixedText com::sun::star::accessibility::XAccessibleText copyText()
31 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleChildCount()
32 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleChild()
33 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleParent()
34 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleIndexInParent()
35 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleRole()
36 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleDescription()
37 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleName()
38 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleRelationSet()
39 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getAccessibleStateSet()
40 AccessibleFixedText com::sun::star::accessibility::XAccessibleContext getLocale()
@@ -1,173 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
package mod._toolkit;
import com.sun.star.accessibility.AccessibleRole;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.accessibility.XAccessibleText;
import com.sun.star.awt.PosSize;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XControlContainer;
import com.sun.star.awt.XControlModel;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XWindow;
import com.sun.star.awt.XLayoutConstrains;
import com.sun.star.awt.Size;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import java.io.PrintWriter;
import lib.TestCase;
import lib.TestEnvironment;
import lib.TestParameters;
import util.AccessibilityTools;
import util.utils;
/**
* Test for object which is represented by accessible component
* of the fixed text label in 'Hyperlink' Dialog. <p>
*
* Object implements the following interfaces :
* <ul>
* <li> <code>::com::sun::star::accessibility::XAccessibleExtendedComponent</code></li>
* <li> <code>::com::sun::star::accessibility::XAccessibleEventBroadcaster</code></li>
* <li> <code>::com::sun::star::accessibility::XAccessibleComponent</code></li>
* <li> <code>::com::sun::star::accessibility::XAccessibleContext</code></li>
* <li> <code>::com::sun::star::accessibility::XAccessibleText</code></li>
* </ul> <p>
*
* @see com.sun.star.accessibility.XAccessibleExtendedComponent
* @see com.sun.star.accessibility.XAccessibleEventBroadcaster
* @see com.sun.star.accessibility.XAccessibleComponent
* @see com.sun.star.accessibility.XAccessibleContext
* @see com.sun.star.accessibility.XAccessibleText
* @see ifc.accessibility._XAccessibleExtendedComponent
* @see ifc.accessibility._XAccessibleEventBroadcaster
* @see ifc.accessibility._XAccessibleComponent
* @see ifc.accessibility._XAccessibleContext
* @see ifc.accessibility._XAccessibleText
*/
public class AccessibleFixedText extends TestCase {
private static XWindow xWinDlg = null;
/**
* Creates a new dialog adds fixed text control to it and
* displays it. Then the text's accessible component is
* obtained.
*/
@Override
protected TestEnvironment createTestEnvironment(TestParameters Param,
PrintWriter log) throws Exception {
XMultiServiceFactory xMSF = Param.getMSF();
XControlModel dlgModel = UnoRuntime.queryInterface(
XControlModel.class,
xMSF.createInstance(
"com.sun.star.awt.UnoControlDialogModel"));
XControl dlgControl = UnoRuntime.queryInterface(
XControl.class,
xMSF.createInstance(
"com.sun.star.awt.UnoControlDialog"));
dlgControl.setModel(dlgModel);
XControlModel txtModel = UnoRuntime.queryInterface(
XControlModel.class,
xMSF.createInstance(
"com.sun.star.awt.UnoControlFixedTextModel"));
XControl txtControl = UnoRuntime.queryInterface(XControl.class,
xMSF.createInstance(
"com.sun.star.awt.UnoControlFixedText"));
txtControl.setModel(txtModel);
XFixedText xFT = UnoRuntime.queryInterface(
XFixedText.class, txtControl);
xFT.setText("FxedText");
/* Set the text control to its preferred size, otherwise it
* defaults to the size hard coded in its constructor (100 x 12) */
XLayoutConstrains xLCTxt = UnoRuntime.queryInterface(
XLayoutConstrains.class, txtControl);
Size textSize = xLCTxt.getPreferredSize();
XWindow xWinTxt = UnoRuntime.queryInterface(
XWindow.class, txtControl);
xWinTxt.setPosSize(0, 0, textSize.Width, textSize.Height,
PosSize.SIZE);
XControlContainer ctrlCont = UnoRuntime.queryInterface(
XControlContainer.class,
dlgControl);
ctrlCont.addControl("Text", txtControl);
xWinDlg = UnoRuntime.queryInterface(XWindow.class,
dlgControl);
xWinDlg.setVisible(true);
xWinDlg.setPosSize(0, 0, 200, 100, PosSize.SIZE);
util.utils.waitForEventIdle(Param.getMSF());
XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWinDlg);
AccessibilityTools.printAccessibleTree(log, xRoot, Param.getBool(util.PropertyName.DEBUG_IS_ACTIVE));
XAccessibleContext xLabel = AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.LABEL);
log.println("ImplementationName " + utils.getImplName(xLabel));
TestEnvironment tEnv = new TestEnvironment(xLabel);
tEnv.addObjRelation("EventProducer",
new ifc.accessibility._XAccessibleEventBroadcaster.EventProducer() {
public void fireEvent() {
xWinTxt.setEnable(false);
xWinTxt.setEnable(true);
}
});
XAccessibleText text = UnoRuntime.queryInterface(
XAccessibleText.class, xLabel);
tEnv.addObjRelation("XAccessibleText.Text", text.getText());
tEnv.addObjRelation("EditOnly",
"This method isn't supported in this component");
tEnv.addObjRelation("LimitedBounds", "yes");
return tEnv;
}
/**
* Closes dialog using action of button 'Close'
*/
@Override
protected void cleanup(TestParameters Param, PrintWriter log) {
log.println(" Closing dialog ... ");
if (xWinDlg != null)
xWinDlg.dispose();
}
}
+7
View File
@@ -322,6 +322,13 @@ void test::AccessibleTestBase::dumpA11YTree(
}
}
void test::AccessibleTestBase::dumpA11YTree(
const uno::Reference<accessibility::XAccessible>& xAccessible, const int depth)
{
assert(xAccessible.is());
dumpA11YTree(xAccessible->getAccessibleContext(), depth);
}
/** Gets a child by name (usually in a menu) */
uno::Reference<accessibility::XAccessibleContext> test::AccessibleTestBase::getItemFromName(
const uno::Reference<accessibility::XAccessibleContext>& xMenuCtx, std::u16string_view name)
+1
View File
@@ -10,6 +10,7 @@
$(eval $(call gb_CppunitTest_CppunitTest,toolkit_a11y))
$(eval $(call gb_CppunitTest_add_exception_objects,toolkit_a11y, \
toolkit/qa/cppunit/a11y/AccessibleFixedTextTest \
toolkit/qa/cppunit/a11y/AccessibleStatusBarTest \
))
@@ -0,0 +1,147 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <com/sun/star/accessibility/AccessibleRole.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>
#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
#include <com/sun/star/accessibility/XAccessibleContext.hpp>
#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/awt/XControlContainer.hpp>
#include <com/sun/star/awt/XFixedText.hpp>
#include <com/sun/star/awt/XLayoutConstrains.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <test/a11y/AccessibilityTools.hxx>
#include <test/a11y/XAccessibleComponentTester.hxx>
#include <test/a11y/XAccessibleContextTester.hxx>
#include <test/a11y/XAccessibleExtendedComponentTester.hxx>
#include <test/a11y/XAccessibleEventBroadcasterTester.hxx>
#include <test/a11y/XAccessibleTextTester.hxx>
#include <test/a11y/accessibletestbase.hxx>
#include <vcl/scheduler.hxx>
using namespace css;
namespace
{
class AccessibleFixedTextTest : public test::AccessibleTestBase
{
private:
void testFixedText();
void
runInterfaceTests(const uno::Reference<accessibility::XAccessibleContext>& rxFixedTextContext,
css::uno::Reference<css::awt::XWindow>& rxFixedTextWindow);
public:
CPPUNIT_TEST_SUITE(AccessibleFixedTextTest);
CPPUNIT_TEST(testFixedText);
CPPUNIT_TEST_SUITE_END();
};
void AccessibleFixedTextTest::testFixedText()
{
uno::Reference<lang::XMultiComponentFactory> xFactory(m_xContext->getServiceManager(),
uno::UNO_SET_THROW);
uno::Reference<awt::XControlModel> xDlgModel(
xFactory->createInstanceWithContext(u"com.sun.star.awt.UnoControlDialogModel"_ustr,
m_xContext),
uno::UNO_QUERY_THROW);
css::uno::Reference<css::awt::XControl> xDlgControl(
xFactory->createInstanceWithContext(u"com.sun.star.awt.UnoControlDialog"_ustr, m_xContext),
css::uno::UNO_QUERY_THROW);
xDlgControl->setModel(xDlgModel);
css::uno::Reference<css::awt::XControlModel> xFixedTextModel(
xFactory->createInstanceWithContext(u"com.sun.star.awt.UnoControlFixedTextModel"_ustr,
m_xContext),
css::uno::UNO_QUERY_THROW);
css::uno::Reference<css::awt::XControl> xFixedTextControl(
xFactory->createInstanceWithContext(u"com.sun.star.awt.UnoControlFixedText"_ustr,
m_xContext),
css::uno::UNO_QUERY_THROW);
xFixedTextControl->setModel(xFixedTextModel);
css::uno::Reference<css::awt::XFixedText> xFT(xFixedTextControl, css::uno::UNO_QUERY_THROW);
xFT->setText("FxedText");
/* Set the text control to its preferred size, otherwise it
* defaults to the size hard coded in its constructor (100 x 12) */
css::uno::Reference<css::awt::XLayoutConstrains> xLCTxt(xFixedTextControl,
css::uno::UNO_QUERY_THROW);
css::awt::Size textSize = xLCTxt->getPreferredSize();
css::uno::Reference<css::awt::XWindow> xWinTxt(xFixedTextControl, css::uno::UNO_QUERY_THROW);
xWinTxt->setPosSize(0, 0, textSize.Width, textSize.Height, css::awt::PosSize::SIZE);
css::uno::Reference<css::awt::XControlContainer> xControlContainer(xDlgControl,
css::uno::UNO_QUERY_THROW);
xControlContainer->addControl(u"Text"_ustr, xFixedTextControl);
css::uno::Reference<css::awt::XWindow> xWinDlg(xDlgControl, css::uno::UNO_QUERY_THROW);
xWinDlg->setVisible(true);
xWinDlg->setPosSize(0, 0, 200, 100, css::awt::PosSize::SIZE);
Scheduler::ProcessEventsToIdle();
css::uno::Reference<css::accessibility::XAccessible> xRoot(xWinDlg, css::uno::UNO_QUERY_THROW);
test::AccessibleTestBase::dumpA11YTree(xRoot);
css::uno::Reference<css::accessibility::XAccessibleContext> xContext
= AccessibilityTools::getAccessibleObjectForRole(xRoot,
css::accessibility::AccessibleRole::LABEL);
runInterfaceTests(xContext, xWinTxt);
}
void AccessibleFixedTextTest::runInterfaceTests(
const uno::Reference<accessibility::XAccessibleContext>& rxContext,
css::uno::Reference<css::awt::XWindow>& rxFixedTextWindow)
{
XAccessibleContextTester aContextTester(rxContext);
aContextTester.testAll();
uno::Reference<accessibility::XAccessibleComponent> xAccessibleComponent(rxContext,
uno::UNO_QUERY_THROW);
XAccessibleComponentTester aComponentTester(xAccessibleComponent);
aComponentTester.testAll();
uno::Reference<accessibility::XAccessibleExtendedComponent> xAccessibleExtendedComponent(
rxContext, uno::UNO_QUERY_THROW);
XAccessibleExtendedComponentTester aExtendedComponentTester(xAccessibleExtendedComponent);
aExtendedComponentTester.testAll();
uno::Reference<accessibility::XAccessibleEventBroadcaster> xAccessibleEventBroadcaster(
rxContext, uno::UNO_QUERY_THROW);
auto aFireEventFunc = [&rxFixedTextWindow] {
rxFixedTextWindow->setEnable(false);
rxFixedTextWindow->setEnable(true);
};
XAccessibleEventBroadcasterTester aEventBroadcasterTester(xAccessibleEventBroadcaster,
aFireEventFunc);
aEventBroadcasterTester.testAll();
XAccessibleTextTester aTextTester(rxContext);
aTextTester.testAll();
}
CPPUNIT_TEST_SUITE_REGISTRATION(AccessibleFixedTextTest);
} // namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
-1
View File
@@ -21,7 +21,6 @@
#i86008 -o toolkit.AccessibleComboBox
-o toolkit.AccessibleDropDownComboBox
#i86110 -o toolkit.AccessibleEdit
-o toolkit.AccessibleFixedText
#i86110 -o toolkit.AccessibleList
#i86110 -o toolkit.AccessibleListBox
#i86110 -o toolkit.AccessibleListItem