6.5.3 clean

This commit is contained in:
kleuter
2023-11-01 18:02:52 +01:00
parent bbe896803b
commit 7018d9e6c8
2170 changed files with 57471 additions and 43550 deletions

View File

@ -62,6 +62,7 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
@interface TestAXObject : NSObject
{
AXUIElementRef reference;
bool axError;
}
@property (readonly) NSString *role;
@property (readonly) NSString *title;
@ -77,11 +78,13 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
if ((self = [super init])) {
reference = ref;
axError = false;
}
return self;
}
- (AXUIElementRef) ref { return reference; }
- (bool)errorOccurred { return axError; }
- (void) print {
NSLog(@"Accessible Object role: '%@', title: '%@', description: '%@', value: '%@', rect: '%@'", self.role, self.title, self.description, self.value, NSStringFromRect(NSRectFromCGRect(self.rect)));
NSLog(@" Children: %ld", [[self childList] count]);
@ -225,8 +228,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
CFTypeRef value = NULL;
AXError err;
if (kAXErrorSuccess != (err = AXUIElementCopyAttributeValue(reference, attribute, &value)))
{
if (kAXErrorSuccess != (err = AXUIElementCopyAttributeValue(reference, attribute, &value))) {
axError = true;
qDebug() << "AXUIElementCopyAttributeValue(" << QString::fromCFString(attribute) << ") returned error = " << AXErrorTag(err);
}
return value;
@ -272,8 +275,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
CFTypeRef value = NULL;
AXError err;
if (kAXErrorSuccess != (err = AXUIElementCopyParameterizedAttributeValue(reference, attribute, parameter, &value)))
{
if (kAXErrorSuccess != (err = AXUIElementCopyParameterizedAttributeValue(reference, attribute, parameter, &value))) {
axError = true;
CFStringRef description = CFCopyDescription(parameter);
qDebug() << "AXUIElementCopyParameterizedAttributeValue(" << QString::fromCFString(attribute) << ", parameter=" << QString::fromCFString(description) << ") returned error = " << AXErrorTag(err);
CFRelease(description);
@ -311,8 +314,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
AXError err;
CFArrayRef actions;
if (kAXErrorSuccess != (err = AXUIElementCopyActionNames(reference, &actions)))
{
if (kAXErrorSuccess != (err = AXUIElementCopyActionNames(reference, &actions))) {
axError = true;
qDebug() << "AXUIElementCopyActionNames(...) returned error = " << AXErrorTag(err);
}
@ -323,8 +326,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
{
AXError err;
if (kAXErrorSuccess != (err = AXUIElementPerformAction(reference, action)))
{
if (kAXErrorSuccess != (err = AXUIElementPerformAction(reference, action))) {
axError = true;
qDebug() << "AXUIElementPerformAction(" << QString::fromCFString(action) << ") returned error = " << AXErrorTag(err);
}
}
@ -407,6 +410,7 @@ private Q_SLOTS:
void notificationsTest();
void checkBoxTest();
void tableViewTest();
void treeViewTest();
private:
AccessibleTestWindow *m_window;
@ -416,7 +420,7 @@ private:
void tst_QAccessibilityMac::init()
{
m_window = new AccessibleTestWindow();
m_window->setWindowTitle("Test window");
m_window->setWindowTitle(QString("Test window - %1").arg(QTest::currentTestFunction()));
m_window->show();
m_window->resize(400, 400);
@ -481,7 +485,7 @@ void tst_QAccessibilityMac::lineEditTest()
// height of window includes title bar
QVERIFY([window rect].size.height >= 400);
QVERIFY([window.title isEqualToString:@"Test window"]);
QVERIFY([window.title isEqualToString:@"Test window - lineEditTest"]);
// children of window:
AXUIElementRef lineEditElement = [window findDirectChildByRole: kAXTextFieldRole];
@ -732,5 +736,73 @@ void tst_QAccessibilityMac::tableViewTest()
}
}
void tst_QAccessibilityMac::treeViewTest()
{
QTreeWidget *tw = new QTreeWidget;
tw->setColumnCount(2);
QTreeWidgetItem *root = new QTreeWidgetItem(tw, {"/", "0"});
root->setExpanded(false);
QTreeWidgetItem *users = new QTreeWidgetItem(root,{ "Users", "1"});
(void)new QTreeWidgetItem(root, {"Applications", "2"});
QTreeWidgetItem *lastChild = new QTreeWidgetItem(root, {"Libraries", "3"});
m_window->addWidget(tw);
QVERIFY(QTest::qWaitForWindowExposed(m_window));
QCoreApplication::processEvents();
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
QVERIFY(appObject);
NSArray *windowList = [appObject windowList];
// one window
QVERIFY([windowList count] == 1);
AXUIElementRef windowRef = (AXUIElementRef)[windowList objectAtIndex:0];
QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef:windowRef];
// children of window
AXUIElementRef treeView = [window findDirectChildByRole:kAXOutlineRole];
QVERIFY(treeView != nil);
TestAXObject *tv = [[TestAXObject alloc] initWithAXUIElementRef:treeView];
// here start actual treeview tests. NSAccessibilityOutline is a specialization
// of NSAccessibilityTable, and we represent trees as tables.
// Should have 2 columns
const unsigned int columnCount = 2;
NSArray *columnArray = [tv tableColumns];
QCOMPARE([columnArray count], columnCount);
// should have 1 row for now - as long as the root item is not expanded
NSArray *rowArray = [tv tableRows];
QCOMPARE(int([rowArray count]), 1);
root->setExpanded(true);
rowArray = [tv tableRows];
QCOMPARE(int([rowArray count]), root->childCount() + 1);
// this should not trigger any assert
tw->setCurrentItem(lastChild);
bool errorOccurred = false;
const auto cellText = [rowArray, &errorOccurred](int rowIndex, int columnIndex) -> QString {
TestAXObject *row = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)rowArray[rowIndex]];
Q_ASSERT(row);
TestAXObject *cell = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)[row childList][columnIndex]];
Q_ASSERT(cell);
const QString result = QString::fromNSString(cell.title);
errorOccurred = cell.errorOccurred;
return result;
};
QString text = cellText(0, 0);
if (errorOccurred)
QSKIP("Cocoa Accessibility API error, aborting");
QCOMPARE(text, root->text(0));
QCOMPARE(cellText(1, 0), users->text(0));
QCOMPARE(cellText(1, 1), users->text(1));
}
QTEST_MAIN(tst_QAccessibilityMac)
#include "tst_qaccessibilitymac.moc"