Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: content/browser/accessibility/browser_accessibility_win_unittest.cc

Issue 1111163002: Fixed word and line navigation in multi-line text fields. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed first bunch of comments. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | ui/accessibility/ax_text_utils.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/accessibility/browser_accessibility_win_unittest.cc
diff --git a/content/browser/accessibility/browser_accessibility_win_unittest.cc b/content/browser/accessibility/browser_accessibility_win_unittest.cc
index a41e7cf0c6f57a86977b6f843e08e6128fa26b3b..37485b23d59c2bbc7a8b87a951b9f24ca9d22f21 100644
--- a/content/browser/accessibility/browser_accessibility_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -323,104 +323,157 @@ TEST_F(BrowserAccessibilityTest, TestChildrenChangeNoLeaks) {
ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
}
-TEST_F(BrowserAccessibilityTest, DISABLED_TestTextBoundaries) {
- std::string text1_value = "One two three.\nFour five six.";
-
- ui::AXNodeData text1;
- text1.id = 11;
- text1.role = ui::AX_ROLE_TEXT_FIELD;
- text1.state = 0;
- text1.AddStringAttribute(ui::AX_ATTR_VALUE, text1_value);
- std::vector<int32> line_breaks;
- line_breaks.push_back(15);
- text1.AddIntListAttribute(
- ui::AX_ATTR_LINE_BREAKS, line_breaks);
+TEST_F(BrowserAccessibilityTest, TestTextBoundaries) {
+ std::string line1 = "One two three.";
+ std::string line2 = "Four five six.";
+ std::string text_value = line1 + '\n' + line2;
ui::AXNodeData root;
root.id = 1;
root.role = ui::AX_ROLE_ROOT_WEB_AREA;
- root.state = 0;
- root.child_ids.push_back(11);
+ root.child_ids.push_back(2);
+
+ ui::AXNodeData text_field;
+ text_field.id = 2;
+ text_field.role = ui::AX_ROLE_TEXT_FIELD;
+ text_field.AddStringAttribute(ui::AX_ATTR_VALUE, text_value);
+ std::vector<int32> line_start_offsets;
+ line_start_offsets.push_back(15);
+ text_field.AddIntListAttribute(
+ ui::AX_ATTR_LINE_BREAKS, line_start_offsets);
+ text_field.child_ids.push_back(3);
+ text_field.child_ids.push_back(5);
+ text_field.child_ids.push_back(6);
+
+ ui::AXNodeData static_text1;
+ static_text1.id = 3;
+ static_text1.role = ui::AX_ROLE_STATIC_TEXT;
+ static_text1.AddStringAttribute(ui::AX_ATTR_VALUE, line1);
+ static_text1.child_ids.push_back(4);
+
+ ui::AXNodeData inline_box1;
+ inline_box1.id = 4;
+ inline_box1.role = ui::AX_ROLE_INLINE_TEXT_BOX;
+ inline_box1.AddStringAttribute(ui::AX_ATTR_VALUE, line1);
+ std::vector<int32> word_start_offsets1;
+ word_start_offsets1.push_back(0);
+ word_start_offsets1.push_back(4);
+ word_start_offsets1.push_back(8);
+ inline_box1.AddIntListAttribute(
+ ui::AX_ATTR_WORD_STARTS, word_start_offsets1);
+
+ ui::AXNodeData line_break;
+ line_break.id = 5;
+ line_break.role = ui::AX_ROLE_LINE_BREAK;
+ line_break.AddStringAttribute(ui::AX_ATTR_VALUE, "\n");
+
+ ui::AXNodeData static_text2;
+ static_text2.id = 6;
+ static_text2.role = ui::AX_ROLE_STATIC_TEXT;
+ static_text2.AddStringAttribute(ui::AX_ATTR_VALUE, line2);
+ static_text2.child_ids.push_back(7);
+
+ ui::AXNodeData inline_box2;
+ inline_box2.id = 7;
+ inline_box2.role = ui::AX_ROLE_INLINE_TEXT_BOX;
+ inline_box2.AddStringAttribute(ui::AX_ATTR_VALUE, line2);
+ std::vector<int32> word_start_offsets2;
+ word_start_offsets2.push_back(0);
+ word_start_offsets2.push_back(5);
+ word_start_offsets2.push_back(10);
+ inline_box2.AddIntListAttribute(
+ ui::AX_ATTR_WORD_STARTS, word_start_offsets2);
CountedBrowserAccessibility::reset();
scoped_ptr<BrowserAccessibilityManager> manager(
BrowserAccessibilityManager::Create(
- MakeAXTreeUpdate(root, text1),
- NULL, new CountedBrowserAccessibilityFactory()));
- ASSERT_EQ(2, CountedBrowserAccessibility::num_instances());
+ MakeAXTreeUpdate(root, text_field, static_text1, inline_box1,
+ line_break, static_text2, inline_box2),
+ nullptr, new CountedBrowserAccessibilityFactory()));
+ ASSERT_EQ(7, CountedBrowserAccessibility::num_instances());
BrowserAccessibilityWin* root_obj =
manager->GetRoot()->ToBrowserAccessibilityWin();
- BrowserAccessibilityWin* text1_obj =
+ ASSERT_NE(nullptr, root_obj);
+ ASSERT_EQ(1, root_obj->PlatformChildCount());
+
+ BrowserAccessibilityWin* text_field_obj =
root_obj->PlatformGetChild(0)->ToBrowserAccessibilityWin();
+ ASSERT_NE(nullptr, text_field_obj);
- long text1_len;
- ASSERT_EQ(S_OK, text1_obj->get_nCharacters(&text1_len));
+ long text_len;
+ EXPECT_EQ(S_OK, text_field_obj->get_nCharacters(&text_len));
base::win::ScopedBstr text;
- ASSERT_EQ(S_OK, text1_obj->get_text(0, text1_len, text.Receive()));
- ASSERT_EQ(text1_value, base::UTF16ToUTF8(base::string16(text)));
+ EXPECT_EQ(S_OK, text_field_obj->get_text(0, text_len, text.Receive()));
+ EXPECT_EQ(text_value, base::UTF16ToUTF8(base::string16(text)));
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_text(0, 4, text.Receive()));
- ASSERT_STREQ(L"One ", text);
+ EXPECT_EQ(S_OK, text_field_obj->get_text(0, 4, text.Receive()));
+ EXPECT_STREQ(L"One ", text);
text.Reset();
long start;
long end;
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
1, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive()));
- ASSERT_EQ(1, start);
- ASSERT_EQ(2, end);
- ASSERT_STREQ(L"n", text);
+ EXPECT_EQ(1, start);
+ EXPECT_EQ(2, end);
+ EXPECT_STREQ(L"n", text);
+ text.Reset();
+
+ EXPECT_EQ(S_FALSE, text_field_obj->get_textAtOffset(
+ text_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive()));
+ EXPECT_EQ(0, start);
+ EXPECT_EQ(0, end);
+ EXPECT_EQ(nullptr, text);
text.Reset();
- ASSERT_EQ(S_FALSE, text1_obj->get_textAtOffset(
- text1_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive()));
- ASSERT_EQ(0, start);
- ASSERT_EQ(0, end);
+ EXPECT_EQ(S_FALSE, text_field_obj->get_textAtOffset(
+ text_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive()));
+ EXPECT_EQ(0, start);
+ EXPECT_EQ(0, end);
+ EXPECT_EQ(nullptr, text);
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
1, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive()));
- ASSERT_EQ(0, start);
- ASSERT_EQ(4, end);
- ASSERT_STREQ(L"One ", text);
+ EXPECT_EQ(0, start);
+ EXPECT_EQ(4, end);
+ EXPECT_STREQ(L"One ", text);
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
6, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive()));
- ASSERT_EQ(4, start);
- ASSERT_EQ(8, end);
- ASSERT_STREQ(L"two\n", text);
+ EXPECT_EQ(4, start);
+ EXPECT_EQ(8, end);
+ EXPECT_STREQ(L"two ", text);
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- text1_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive()));
- ASSERT_EQ(25, start);
- ASSERT_EQ(29, end);
- ASSERT_STREQ(L"six.", text);
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
+ text_len - 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive()));
+ EXPECT_EQ(25, start);
+ EXPECT_EQ(29, end);
+ EXPECT_STREQ(L"six.", text);
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
1, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive()));
- ASSERT_EQ(0, start);
- ASSERT_EQ(15, end);
- ASSERT_STREQ(L"One two three.\n", text);
+ EXPECT_EQ(0, start);
+ EXPECT_EQ(15, end);
+ EXPECT_STREQ(L"One two three.\n", text);
text.Reset();
- ASSERT_EQ(S_OK, text1_obj->get_textAtOffset(
- text1_len, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive()));
- ASSERT_EQ(15, start);
- ASSERT_EQ(text1_len, end);
- ASSERT_STREQ(L"Four five six.", text);
+ EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset(
+ text_len, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive()));
+ EXPECT_EQ(15, start);
+ EXPECT_EQ(text_len, end);
+ EXPECT_STREQ(L"Four five six.", text);
text.Reset();
- ASSERT_EQ(S_OK,
- text1_obj->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive()));
- ASSERT_EQ(0, start);
- ASSERT_EQ(text1_len, end);
- ASSERT_STREQ(L"One two three.\nFour five six.", text);
+ EXPECT_EQ(S_OK, text_field_obj->get_text(
+ 0, IA2_TEXT_OFFSET_LENGTH, text.Receive()));
+ EXPECT_EQ(text_value, base::UTF16ToUTF8(base::string16(text)));
// Delete the manager and test that all BrowserAccessibility instances are
// deleted.
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | ui/accessibility/ax_text_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698