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 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/browser/accessibility/browser_accessibility_cocoa.h" | 10 #include "content/browser/accessibility/browser_accessibility_cocoa.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 | 52 |
53 @end | 53 @end |
54 | 54 |
55 namespace content { | 55 namespace content { |
56 | 56 |
57 class BrowserAccessibilityTest : public ui::CocoaTest { | 57 class BrowserAccessibilityTest : public ui::CocoaTest { |
58 public: | 58 public: |
59 virtual void SetUp() { | 59 virtual void SetUp() { |
60 CocoaTest::SetUp(); | 60 CocoaTest::SetUp(); |
| 61 RebuildAccessibilityTree(); |
| 62 } |
| 63 |
| 64 protected: |
| 65 void RebuildAccessibilityTree() { |
61 AccessibilityNodeData root; | 66 AccessibilityNodeData root; |
62 root.id = 1000; | 67 root.id = 1000; |
63 root.location.set_width(500); | 68 root.location.set_width(500); |
64 root.location.set_height(100); | 69 root.location.set_height(100); |
65 root.role = AccessibilityNodeData::ROLE_ROOT_WEB_AREA; | 70 root.role = AccessibilityNodeData::ROLE_ROOT_WEB_AREA; |
66 root.string_attributes[AccessibilityNodeData::ATTR_HELP] = | 71 root.string_attributes[AccessibilityNodeData::ATTR_HELP] = |
67 ASCIIToUTF16("HelpText"); | 72 ASCIIToUTF16("HelpText"); |
68 root.child_ids.push_back(1001); | 73 root.child_ids.push_back(1001); |
69 root.child_ids.push_back(1002); | 74 root.child_ids.push_back(1002); |
70 | 75 |
(...skipping 12 matching lines...) Expand all Loading... |
83 child2.role = AccessibilityNodeData::ROLE_HEADING; | 88 child2.role = AccessibilityNodeData::ROLE_HEADING; |
84 | 89 |
85 delegate_.reset([[MockAccessibilityDelegate alloc] init]); | 90 delegate_.reset([[MockAccessibilityDelegate alloc] init]); |
86 manager_.reset( | 91 manager_.reset( |
87 new BrowserAccessibilityManagerMac(delegate_, root, NULL)); | 92 new BrowserAccessibilityManagerMac(delegate_, root, NULL)); |
88 manager_->UpdateNodesForTesting(child1, child2); | 93 manager_->UpdateNodesForTesting(child1, child2); |
89 accessibility_.reset([manager_->GetRoot()->ToBrowserAccessibilityCocoa() | 94 accessibility_.reset([manager_->GetRoot()->ToBrowserAccessibilityCocoa() |
90 retain]); | 95 retain]); |
91 } | 96 } |
92 | 97 |
93 protected: | |
94 scoped_nsobject<MockAccessibilityDelegate> delegate_; | 98 scoped_nsobject<MockAccessibilityDelegate> delegate_; |
95 scoped_nsobject<BrowserAccessibilityCocoa> accessibility_; | 99 scoped_nsobject<BrowserAccessibilityCocoa> accessibility_; |
96 scoped_ptr<BrowserAccessibilityManager> manager_; | 100 scoped_ptr<BrowserAccessibilityManager> manager_; |
97 }; | 101 }; |
98 | 102 |
99 // Standard hit test. | 103 // Standard hit test. |
100 TEST_F(BrowserAccessibilityTest, HitTestTest) { | 104 TEST_F(BrowserAccessibilityTest, HitTestTest) { |
101 BrowserAccessibilityCocoa* firstChild = | 105 BrowserAccessibilityCocoa* firstChild = |
102 [accessibility_ accessibilityHitTest:NSMakePoint(50, 50)]; | 106 [accessibility_ accessibilityHitTest:NSMakePoint(50, 50)]; |
103 EXPECT_NSEQ(@"Child1", | 107 EXPECT_NSEQ(@"Child1", |
(...skipping 25 matching lines...) Expand all Loading... |
129 EXPECT_NSEQ(@"HelpText", helpText); | 133 EXPECT_NSEQ(@"HelpText", helpText); |
130 } | 134 } |
131 | 135 |
132 // Test querying for an invalid attribute to ensure it doesn't crash. | 136 // Test querying for an invalid attribute to ensure it doesn't crash. |
133 TEST_F(BrowserAccessibilityTest, InvalidAttributeTest) { | 137 TEST_F(BrowserAccessibilityTest, InvalidAttributeTest) { |
134 NSString* shouldBeNil = [accessibility_ | 138 NSString* shouldBeNil = [accessibility_ |
135 accessibilityAttributeValue:@"NSAnInvalidAttribute"]; | 139 accessibilityAttributeValue:@"NSAnInvalidAttribute"]; |
136 EXPECT_TRUE(shouldBeNil == nil); | 140 EXPECT_TRUE(shouldBeNil == nil); |
137 } | 141 } |
138 | 142 |
| 143 TEST_F(BrowserAccessibilityTest, RetainedDetachedObjectsReturnNil) { |
| 144 // Get the first child. |
| 145 BrowserAccessibilityCocoa* retainedFirstChild = |
| 146 [accessibility_ accessibilityHitTest:NSMakePoint(50, 50)]; |
| 147 EXPECT_NSEQ(@"Child1", [retainedFirstChild |
| 148 accessibilityAttributeValue:NSAccessibilityTitleAttribute]); |
| 149 |
| 150 // Retain it. This simulates what the system might do with an |
| 151 // accessibility object. |
| 152 [retainedFirstChild retain]; |
| 153 |
| 154 // Rebuild the accessibility tree, which should detach |retainedFirstChild|. |
| 155 RebuildAccessibilityTree(); |
| 156 |
| 157 // Now any attributes we query should return nil. |
| 158 EXPECT_EQ(nil, [retainedFirstChild |
| 159 accessibilityAttributeValue:NSAccessibilityTitleAttribute]); |
| 160 |
| 161 // Don't leak memory in the test. |
| 162 [retainedFirstChild release]; |
| 163 } |
| 164 |
139 } // namespace content | 165 } // namespace content |
OLD | NEW |