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. |