browser_accessibility_mac_unittest.mm revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// 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/scoped_ptr.h" 8#include "base/string_util.h" 9#include "base/utf_string_conversions.h" 10#include "chrome/browser/accessibility/browser_accessibility_cocoa.h" 11#include "chrome/browser/accessibility/browser_accessibility_manager.h" 12#include "chrome/browser/ui/cocoa/cocoa_test_helper.h" 13#include "testing/gtest/include/gtest/gtest.h" 14#import "testing/gtest_mac.h" 15 16@interface MockAccessibilityDelegate : 17 NSView<BrowserAccessibilityDelegateCocoa> 18 19- (NSPoint)accessibilityPointInScreen:(BrowserAccessibilityCocoa*)accessibility; 20- (void)doDefaultAction:(int32)accessibilityObjectId; 21- (void)setAccessibilityFocus:(BOOL)focus 22 accessibilityId:(int32)accessibilityObjectId; 23- (NSWindow*)window; 24 25@end 26 27@implementation MockAccessibilityDelegate 28 29- (NSPoint)accessibilityPointInScreen: 30 (BrowserAccessibilityCocoa*)accessibility { 31 return NSZeroPoint; 32} 33- (void)doDefaultAction:(int32)accessibilityObjectId { 34} 35- (void)setAccessibilityFocus:(BOOL)focus 36 accessibilityId:(int32)accessibilityObjectId { 37} 38- (NSWindow*)window { 39 return nil; 40} 41 42@end 43 44 45class BrowserAccessibilityTest : public CocoaTest { 46 public: 47 virtual void SetUp() { 48 CocoaTest::SetUp(); 49 WebAccessibility root; 50 root.location.x = 0; 51 root.location.y = 0; 52 root.location.width = 500; 53 root.location.height = 100; 54 root.role = WebAccessibility::ROLE_WEB_AREA; 55 root.attributes[WebAccessibility::ATTR_HELP] = ASCIIToUTF16("HelpText"); 56 57 WebAccessibility child1; 58 child1.name = ASCIIToUTF16("Child1"); 59 child1.location.x = 0; 60 child1.location.y = 0; 61 child1.location.width = 250; 62 child1.location.height = 100; 63 child1.role = WebAccessibility::ROLE_BUTTON; 64 65 WebAccessibility child2; 66 child2.location.x = 250; 67 child2.location.y = 0; 68 child2.location.width = 250; 69 child2.location.height = 100; 70 child2.role = WebAccessibility::ROLE_HEADING; 71 72 root.children.push_back(child1); 73 root.children.push_back(child2); 74 75 delegate_.reset([[MockAccessibilityDelegate alloc] init]); 76 manager_.reset( 77 BrowserAccessibilityManager::Create(delegate_, root, NULL)); 78 accessibility_.reset([manager_->GetRoot()->toBrowserAccessibilityCocoa() 79 retain]); 80 } 81 82 protected: 83 scoped_nsobject<MockAccessibilityDelegate> delegate_; 84 scoped_nsobject<BrowserAccessibilityCocoa> accessibility_; 85 scoped_ptr<BrowserAccessibilityManager> manager_; 86}; 87 88// Standard hit test. 89TEST_F(BrowserAccessibilityTest, HitTestTest) { 90 BrowserAccessibilityCocoa* firstChild = 91 [accessibility_ accessibilityHitTest:NSMakePoint(50, 50)]; 92 EXPECT_NSEQ(@"Child1", 93 [firstChild accessibilityAttributeValue:NSAccessibilityTitleAttribute]); 94} 95 96// Test doing a hit test on the edge of a child. 97TEST_F(BrowserAccessibilityTest, EdgeHitTest) { 98 BrowserAccessibilityCocoa* firstChild = 99 [accessibility_ accessibilityHitTest:NSMakePoint(0, 0)]; 100 EXPECT_NSEQ(@"Child1", 101 [firstChild accessibilityAttributeValue:NSAccessibilityTitleAttribute]); 102} 103 104// This will test a hit test with invalid coordinates. It is assumed that 105// the hit test has been narrowed down to this object or one of its children 106// so it should return itself since it has no better hit result. 107TEST_F(BrowserAccessibilityTest, InvalidHitTestCoordsTest) { 108 BrowserAccessibilityCocoa* hitTestResult = 109 [accessibility_ accessibilityHitTest:NSMakePoint(-50, 50)]; 110 EXPECT_NSEQ(accessibility_, hitTestResult); 111} 112 113// Test to ensure querying standard attributes works. 114TEST_F(BrowserAccessibilityTest, BasicAttributeTest) { 115 NSString* helpText = [accessibility_ 116 accessibilityAttributeValue:NSAccessibilityHelpAttribute]; 117 EXPECT_NSEQ(@"HelpText", helpText); 118} 119 120// Test querying for an invalid attribute to ensure it doesn't crash. 121TEST_F(BrowserAccessibilityTest, InvalidAttributeTest) { 122 NSString* shouldBeNil = [accessibility_ 123 accessibilityAttributeValue:@"NSAnInvalidAttribute"]; 124 EXPECT_TRUE(shouldBeNil == nil); 125} 126