Commit 00666784 authored by Alexander Surkov's avatar Alexander Surkov Committed by Commit Bot

DumpAccTree testing: support NSRange parameters

Bug: 1096512
Change-Id: I15c797578815ee2d706cf2311cdb2ec722fcb67e
AX-Relnotes: n/a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2252602
Commit-Queue: Alexander Surkov <asurkov@igalia.com>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780287}
parent 47ebd1ff
...@@ -112,6 +112,7 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase { ...@@ -112,6 +112,7 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase {
IdOrError ParamByPropertyNode(const PropertyNode&) const; IdOrError ParamByPropertyNode(const PropertyNode&) const;
NSNumber* PropertyNodeToInt(const PropertyNode&) const; NSNumber* PropertyNodeToInt(const PropertyNode&) const;
NSArray* PropertyNodeToIntArray(const PropertyNode&) const; NSArray* PropertyNodeToIntArray(const PropertyNode&) const;
NSValue* PropertyNodeToRange(const PropertyNode&) const;
base::Value PopulateSize(const BrowserAccessibilityCocoa*) const; base::Value PopulateSize(const BrowserAccessibilityCocoa*) const;
base::Value PopulatePosition(const BrowserAccessibilityCocoa*) const; base::Value PopulatePosition(const BrowserAccessibilityCocoa*) const;
...@@ -295,11 +296,14 @@ AccessibilityTreeFormatterMac::ParamByPropertyNode( ...@@ -295,11 +296,14 @@ AccessibilityTreeFormatterMac::ParamByPropertyNode(
param = PropertyNodeToInt(property_node); param = PropertyNodeToInt(property_node);
} else if (property_name == "AXCellForColumnAndRow") { // IntArray } else if (property_name == "AXCellForColumnAndRow") { // IntArray
param = PropertyNodeToIntArray(property_node); param = PropertyNodeToIntArray(property_node);
} else if (property_name == "AXStringForRange") { // NSRange
param = PropertyNodeToRange(property_node);
} }
return param; return param;
} }
// NSNumber. Format: integer.
NSNumber* AccessibilityTreeFormatterMac::PropertyNodeToInt( NSNumber* AccessibilityTreeFormatterMac::PropertyNodeToInt(
const PropertyNode& propnode) const { const PropertyNode& propnode) const {
if (propnode.parameters.size() != 1) { if (propnode.parameters.size() != 1) {
...@@ -318,6 +322,7 @@ NSNumber* AccessibilityTreeFormatterMac::PropertyNodeToInt( ...@@ -318,6 +322,7 @@ NSNumber* AccessibilityTreeFormatterMac::PropertyNodeToInt(
return [NSNumber numberWithInt:*param]; return [NSNumber numberWithInt:*param];
} }
// NSArray of two NSNumber. Format: [integer, integer].
NSArray* AccessibilityTreeFormatterMac::PropertyNodeToIntArray( NSArray* AccessibilityTreeFormatterMac::PropertyNodeToIntArray(
const PropertyNode& propnode) const { const PropertyNode& propnode) const {
if (propnode.parameters.size() != 1) { if (propnode.parameters.size() != 1) {
...@@ -349,6 +354,41 @@ NSArray* AccessibilityTreeFormatterMac::PropertyNodeToIntArray( ...@@ -349,6 +354,41 @@ NSArray* AccessibilityTreeFormatterMac::PropertyNodeToIntArray(
return array; return array;
} }
// NSRange. Format: {loc: integer, len: integer}.
NSValue* AccessibilityTreeFormatterMac::PropertyNodeToRange(
const PropertyNode& propnode) const {
if (propnode.parameters.size() != 1) {
LOG(ERROR) << "Failed to parse " << propnode.original_property
<< " to NSRange: single argument is expected";
return nil;
}
const auto& dictnode = propnode.parameters[0];
if (!dictnode.IsDict()) {
LOG(ERROR) << "Failed to parse " << propnode.original_property
<< " to NSRange: dictionary is expected";
return nil;
}
base::Optional<int> loc = dictnode.FindIntKey("loc");
if (!loc) {
LOG(ERROR) << "Failed to parse " << propnode.original_property
<< " to NSRange: no loc key or loc key value "
<< dictnode.name_or_value << " is not a number";
return nil;
}
base::Optional<int> len = dictnode.FindIntKey("len");
if (!len) {
LOG(ERROR) << "Failed to parse " << propnode.original_property
<< " to NSRange: no len key or len key value "
<< dictnode.name_or_value << " is not a number";
return nil;
}
return [NSValue valueWithRange:NSMakeRange(*loc, *len)];
}
base::Value AccessibilityTreeFormatterMac::PopulateSize( base::Value AccessibilityTreeFormatterMac::PopulateSize(
const BrowserAccessibilityCocoa* cocoa_node) const { const BrowserAccessibilityCocoa* cocoa_node) const {
base::Value size(base::Value::Type::DICTIONARY); base::Value size(base::Value::Type::DICTIONARY);
......
...@@ -191,4 +191,24 @@ IN_PROC_BROWSER_TEST_F(AccessibilityTreeFormatterMacBrowserTest, ...@@ -191,4 +191,24 @@ IN_PROC_BROWSER_TEST_F(AccessibilityTreeFormatterMacBrowserTest,
)~~"); )~~");
} }
IN_PROC_BROWSER_TEST_F(AccessibilityTreeFormatterMacBrowserTest,
ParameterizedAttributes_NSRange) {
TestAndCheck(R"~~(data:text/html,
<p contentEditable='true'>Text</p>)~~",
{":2;AXStringForRange({loc: 1, len: 2})=*"}, R"~~(AXWebArea
++AXTextArea AXStringForRange({loc: 1, len: 2})='ex' AXValue='Text'
++++AXStaticText AXValue='Text'
)~~");
}
IN_PROC_BROWSER_TEST_F(AccessibilityTreeFormatterMacBrowserTest,
ParameterizedAttributes_NSRAnge_WrongArgs) {
TestAndCheck(R"~~(data:text/html,
<p contentEditable='true'>Text</p>)~~",
{":2;AXStringForRange({loco: 1, leno: 2})=*"}, R"~~(AXWebArea
++AXTextArea AXStringForRange({loco: 1, leno: 2})=ERROR:FAILED_TO_PARSE_ARGS AXValue='Text'
++++AXStaticText AXValue='Text'
)~~");
}
} // namespace content } // namespace content
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment