OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
7 #include "base/win/scoped_bstr.h" | 7 #include "base/win/scoped_bstr.h" |
8 #include "base/win/scoped_comptr.h" | 8 #include "base/win/scoped_comptr.h" |
9 #include "base/win/scoped_variant.h" | 9 #include "base/win/scoped_variant.h" |
10 #include "content/browser/accessibility/browser_accessibility_manager.h" | 10 #include "content/browser/accessibility/browser_accessibility_manager.h" |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 events.push_back(param); | 316 events.push_back(param); |
317 manager->OnAccessibilityEvents(events); | 317 manager->OnAccessibilityEvents(events); |
318 ASSERT_EQ(1, CountedBrowserAccessibility::num_instances()); | 318 ASSERT_EQ(1, CountedBrowserAccessibility::num_instances()); |
319 | 319 |
320 // Delete the manager and test that all BrowserAccessibility instances are | 320 // Delete the manager and test that all BrowserAccessibility instances are |
321 // deleted. | 321 // deleted. |
322 manager.reset(); | 322 manager.reset(); |
323 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); | 323 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); |
324 } | 324 } |
325 | 325 |
326 TEST_F(BrowserAccessibilityTest, DISABLED_TestTextBoundaries) { | 326 TEST_F(BrowserAccessibilityTest, TestTextBoundaries) { |
327 std::string text1_value = "One two three.\nFour five six."; | 327 std::string line1 = "One two three."; |
328 | 328 std::string line2 = "Four five six."; |
329 ui::AXNodeData text1; | 329 std::string text_value = line1 + '\n' + line2; |
330 text1.id = 11; | |
331 text1.role = ui::AX_ROLE_TEXT_FIELD; | |
332 text1.state = 0; | |
333 text1.AddStringAttribute(ui::AX_ATTR_VALUE, text1_value); | |
334 std::vector<int32> line_breaks; | |
335 line_breaks.push_back(15); | |
336 text1.AddIntListAttribute( | |
337 ui::AX_ATTR_LINE_BREAKS, line_breaks); | |
338 | 330 |
339 ui::AXNodeData root; | 331 ui::AXNodeData root; |
340 root.id = 1; | 332 root.id = 1; |
341 root.role = ui::AX_ROLE_ROOT_WEB_AREA; | 333 root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
342 root.state = 0; | 334 root.child_ids.push_back(2); |
343 root.child_ids.push_back(11); | 335 |
| 336 ui::AXNodeData text_field; |
| 337 text_field.id = 2; |
| 338 text_field.role = ui::AX_ROLE_TEXT_FIELD; |
| 339 text_field.AddStringAttribute(ui::AX_ATTR_VALUE, text_value); |
| 340 std::vector<int32> line_start_offsets; |
| 341 line_start_offsets.push_back(15); |
| 342 text_field.AddIntListAttribute( |
| 343 ui::AX_ATTR_LINE_BREAKS, line_start_offsets); |
| 344 text_field.child_ids.push_back(3); |
| 345 text_field.child_ids.push_back(5); |
| 346 text_field.child_ids.push_back(6); |
| 347 |
| 348 ui::AXNodeData static_text1; |
| 349 static_text1.id = 3; |
| 350 static_text1.role = ui::AX_ROLE_STATIC_TEXT; |
| 351 static_text1.AddStringAttribute(ui::AX_ATTR_VALUE, line1); |
| 352 static_text1.child_ids.push_back(4); |
| 353 |
| 354 ui::AXNodeData inline_box1; |
| 355 inline_box1.id = 4; |
| 356 inline_box1.role = ui::AX_ROLE_INLINE_TEXT_BOX; |
| 357 inline_box1.AddStringAttribute(ui::AX_ATTR_VALUE, line1); |
| 358 std::vector<int32> word_start_offsets1; |
| 359 word_start_offsets1.push_back(0); |
| 360 word_start_offsets1.push_back(4); |
| 361 word_start_offsets1.push_back(8); |
| 362 inline_box1.AddIntListAttribute( |
| 363 ui::AX_ATTR_WORD_STARTS, word_start_offsets1); |
| 364 |
| 365 ui::AXNodeData line_break; |
| 366 line_break.id = 5; |
| 367 line_break.role = ui::AX_ROLE_LINE_BREAK; |
| 368 line_break.AddStringAttribute(ui::AX_ATTR_VALUE, "\n"); |
| 369 |
| 370 ui::AXNodeData static_text2; |
| 371 static_text2.id = 6; |
| 372 static_text2.role = ui::AX_ROLE_STATIC_TEXT; |
| 373 static_text2.AddStringAttribute(ui::AX_ATTR_VALUE, line2); |
| 374 static_text2.child_ids.push_back(7); |
| 375 |
| 376 ui::AXNodeData inline_box2; |
| 377 inline_box2.id = 7; |
| 378 inline_box2.role = ui::AX_ROLE_INLINE_TEXT_BOX; |
| 379 inline_box2.AddStringAttribute(ui::AX_ATTR_VALUE, line2); |
| 380 std::vector<int32> word_start_offsets2; |
| 381 word_start_offsets2.push_back(0); |
| 382 word_start_offsets2.push_back(5); |
| 383 word_start_offsets2.push_back(10); |
| 384 inline_box2.AddIntListAttribute( |
| 385 ui::AX_ATTR_WORD_STARTS, word_start_offsets2); |
344 | 386 |
345 CountedBrowserAccessibility::reset(); | 387 CountedBrowserAccessibility::reset(); |
346 scoped_ptr<BrowserAccessibilityManager> manager( | 388 scoped_ptr<BrowserAccessibilityManager> manager( |
347 BrowserAccessibilityManager::Create( | 389 BrowserAccessibilityManager::Create( |
348 MakeAXTreeUpdate(root, text1), | 390 MakeAXTreeUpdate(root, text_field, static_text1, inline_box1, |
349 NULL, new CountedBrowserAccessibilityFactory())); | 391 line_break, static_text2, inline_box2), |
350 ASSERT_EQ(2, CountedBrowserAccessibility::num_instances()); | 392 nullptr, new CountedBrowserAccessibilityFactory())); |
| 393 ASSERT_EQ(7, CountedBrowserAccessibility::num_instances()); |
351 | 394 |
352 BrowserAccessibilityWin* root_obj = | 395 BrowserAccessibilityWin* root_obj = |
353 manager->GetRoot()->ToBrowserAccessibilityWin(); | 396 manager->GetRoot()->ToBrowserAccessibilityWin(); |
354 BrowserAccessibilityWin* text1_obj = | 397 ASSERT_NE(nullptr, root_obj); |
| 398 ASSERT_EQ(1, root_obj->PlatformChildCount()); |
| 399 |
| 400 BrowserAccessibilityWin* text_field_obj = |
355 root_obj->PlatformGetChild(0)->ToBrowserAccessibilityWin(); | 401 root_obj->PlatformGetChild(0)->ToBrowserAccessibilityWin(); |
| 402 ASSERT_NE(nullptr, text_field_obj); |
356 | 403 |
357 long text1_len; | 404 long text_len; |
358 ASSERT_EQ(S_OK, text1_obj->get_nCharacters(&text1_len)); | 405 EXPECT_EQ(S_OK, text_field_obj->get_nCharacters(&text_len)); |
359 | 406 |
360 base::win::ScopedBstr text; | 407 base::win::ScopedBstr text; |
361 ASSERT_EQ(S_OK, text1_obj->get_text(0, text1_len, text.Receive())); | 408 EXPECT_EQ(S_OK, text_field_obj->get_text(0, text_len, text.Receive())); |
362 ASSERT_EQ(text1_value, base::UTF16ToUTF8(base::string16(text))); | 409 EXPECT_EQ(text_value, base::UTF16ToUTF8(base::string16(text))); |
363 text.Reset(); | 410 text.Reset(); |
364 | 411 |
365 ASSERT_EQ(S_OK, text1_obj->get_text(0, 4, text.Receive())); | 412 EXPECT_EQ(S_OK, text_field_obj->get_text(0, 4, text.Receive())); |
366 ASSERT_STREQ(L"One ", text); | 413 EXPECT_STREQ(L"One ", text); |
367 text.Reset(); | 414 text.Reset(); |
368 | 415 |
369 long start; | 416 long start; |
370 long end; | 417 long end; |
371 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 418 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
372 1, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive())); | 419 1, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive())); |
373 ASSERT_EQ(1, start); | 420 EXPECT_EQ(1, start); |
374 ASSERT_EQ(2, end); | 421 EXPECT_EQ(2, end); |
375 ASSERT_STREQ(L"n", text); | 422 EXPECT_STREQ(L"n", text); |
376 text.Reset(); | 423 text.Reset(); |
377 | 424 |
378 ASSERT_EQ(S_FALSE, text1_obj->get_textAtOffset( | 425 EXPECT_EQ(S_FALSE, text_field_obj->get_textAtOffset( |
379 text1_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive())); | 426 text_len, IA2_TEXT_BOUNDARY_CHAR, &start, &end, text.Receive())); |
380 ASSERT_EQ(0, start); | 427 EXPECT_EQ(0, start); |
381 ASSERT_EQ(0, end); | 428 EXPECT_EQ(0, end); |
| 429 EXPECT_EQ(nullptr, text); |
382 text.Reset(); | 430 text.Reset(); |
383 | 431 |
384 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 432 EXPECT_EQ(S_FALSE, text_field_obj->get_textAtOffset( |
385 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); | 433 text_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); |
386 ASSERT_EQ(0, start); | 434 EXPECT_EQ(0, start); |
387 ASSERT_EQ(4, end); | 435 EXPECT_EQ(0, end); |
388 ASSERT_STREQ(L"One ", text); | 436 EXPECT_EQ(nullptr, text); |
389 text.Reset(); | 437 text.Reset(); |
390 | 438 |
391 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 439 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
392 6, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); | 440 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); |
393 ASSERT_EQ(4, start); | 441 EXPECT_EQ(0, start); |
394 ASSERT_EQ(8, end); | 442 EXPECT_EQ(4, end); |
395 ASSERT_STREQ(L"two\n", text); | 443 EXPECT_STREQ(L"One ", text); |
396 text.Reset(); | 444 text.Reset(); |
397 | 445 |
398 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 446 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
399 text1_len, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); | 447 6, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); |
400 ASSERT_EQ(25, start); | 448 EXPECT_EQ(4, start); |
401 ASSERT_EQ(29, end); | 449 EXPECT_EQ(8, end); |
402 ASSERT_STREQ(L"six.", text); | 450 EXPECT_STREQ(L"two ", text); |
403 text.Reset(); | 451 text.Reset(); |
404 | 452 |
405 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 453 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
406 1, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive())); | 454 text_len - 1, IA2_TEXT_BOUNDARY_WORD, &start, &end, text.Receive())); |
407 ASSERT_EQ(0, start); | 455 EXPECT_EQ(25, start); |
408 ASSERT_EQ(15, end); | 456 EXPECT_EQ(29, end); |
409 ASSERT_STREQ(L"One two three.\n", text); | 457 EXPECT_STREQ(L"six.", text); |
410 text.Reset(); | 458 text.Reset(); |
411 | 459 |
412 ASSERT_EQ(S_OK, text1_obj->get_textAtOffset( | 460 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
413 text1_len, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive())); | 461 1, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive())); |
414 ASSERT_EQ(15, start); | 462 EXPECT_EQ(0, start); |
415 ASSERT_EQ(text1_len, end); | 463 EXPECT_EQ(15, end); |
416 ASSERT_STREQ(L"Four five six.", text); | 464 EXPECT_STREQ(L"One two three.\n", text); |
417 text.Reset(); | 465 text.Reset(); |
418 | 466 |
419 ASSERT_EQ(S_OK, | 467 EXPECT_EQ(S_OK, text_field_obj->get_textAtOffset( |
420 text1_obj->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive())); | 468 text_len, IA2_TEXT_BOUNDARY_LINE, &start, &end, text.Receive())); |
421 ASSERT_EQ(0, start); | 469 EXPECT_EQ(15, start); |
422 ASSERT_EQ(text1_len, end); | 470 EXPECT_EQ(text_len, end); |
423 ASSERT_STREQ(L"One two three.\nFour five six.", text); | 471 EXPECT_STREQ(L"Four five six.", text); |
| 472 text.Reset(); |
| 473 |
| 474 EXPECT_EQ(S_OK, text_field_obj->get_text( |
| 475 0, IA2_TEXT_OFFSET_LENGTH, text.Receive())); |
| 476 EXPECT_EQ(text_value, base::UTF16ToUTF8(base::string16(text))); |
424 | 477 |
425 // Delete the manager and test that all BrowserAccessibility instances are | 478 // Delete the manager and test that all BrowserAccessibility instances are |
426 // deleted. | 479 // deleted. |
427 manager.reset(); | 480 manager.reset(); |
428 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); | 481 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); |
429 } | 482 } |
430 | 483 |
431 TEST_F(BrowserAccessibilityTest, TestSimpleHypertext) { | 484 TEST_F(BrowserAccessibilityTest, TestSimpleHypertext) { |
432 const std::string text1_name = "One two three."; | 485 const std::string text1_name = "One two three."; |
433 const std::string text2_name = " Four five six."; | 486 const std::string text2_name = " Four five six."; |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 0L /* selection_index */, &selection_start, &selection_end);; | 911 0L /* selection_index */, &selection_start, &selection_end);; |
859 EXPECT_EQ(S_OK, hr); | 912 EXPECT_EQ(S_OK, hr); |
860 EXPECT_EQ(1L, selection_start); | 913 EXPECT_EQ(1L, selection_start); |
861 EXPECT_EQ(2L, selection_end); | 914 EXPECT_EQ(2L, selection_end); |
862 | 915 |
863 manager.reset(); | 916 manager.reset(); |
864 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); | 917 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); |
865 } | 918 } |
866 | 919 |
867 } // namespace content | 920 } // namespace content |
OLD | NEW |