Index: chrome/browser/accessibility/browser_accessibility_win_unittest.cc |
=================================================================== |
--- chrome/browser/accessibility/browser_accessibility_win_unittest.cc (revision 61950) |
+++ chrome/browser/accessibility/browser_accessibility_win_unittest.cc (working copy) |
@@ -274,3 +274,88 @@ |
delete manager; |
ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); |
} |
+ |
+TEST_F(BrowserAccessibilityTest, TestTextBoundaries) { |
+ WebAccessibility text1; |
+ text1.id = 11; |
+ text1.role = WebAccessibility::ROLE_TEXT_FIELD; |
+ text1.state = 0; |
+ text1.value = L"One two three.\nFour five six."; |
+ |
+ WebAccessibility root; |
+ root.id = 1; |
+ root.role = WebAccessibility::ROLE_DOCUMENT; |
+ root.state = 0; |
+ root.children.push_back(text1); |
+ |
+ CountedBrowserAccessibility::global_obj_count_ = 0; |
+ BrowserAccessibilityManager* manager = BrowserAccessibilityManager::Create( |
+ GetDesktopWindow(), root, NULL, |
+ new CountedBrowserAccessibilityFactory()); |
+ ASSERT_EQ(2, CountedBrowserAccessibility::global_obj_count_); |
+ |
+ BrowserAccessibilityWin* root_obj = |
+ static_cast<BrowserAccessibilityWin*>(manager->GetRoot()); |
Chris Guillory
2010/10/08 17:15:06
You can avoid a cast here by using toBrowserAccess
|
+ BrowserAccessibilityWin* text1_obj = |
Chris Guillory
2010/10/08 17:15:06
Optional: It might be interesting to see if you co
|
+ static_cast<BrowserAccessibilityWin*>(root_obj->GetChild(0)); |
+ |
+ BSTR text; |
+ long start; |
+ long end; |
+ |
+ long text1_len; |
+ ASSERT_EQ(S_OK, text1_obj->get_nCharacters(&text1_len)); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_text(0, text1_len, &text)); |
+ ASSERT_EQ(text, text1.value); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_text(0, 4, &text)); |
+ ASSERT_EQ(text, std::wstring(L"One ")); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( |
+ 1, IA2_TEXT_BOUNDARY_CHAR, &start, &end, &text)); |
+ ASSERT_EQ(start, 1); |
+ ASSERT_EQ(end, 2); |
+ ASSERT_EQ(text, std::wstring(L"n")); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_FALSE, text1_obj->get_textAtOffset( |
+ text1_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, &text)); |
+ ASSERT_EQ(start, text1_len); |
+ ASSERT_EQ(end, text1_len); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( |
+ 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text)); |
+ ASSERT_EQ(start, 0); |
+ ASSERT_EQ(end, 3); |
+ ASSERT_EQ(text, std::wstring(L"One")); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( |
+ 6, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text)); |
+ ASSERT_EQ(start, 4); |
+ ASSERT_EQ(end, 7); |
+ ASSERT_EQ(text, std::wstring(L"two")); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( |
+ text1_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, &text)); |
+ ASSERT_EQ(start, 25); |
+ ASSERT_EQ(end, 29); |
+ ASSERT_EQ(text, std::wstring(L"six.")); |
+ SysFreeString(text); |
+ |
+ ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( |
+ 1, IA2_TEXT_BOUNDARY_LINE, &start, &end, &text)); |
+ ASSERT_EQ(start, 0); |
+ ASSERT_EQ(end, 13); |
+ ASSERT_EQ(text, std::wstring(L"One two three")); |
+ SysFreeString(text); |
+ |
+ // Delete the manager and test that all BrowserAccessibility instances are |
+ // deleted. |
+ delete manager; |
+ ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); |
+} |