blob: 27bee1a54bc62f3782611e55b1e0ff7a599d3087 [file] [log] [blame]
[email protected]020a50c2010-07-07 21:59:061// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import <Cocoa/Cocoa.h>
6
7#include "base/string_util.h"
[email protected]81e34d82010-08-19 18:36:258#include "base/utf_string_conversions.h"
[email protected]1dbadbd2010-10-13 18:50:109#include "chrome/browser/accessibility/browser_accessibility_mac.h"
[email protected]020a50c2010-07-07 21:59:0610#include "chrome/browser/cocoa/browser_accessibility.h"
11#include "chrome/browser/cocoa/cocoa_test_helper.h"
12#include "testing/gtest/include/gtest/gtest.h"
[email protected]70d5c182010-08-06 20:43:0713#import "testing/gtest_mac.h"
[email protected]020a50c2010-07-07 21:59:0614
[email protected]1dbadbd2010-10-13 18:50:1015@interface MockAccessibilityDelegate :
16 NSObject<BrowserAccessibilityDelegateCocoa>
[email protected]020a50c2010-07-07 21:59:0617
[email protected]1dbadbd2010-10-13 18:50:1018- (NSPoint)accessibilityPointInScreen:(BrowserAccessibilityCocoa*)accessibility;
[email protected]020a50c2010-07-07 21:59:0619- (void)doDefaultAction:(int32)accessibilityObjectId;
20- (void)setAccessibilityFocus:(BOOL)focus
21 accessibilityId:(int32)accessibilityObjectId;
22- (NSWindow*)window;
23
24@end
25
26@implementation MockAccessibilityDelegate
27
[email protected]1dbadbd2010-10-13 18:50:1028- (NSPoint)accessibilityPointInScreen:
29 (BrowserAccessibilityCocoa*)accessibility {
[email protected]020a50c2010-07-07 21:59:0630 return NSZeroPoint;
31}
32- (void)doDefaultAction:(int32)accessibilityObjectId {
33}
34- (void)setAccessibilityFocus:(BOOL)focus
35 accessibilityId:(int32)accessibilityObjectId {
36}
37- (NSWindow*)window {
38 return nil;
39}
40
41@end
42
43
44class BrowserAccessibilityTest : public CocoaTest {
45 public:
46 virtual void SetUp() {
47 CocoaTest::SetUp();
48 WebAccessibility root;
49 root.location.x = 0;
50 root.location.y = 0;
51 root.location.width = 500;
52 root.location.height = 100;
53 root.attributes[WebAccessibility::ATTR_HELP] = ASCIIToUTF16("HelpText");
54
55 WebAccessibility child1;
56 child1.name = ASCIIToUTF16("Child1");
57 child1.location.x = 0;
58 child1.location.y = 0;
59 child1.location.width = 250;
60 child1.location.height = 100;
[email protected]198d45d2010-07-27 00:20:5661
[email protected]020a50c2010-07-07 21:59:0662 WebAccessibility child2;
63 child2.location.x = 250;
64 child2.location.y = 0;
65 child2.location.width = 250;
66 child2.location.height = 100;
[email protected]198d45d2010-07-27 00:20:5667
[email protected]1dbadbd2010-10-13 18:50:1068 // TODO(dtseng): use BrowserAccessibilityManagerMac once it manages
69 // these objects.
70 BrowserAccessibility* rootBrowserAccessibility =
71 BrowserAccessibility::Create();
72 BrowserAccessibility* child1BrowserAccessibility =
73 BrowserAccessibility::Create();
74 BrowserAccessibility* child2BrowserAccessibility =
75 BrowserAccessibility::Create();
76
77 rootBrowserAccessibility->Initialize(NULL,
78 NULL,
79 0,
80 0,
81 root);
82 child1BrowserAccessibility->Initialize(NULL,
83 NULL,
84 0,
85 0,
86 child1);
87 child2BrowserAccessibility->Initialize(NULL,
88 NULL,
89 0,
90 0,
91 child2);
92
93 rootBrowserAccessibility->AddChild(child1BrowserAccessibility);
94 rootBrowserAccessibility->AddChild(child2BrowserAccessibility);
[email protected]198d45d2010-07-27 00:20:5695
[email protected]020a50c2010-07-07 21:59:0696 delegate_.reset([[MockAccessibilityDelegate alloc] init]);
97 accessibility_.reset(
[email protected]1dbadbd2010-10-13 18:50:1098 [[BrowserAccessibilityCocoa alloc]
99 initWithObject:rootBrowserAccessibility
100 delegate:delegate_
101 parent:delegate_]);
[email protected]020a50c2010-07-07 21:59:06102 }
[email protected]198d45d2010-07-27 00:20:56103
[email protected]020a50c2010-07-07 21:59:06104 protected:
105 scoped_nsobject<MockAccessibilityDelegate> delegate_;
[email protected]1dbadbd2010-10-13 18:50:10106 scoped_nsobject<BrowserAccessibilityCocoa> accessibility_;
[email protected]020a50c2010-07-07 21:59:06107};
108
[email protected]198d45d2010-07-27 00:20:56109// Standard hit test.
[email protected]020a50c2010-07-07 21:59:06110TEST_F(BrowserAccessibilityTest, HitTestTest) {
[email protected]1dbadbd2010-10-13 18:50:10111 BrowserAccessibilityCocoa* firstChild =
[email protected]020a50c2010-07-07 21:59:06112 [accessibility_ accessibilityHitTest:NSMakePoint(50, 50)];
[email protected]70d5c182010-08-06 20:43:07113 EXPECT_NSEQ(@"Child1",
114 [firstChild accessibilityAttributeValue:NSAccessibilityTitleAttribute]);
[email protected]020a50c2010-07-07 21:59:06115}
116
[email protected]198d45d2010-07-27 00:20:56117// Test doing a hit test on the edge of a child.
118TEST_F(BrowserAccessibilityTest, EdgeHitTest) {
[email protected]1dbadbd2010-10-13 18:50:10119 BrowserAccessibilityCocoa* firstChild =
[email protected]198d45d2010-07-27 00:20:56120 [accessibility_ accessibilityHitTest:NSMakePoint(0, 0)];
[email protected]70d5c182010-08-06 20:43:07121 EXPECT_NSEQ(@"Child1",
122 [firstChild accessibilityAttributeValue:NSAccessibilityTitleAttribute]);
[email protected]198d45d2010-07-27 00:20:56123}
124
125// This will test a hit test with invalid coordinates. It is assumed that
126// the hit test has been narrowed down to this object or one of its children
127// so it should return itself since it has no better hit result.
128TEST_F(BrowserAccessibilityTest, InvalidHitTestCoordsTest) {
[email protected]1dbadbd2010-10-13 18:50:10129 BrowserAccessibilityCocoa* hitTestResult =
[email protected]198d45d2010-07-27 00:20:56130 [accessibility_ accessibilityHitTest:NSMakePoint(-50, 50)];
[email protected]70d5c182010-08-06 20:43:07131 EXPECT_NSEQ(accessibility_, hitTestResult);
[email protected]198d45d2010-07-27 00:20:56132}
133
134// Test to ensure querying standard attributes works.
[email protected]020a50c2010-07-07 21:59:06135TEST_F(BrowserAccessibilityTest, BasicAttributeTest) {
136 NSString* helpText = [accessibility_
137 accessibilityAttributeValue:NSAccessibilityHelpAttribute];
[email protected]70d5c182010-08-06 20:43:07138 EXPECT_NSEQ(@"HelpText", helpText);
[email protected]020a50c2010-07-07 21:59:06139}
[email protected]198d45d2010-07-27 00:20:56140
141// Test querying for an invalid attribute to ensure it doesn't crash.
142TEST_F(BrowserAccessibilityTest, InvalidAttributeTest) {
143 NSString* shouldBeNil = [accessibility_
144 accessibilityAttributeValue:@"NSAnInvalidAttribute"];
145 EXPECT_TRUE(shouldBeNil == nil);
146}