mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-06 17:25:24 +08:00
6.5.3 clean
This commit is contained in:
@ -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"
|
||||
|
Reference in New Issue
Block a user