summaryrefslogtreecommitdiffstats
path: root/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/other/qaccessibility/tst_qaccessibility.cpp')
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp136
1 files changed, 96 insertions, 40 deletions
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index ab5b36cf69..f5f336ed64 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -236,6 +236,7 @@ private slots:
void eventTest();
void customWidget();
void deletedWidget();
+ void subclassedWidget();
void statesStructTest();
void navigateHierarchy();
@@ -294,38 +295,6 @@ QAccessible::State state(QWidget * const widget)
return iface->state();
}
-class QtTestAccessibleWidget: public QWidget
-{
- Q_OBJECT
-public:
- QtTestAccessibleWidget(QWidget *parent, const char *name): QWidget(parent)
- {
- setObjectName(name);
- QPalette pal;
- pal.setColor(backgroundRole(), Qt::black);//black is beautiful
- setPalette(pal);
- setFixedSize(5, 5);
- }
-};
-
-class QtTestAccessibleWidgetIface: public QAccessibleWidget
-{
-public:
- QtTestAccessibleWidgetIface(QtTestAccessibleWidget *w): QAccessibleWidget(w) {}
- QString text(QAccessible::Text t) const
- {
- if (t == QAccessible::Help)
- return QString::fromLatin1("Help yourself");
- return QAccessibleWidget::text(t);
- }
- static QAccessibleInterface *ifaceFactory(const QString &key, QObject *o)
- {
- if (key == "QtTestAccessibleWidget")
- return new QtTestAccessibleWidgetIface(static_cast<QtTestAccessibleWidget*>(o));
- return 0;
- }
-};
-
tst_QAccessibility::tst_QAccessibility()
{
click_count = 0;
@@ -343,7 +312,6 @@ void tst_QAccessibility::onClicked()
void tst_QAccessibility::initTestCase()
{
QTestAccessibility::initialize();
- QAccessible::installFactory(QtTestAccessibleWidgetIface::ifaceFactory);
}
void tst_QAccessibility::cleanupTestCase()
@@ -398,24 +366,95 @@ void tst_QAccessibility::eventTest()
delete button;
}
+
+class QtTestAccessibleWidget: public QWidget
+{
+ Q_OBJECT
+public:
+ QtTestAccessibleWidget(QWidget *parent, const char *name): QWidget(parent)
+ {
+ setObjectName(name);
+ }
+};
+
+class QtTestAccessibleWidgetIface: public QAccessibleWidget
+{
+public:
+ QtTestAccessibleWidgetIface(QtTestAccessibleWidget *w): QAccessibleWidget(w) {}
+ QString text(QAccessible::Text t) const
+ {
+ if (t == QAccessible::Help)
+ return QString::fromLatin1("Help yourself");
+ return QAccessibleWidget::text(t);
+ }
+ static QAccessibleInterface *ifaceFactory(const QString &key, QObject *o)
+ {
+ if (key == "QtTestAccessibleWidget")
+ return new QtTestAccessibleWidgetIface(static_cast<QtTestAccessibleWidget*>(o));
+ return 0;
+ }
+};
+
+class QtTestAccessibleWidgetSubclass: public QtTestAccessibleWidget
+{
+ Q_OBJECT
+public:
+ QtTestAccessibleWidgetSubclass(QWidget *parent, const char *name): QtTestAccessibleWidget(parent, name)
+ {}
+};
+
void tst_QAccessibility::customWidget()
{
+ {
QtTestAccessibleWidget* widget = new QtTestAccessibleWidget(0, "Heinz");
-
+ widget->show();
+ QTest::qWaitForWindowExposed(widget);
+ // By default we create QAccessibleWidget
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
+ QVERIFY(iface != 0);
+ QVERIFY(iface->isValid());
+ QCOMPARE(iface->object(), (QObject*)widget);
+ QCOMPARE(iface->object()->objectName(), QString("Heinz"));
+ QCOMPARE(iface->rect().height(), widget->height());
+ QCOMPARE(iface->text(QAccessible::Help), QString());
+ QCOMPARE(iface->rect().height(), widget->height());
+ delete iface;
+ delete widget;
+ }
+ {
+ QAccessible::installFactory(QtTestAccessibleWidgetIface::ifaceFactory);
+ QtTestAccessibleWidget* widget = new QtTestAccessibleWidget(0, "Heinz");
+ widget->show();
+ QTest::qWaitForWindowExposed(widget);
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
QVERIFY(iface != 0);
QVERIFY(iface->isValid());
QCOMPARE(iface->object(), (QObject*)widget);
QCOMPARE(iface->object()->objectName(), QString("Heinz"));
+ QCOMPARE(iface->rect().height(), widget->height());
+ // The help text is only set if our factory works
QCOMPARE(iface->text(QAccessible::Help), QString("Help yourself"));
-
delete iface;
delete widget;
+ }
+ {
+ // A subclass of any class should still get the right QAccessibleInterface
+ QtTestAccessibleWidgetSubclass* subclassedWidget = new QtTestAccessibleWidgetSubclass(0, "Hans");
+ QAccessibleInterface *subIface = QAccessible::queryAccessibleInterface(subclassedWidget);
+ QVERIFY(subIface != 0);
+ QVERIFY(subIface->isValid());
+ QCOMPARE(subIface->object(), (QObject*)subclassedWidget);
+ QCOMPARE(subIface->text(QAccessible::Help), QString("Help yourself"));
+ delete subIface;
+ delete subclassedWidget;
+ }
+ QTestAccessibility::clearEvents();
}
void tst_QAccessibility::deletedWidget()
{
QtTestAccessibleWidget *widget = new QtTestAccessibleWidget(0, "Ralf");
+ QAccessible::installFactory(QtTestAccessibleWidgetIface::ifaceFactory);
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
QVERIFY(iface != 0);
QVERIFY(iface->isValid());
@@ -427,6 +466,25 @@ void tst_QAccessibility::deletedWidget()
delete iface;
}
+class KFooButton: public QPushButton
+{
+ Q_OBJECT
+public:
+ KFooButton(const QString &text, QWidget* parent = 0) : QPushButton(text, parent)
+ {}
+};
+
+void tst_QAccessibility::subclassedWidget()
+{
+ KFooButton button("Ploink", 0);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&button);
+ QVERIFY(iface);
+ QCOMPARE(iface->object(), (QObject*)&button);
+ QCOMPARE(iface->text(QAccessible::Name), button.text());
+ delete iface;
+ QTestAccessibility::clearEvents();
+}
+
void tst_QAccessibility::statesStructTest()
{
QAccessible::State s1;
@@ -598,10 +656,8 @@ void tst_QAccessibility::accessibleName()
{
QWidget *toplevel = createWidgets();
toplevel->show();
-#if defined(Q_OS_UNIX)
- QCoreApplication::processEvents();
- QTest::qWait(100);
-#endif
+ QVERIFY(QTest::qWaitForWindowExposed(toplevel));
+
QLayout *lout = toplevel->layout();
for (int i = 0; i < lout->count(); i++) {
QLayoutItem *item = lout->itemAt(i);
@@ -610,12 +666,12 @@ void tst_QAccessibility::accessibleName()
QString name = tr("Widget Name %1").arg(i);
child->setAccessibleName(name);
QAccessibleInterface *acc = QAccessible::queryAccessibleInterface(child);
+ QVERIFY(acc);
QCOMPARE(acc->text(QAccessible::Name), name);
QString desc = tr("Widget Description %1").arg(i);
child->setAccessibleDescription(desc);
QCOMPARE(acc->text(QAccessible::Description), desc);
-
}
delete toplevel;