Skip to content

Commit

Permalink
Implement ExpandToEnclosingUnit for TextUnit_Format
Browse files Browse the repository at this point in the history
This change builds upon the functionality for AXPosition added in
https://chromium-review.googlesource.com/c/chromium/src/+/1584596

Unit tests were added.

Bug: 928948
Change-Id: Id52d39a73725a35a9b041ea2c3172c4a9c522171
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1594084
Reviewed-by: Kevin Babbitt <kbabbitt@microsoft.com>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#658745}
  • Loading branch information
KurtCattiSchmidt authored and Commit Bot committed May 10, 2019
1 parent 60031ab commit b9442af
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -717,4 +717,54 @@ IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
L"2",
/*expected_count*/ -1);
}

IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
ExpandToEnclosingFormat) {
LoadInitialAccessibilityTreeFromHtml(
R"HTML(<!DOCTYPE html>
<html>
<body>
<div>plain</div>
<div>text</div>
<div style="font-style: italic">italic<div>
<div style="font-style: italic">text<div>
</body>
</html>)HTML");

auto* node = FindNode(ax::mojom::Role::kStaticText, "plain");
ASSERT_NE(nullptr, node);
EXPECT_TRUE(node->PlatformIsLeaf());
EXPECT_EQ(0u, node->PlatformChildCount());

ComPtr<ITextRangeProvider> text_range_provider;
GetTextRangeProviderFromTextNode(text_range_provider, node);
ASSERT_NE(nullptr, text_range_provider.Get());
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"plain");

EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
/*count*/ 3,
/*expected_text*/ L"in",
/*expected_count*/ 3);

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"plaintext");

EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
/*count*/ 3,
/*expected_text*/ L"plaintextita",
/*expected_count*/ 3);

EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
/*count*/ 10,
/*expected_text*/ L"ta",
/*expected_count*/ 10);

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"italictext");
}
} // namespace content
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,11 @@ STDMETHODIMP AXPlatformNodeTextRangeProviderWin::ExpandToEnclosingUnit(
return S_OK;
}
case TextUnit_Format:
return E_NOTIMPL;
start_ = start_->CreatePreviousFormatStartPosition(
ui::AXBoundaryBehavior::StopIfAlreadyAtBoundary);
end_ = start_->CreateNextFormatEndPosition(
ui::AXBoundaryBehavior::StopIfAlreadyAtBoundary);
return S_OK;
case TextUnit_Word:
start_ = start_->CreatePreviousWordStartPosition(
ui::AXBoundaryBehavior::StopIfAlreadyAtBoundary);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,70 @@ TEST_F(AXPlatformNodeTextRangeProviderTest,
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"not line #1");
}

TEST_F(AXPlatformNodeTextRangeProviderTest,
TestITextRangeProviderExpandToEnclosingFormat) {
Init(BuildAXTreeForMoveByFormat());
AXNodePosition::SetTreeForTesting(tree_.get());
AXNode* root_node = GetRootNode();

ComPtr<ITextRangeProvider> text_range_provider;
GetTextRangeProviderFromTextNode(text_range_provider, root_node);

EXPECT_UIA_TEXTRANGE_EQ(
text_range_provider,
L"Text with formattingStandalone line with no formattingbold "
L"textParagraph 1Paragraph 2Paragraph 3");

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Text with formatting");

// Set it up so that the text range is in the middle of a format boundary
// and expand by format.
int count;
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->Move(TextUnit_Character, /*count*/ 31, &count));
ASSERT_EQ(31, count);
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"l");
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider,
L"Standalone line with no formatting");

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->Move(TextUnit_Character, /*count*/ 35, &count));
ASSERT_EQ(35, count);
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"o");
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"bold text");

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->Move(TextUnit_Character, /*count*/ 10, &count));
ASSERT_EQ(10, count);
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"a");
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Paragraph 1");

ASSERT_HRESULT_SUCCEEDED(
text_range_provider->Move(TextUnit_Character, /*count*/ 15, &count));
ASSERT_EQ(15, count);
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"g");
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Paragraph 2Paragraph 3");

// Test expanding a degenerate range
ASSERT_HRESULT_SUCCEEDED(text_range_provider->MoveEndpointByUnit(
TextPatternRangeEndpoint_End, TextUnit_Character, /*count*/ -22, &count));
ASSERT_EQ(-22, count);
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"");
ASSERT_HRESULT_SUCCEEDED(
text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Paragraph 2Paragraph 3");
}

TEST_F(AXPlatformNodeTextRangeProviderTest,
TestITextRangeProviderExpandToEnclosingDocument) {
Init(BuildTextDocument({"some text", "more text", "even more text"}));
Expand Down

0 comments on commit b9442af

Please sign in to comment.