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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 679 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
680 static_text.child_ids.push_back(4); | 680 static_text.child_ids.push_back(4); |
681 | 681 |
682 scoped_ptr<BrowserAccessibilityManager> manager( | 682 scoped_ptr<BrowserAccessibilityManager> manager( |
683 BrowserAccessibilityManager::Create( | 683 BrowserAccessibilityManager::Create( |
684 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 684 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
685 nullptr, | 685 nullptr, |
686 new CountedBrowserAccessibilityFactory())); | 686 new CountedBrowserAccessibilityFactory())); |
687 | 687 |
688 BrowserAccessibility* root_accessible = manager->GetRoot(); | 688 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 689 ASSERT_NE(nullptr, root_accessible); |
689 BrowserAccessibility* static_text_accessible = | 690 BrowserAccessibility* static_text_accessible = |
690 root_accessible->PlatformGetChild(0); | 691 root_accessible->PlatformGetChild(0); |
| 692 ASSERT_NE(nullptr, static_text_accessible); |
691 | 693 |
692 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), | 694 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), |
693 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 695 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
694 | 696 |
695 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), | 697 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), |
696 static_text_accessible->GetLocalBoundsForRange(0, 5).ToString()); | 698 static_text_accessible->GetLocalBoundsForRange(0, 5).ToString()); |
697 | 699 |
698 EXPECT_EQ(gfx::Rect(100, 109, 5, 9).ToString(), | 700 EXPECT_EQ(gfx::Rect(100, 109, 5, 9).ToString(), |
699 static_text_accessible->GetLocalBoundsForRange(7, 1).ToString()); | 701 static_text_accessible->GetLocalBoundsForRange(7, 1).ToString()); |
700 | 702 |
701 EXPECT_EQ(gfx::Rect(100, 109, 25, 9).ToString(), | 703 EXPECT_EQ(gfx::Rect(100, 109, 25, 9).ToString(), |
702 static_text_accessible->GetLocalBoundsForRange(7, 5).ToString()); | 704 static_text_accessible->GetLocalBoundsForRange(7, 5).ToString()); |
703 | 705 |
704 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), | 706 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), |
705 static_text_accessible->GetLocalBoundsForRange(5, 3).ToString()); | 707 static_text_accessible->GetLocalBoundsForRange(5, 3).ToString()); |
706 | 708 |
707 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), | 709 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), |
708 static_text_accessible->GetLocalBoundsForRange(0, 13).ToString()); | 710 static_text_accessible->GetLocalBoundsForRange(0, 13).ToString()); |
709 | 711 |
710 // Test range that's beyond the text. | 712 // Note that each child in the parent element is represented by a single |
711 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), | 713 // embedded object character and not by its text. |
712 static_text_accessible->GetLocalBoundsForRange(-1, 999).ToString()); | 714 // TODO(nektar): Investigate failure on Linux. |
713 | |
714 // Test that we can call bounds for range on the parent element, too, | |
715 // and it still works. | |
716 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), | 715 EXPECT_EQ(gfx::Rect(100, 100, 29, 18).ToString(), |
717 root_accessible->GetLocalBoundsForRange(0, 13).ToString()); | 716 root_accessible->GetLocalBoundsForRange(0, 13).ToString()); |
718 } | 717 } |
719 | 718 |
720 TEST(BrowserAccessibilityManagerTest, BoundsForRangeBiDi) { | 719 TEST(BrowserAccessibilityManagerTest, BoundsForRangeBiDi) { |
721 // In this example, we assume that the string "123abc" is rendered with | 720 // In this example, we assume that the string "123abc" is rendered with |
722 // "123" going left-to-right and "abc" going right-to-left. In other | 721 // "123" going left-to-right and "abc" going right-to-left. In other |
723 // words, on-screen it would look like "123cba". This is possible to | 722 // words, on-screen it would look like "123cba". This is possible to |
724 // acheive if the source string had unicode control characters | 723 // achieve if the source string had unicode control characters |
725 // to switch directions. This test doesn't worry about how, though - it just | 724 // to switch directions. This test doesn't worry about how, though - it just |
726 // tests that if something like that were to occur, GetLocalBoundsForRange | 725 // tests that if something like that were to occur, GetLocalBoundsForRange |
727 // returns the correct bounds for different ranges. | 726 // returns the correct bounds for different ranges. |
728 | 727 |
729 ui::AXNodeData root; | 728 ui::AXNodeData root; |
730 root.id = 1; | 729 root.id = 1; |
731 root.role = ui::AX_ROLE_ROOT_WEB_AREA; | 730 root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
732 | 731 |
733 ui::AXNodeData static_text; | 732 ui::AXNodeData static_text; |
734 static_text.id = 2; | 733 static_text.id = 2; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 766 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
768 static_text.child_ids.push_back(4); | 767 static_text.child_ids.push_back(4); |
769 | 768 |
770 scoped_ptr<BrowserAccessibilityManager> manager( | 769 scoped_ptr<BrowserAccessibilityManager> manager( |
771 BrowserAccessibilityManager::Create( | 770 BrowserAccessibilityManager::Create( |
772 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 771 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
773 nullptr, | 772 nullptr, |
774 new CountedBrowserAccessibilityFactory())); | 773 new CountedBrowserAccessibilityFactory())); |
775 | 774 |
776 BrowserAccessibility* root_accessible = manager->GetRoot(); | 775 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 776 ASSERT_NE(nullptr, root_accessible); |
777 BrowserAccessibility* static_text_accessible = | 777 BrowserAccessibility* static_text_accessible = |
778 root_accessible->PlatformGetChild(0); | 778 root_accessible->PlatformGetChild(0); |
| 779 ASSERT_NE(nullptr, static_text_accessible); |
779 | 780 |
780 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), | 781 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), |
781 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); | 782 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); |
782 | 783 |
783 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), | 784 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), |
784 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 785 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
785 | 786 |
786 EXPECT_EQ(gfx::Rect(100, 100, 30, 20).ToString(), | 787 EXPECT_EQ(gfx::Rect(100, 100, 30, 20).ToString(), |
787 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 788 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); |
788 | 789 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); | 828 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); |
828 static_text.child_ids.push_back(3); | 829 static_text.child_ids.push_back(3); |
829 | 830 |
830 scoped_ptr<BrowserAccessibilityManager> manager( | 831 scoped_ptr<BrowserAccessibilityManager> manager( |
831 BrowserAccessibilityManager::Create( | 832 BrowserAccessibilityManager::Create( |
832 MakeAXTreeUpdate(root, static_text, inline_text), | 833 MakeAXTreeUpdate(root, static_text, inline_text), |
833 nullptr, | 834 nullptr, |
834 new CountedBrowserAccessibilityFactory())); | 835 new CountedBrowserAccessibilityFactory())); |
835 | 836 |
836 BrowserAccessibility* root_accessible = manager->GetRoot(); | 837 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 838 ASSERT_NE(nullptr, root_accessible); |
837 BrowserAccessibility* static_text_accessible = | 839 BrowserAccessibility* static_text_accessible = |
838 root_accessible->PlatformGetChild(0); | 840 root_accessible->PlatformGetChild(0); |
| 841 ASSERT_NE(nullptr, static_text_accessible); |
839 | 842 |
840 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { | 843 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { |
841 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), | 844 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), |
842 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 845 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); |
843 } else { | 846 } else { |
844 EXPECT_EQ(gfx::Rect(100, 100, 16, 9).ToString(), | 847 EXPECT_EQ(gfx::Rect(100, 100, 16, 9).ToString(), |
845 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 848 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); |
846 } | 849 } |
847 } | 850 } |
848 | 851 |
849 #if defined(OS_WIN) | 852 TEST(BrowserAccessibilityManagerTest, BoundsForRangeOnParentElement) { |
850 #define MAYBE_BoundsForRangeOnParentElement \ | |
851 DISABLED_BoundsForRangeOnParentElement | |
852 #else | |
853 #define MAYBE_BoundsForRangeOnParentElement BoundsForRangeOnParentElement | |
854 #endif | |
855 TEST(BrowserAccessibilityManagerTest, MAYBE_BoundsForRangeOnParentElement) { | |
856 ui::AXNodeData root; | 853 ui::AXNodeData root; |
857 root.id = 1; | 854 root.id = 1; |
858 root.role = ui::AX_ROLE_ROOT_WEB_AREA; | 855 root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
859 root.child_ids.push_back(2); | 856 root.child_ids.push_back(2); |
860 | 857 |
861 ui::AXNodeData div; | 858 ui::AXNodeData div; |
862 div.id = 2; | 859 div.id = 2; |
863 div.role = ui::AX_ROLE_DIV; | 860 div.role = ui::AX_ROLE_DIV; |
864 div.location = gfx::Rect(100, 100, 100, 20); | 861 div.location = gfx::Rect(100, 100, 100, 20); |
865 div.child_ids.push_back(3); | 862 div.child_ids.push_back(3); |
866 div.child_ids.push_back(4); | 863 div.child_ids.push_back(4); |
867 div.child_ids.push_back(5); | 864 div.child_ids.push_back(5); |
868 | 865 |
869 ui::AXNodeData static_text1; | 866 ui::AXNodeData static_text1; |
870 static_text1.id = 3; | 867 static_text1.id = 3; |
871 static_text1.SetName("AB"); | 868 static_text1.SetName("AB"); |
872 static_text1.role = ui::AX_ROLE_STATIC_TEXT; | 869 static_text1.role = ui::AX_ROLE_STATIC_TEXT; |
873 static_text1.location = gfx::Rect(100, 100, 40, 20); | 870 static_text1.location = gfx::Rect(100, 100, 40, 20); |
874 static_text1.child_ids.push_back(6); | 871 static_text1.child_ids.push_back(6); |
875 | 872 |
876 ui::AXNodeData img; | 873 ui::AXNodeData img; |
877 img.id = 4; | 874 img.id = 4; |
| 875 img.SetName("Test image"); |
878 img.role = ui::AX_ROLE_IMAGE; | 876 img.role = ui::AX_ROLE_IMAGE; |
879 img.location = gfx::Rect(140, 100, 20, 20); | 877 img.location = gfx::Rect(140, 100, 20, 20); |
880 | 878 |
881 ui::AXNodeData static_text2; | 879 ui::AXNodeData static_text2; |
882 static_text2.id = 5; | 880 static_text2.id = 5; |
883 static_text2.SetName("CD"); | 881 static_text2.SetName("CD"); |
884 static_text2.role = ui::AX_ROLE_STATIC_TEXT; | 882 static_text2.role = ui::AX_ROLE_STATIC_TEXT; |
885 static_text2.location = gfx::Rect(160, 100, 40, 20); | 883 static_text2.location = gfx::Rect(160, 100, 40, 20); |
886 static_text2.child_ids.push_back(7); | 884 static_text2.child_ids.push_back(7); |
887 | 885 |
(...skipping 24 matching lines...) Expand all Loading... |
912 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 910 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
913 | 911 |
914 scoped_ptr<BrowserAccessibilityManager> manager( | 912 scoped_ptr<BrowserAccessibilityManager> manager( |
915 BrowserAccessibilityManager::Create( | 913 BrowserAccessibilityManager::Create( |
916 MakeAXTreeUpdate( | 914 MakeAXTreeUpdate( |
917 root, div, static_text1, img, | 915 root, div, static_text1, img, |
918 static_text2, inline_text1, inline_text2), | 916 static_text2, inline_text1, inline_text2), |
919 nullptr, | 917 nullptr, |
920 new CountedBrowserAccessibilityFactory())); | 918 new CountedBrowserAccessibilityFactory())); |
921 BrowserAccessibility* root_accessible = manager->GetRoot(); | 919 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 920 ASSERT_NE(nullptr, root_accessible); |
| 921 BrowserAccessibility* div_accessible = root_accessible->PlatformGetChild(0); |
| 922 ASSERT_NE(nullptr, div_accessible); |
922 | 923 |
923 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), | 924 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), |
924 root_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 925 div_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
925 | 926 |
926 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), | 927 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), |
927 root_accessible->GetLocalBoundsForRange(0, 2).ToString()); | 928 div_accessible->GetLocalBoundsForRange(0, 2).ToString()); |
928 | 929 |
929 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), | 930 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), |
930 root_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 931 div_accessible->GetLocalBoundsForRange(0, 4).ToString()); |
931 | 932 |
932 EXPECT_EQ(gfx::Rect(120, 100, 60, 20).ToString(), | 933 EXPECT_EQ(gfx::Rect(120, 100, 60, 20).ToString(), |
933 root_accessible->GetLocalBoundsForRange(1, 2).ToString()); | 934 div_accessible->GetLocalBoundsForRange(1, 3).ToString()); |
934 | 935 |
935 EXPECT_EQ(gfx::Rect(120, 100, 80, 20).ToString(), | 936 EXPECT_EQ(gfx::Rect(120, 100, 80, 20).ToString(), |
936 root_accessible->GetLocalBoundsForRange(1, 3).ToString()); | 937 div_accessible->GetLocalBoundsForRange(1, 4).ToString()); |
937 | 938 |
938 EXPECT_EQ(gfx::Rect(100, 100, 100, 20).ToString(), | 939 EXPECT_EQ(gfx::Rect(100, 100, 100, 20).ToString(), |
939 root_accessible->GetLocalBoundsForRange(0, 4).ToString()); | 940 div_accessible->GetLocalBoundsForRange(0, 5).ToString()); |
940 } | 941 } |
941 | 942 |
942 TEST(BrowserAccessibilityManagerTest, TestNextPreviousInTreeOrder) { | 943 TEST(BrowserAccessibilityManagerTest, TestNextPreviousInTreeOrder) { |
943 ui::AXNodeData root; | 944 ui::AXNodeData root; |
944 root.id = 1; | 945 root.id = 1; |
945 root.role = ui::AX_ROLE_ROOT_WEB_AREA; | 946 root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
946 | 947 |
947 ui::AXNodeData node2; | 948 ui::AXNodeData node2; |
948 node2.id = 2; | 949 node2.id = 2; |
949 root.child_ids.push_back(2); | 950 root.child_ids.push_back(2); |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 events2[0].event_type = ui::AX_EVENT_NONE; | 1200 events2[0].event_type = ui::AX_EVENT_NONE; |
1200 manager->OnAccessibilityEvents(events2); | 1201 manager->OnAccessibilityEvents(events2); |
1201 | 1202 |
1202 // Make sure that the focused node was updated to the new root and | 1203 // Make sure that the focused node was updated to the new root and |
1203 // that this doesn't crash. | 1204 // that this doesn't crash. |
1204 ASSERT_EQ(3, manager->GetRoot()->GetId()); | 1205 ASSERT_EQ(3, manager->GetRoot()->GetId()); |
1205 ASSERT_EQ(3, manager->GetFocus(manager->GetRoot())->GetId()); | 1206 ASSERT_EQ(3, manager->GetFocus(manager->GetRoot())->GetId()); |
1206 } | 1207 } |
1207 | 1208 |
1208 } // namespace content | 1209 } // namespace content |
OLD | NEW |