diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 07:35:32 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 07:35:32 +0000 |
commit | 213dac2f0bff9162502fe325b6ebb85a255efcb2 (patch) | |
tree | 3640cb1f19976e38677b8632537d2d41f8444d0f /chrome/browser/ui/views/accessibility_event_router_views_unittest.cc | |
parent | 6de53d401aa8dc6c7e0a9874c71a95ce88ade50d (diff) | |
download | chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.zip chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.tar.gz chromium_src-213dac2f0bff9162502fe325b6ebb85a255efcb2.tar.bz2 |
Move browser/views to browser/ui/views
TBR=brettw
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/4694005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65508 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/views/accessibility_event_router_views_unittest.cc')
-rw-r--r-- | chrome/browser/ui/views/accessibility_event_router_views_unittest.cc | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc new file mode 100644 index 0000000..7e51ab2 --- /dev/null +++ b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc @@ -0,0 +1,174 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <string> + +#include "base/message_loop.h" +#include "base/string_util.h" +#include "base/utf_string_conversions.h" +#include "chrome/browser/extensions/extension_accessibility_api.h" +#include "chrome/browser/views/accessibility_event_router_views.h" +#include "chrome/browser/views/accessible_view_helper.h" +#include "chrome/common/notification_registrar.h" +#include "chrome/common/notification_service.h" +#include "chrome/test/testing_profile.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "views/controls/button/native_button.h" +#include "views/grid_layout.h" +#include "views/views_delegate.h" +#include "views/widget/root_view.h" +#include "views/window/window.h" + +#if defined(OS_WIN) +#include "views/widget/widget_win.h" +#elif defined(OS_LINUX) +#include "views/widget/widget_gtk.h" +#endif + +#if defined(TOOLKIT_VIEWS) + +class AccessibilityViewsDelegate : public views::ViewsDelegate { + public: + AccessibilityViewsDelegate() {} + virtual ~AccessibilityViewsDelegate() {} + + // Overridden from views::ViewsDelegate: + virtual Clipboard* GetClipboard() const { return NULL; } + virtual void SaveWindowPlacement(const std::wstring& window_name, + const gfx::Rect& bounds, + bool maximized) { + } + virtual bool GetSavedWindowBounds(const std::wstring& window_name, + gfx::Rect* bounds) const { + return false; + } + virtual bool GetSavedMaximizedState(const std::wstring& window_name, + bool* maximized) const { + return false; + } + virtual void NotifyAccessibilityEvent( + views::View* view, AccessibilityTypes::Event event_type) { + AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent( + view, event_type); + } +#if defined(OS_WIN) + virtual HICON GetDefaultWindowIcon() const { + return NULL; + } +#endif + virtual void AddRef() {} + virtual void ReleaseRef() {} + + DISALLOW_COPY_AND_ASSIGN(AccessibilityViewsDelegate); +}; + +class AccessibilityEventRouterViewsTest + : public testing::Test, + public NotificationObserver { + public: + virtual void SetUp() { + views::ViewsDelegate::views_delegate = new AccessibilityViewsDelegate(); + } + + virtual void TearDown() { + delete views::ViewsDelegate::views_delegate; + views::ViewsDelegate::views_delegate = NULL; + } + + views::Widget* CreateWidget() { +#if defined(OS_WIN) + return new views::WidgetWin(); +#elif defined(OS_LINUX) + return new views::WidgetGtk(views::WidgetGtk::TYPE_WINDOW); +#endif + } + + protected: + // Implement NotificationObserver::Observe and store information about a + // ACCESSIBILITY_CONTROL_FOCUSED event. + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + ASSERT_EQ(type.value, NotificationType::ACCESSIBILITY_CONTROL_FOCUSED); + const AccessibilityControlInfo* info = + Details<const AccessibilityControlInfo>(details).ptr(); + focus_event_count_++; + last_control_name_ = info->name(); + } + + MessageLoopForUI message_loop_; + int focus_event_count_; + std::string last_control_name_; +}; + +TEST_F(AccessibilityEventRouterViewsTest, TestFocusNotification) { + const char kButton1ASCII[] = "Button1"; + const char kButton2ASCII[] = "Button2"; + const char kButton3ASCII[] = "Button3"; + const char kButton3NewASCII[] = "Button3"; + + // Create a window and layout. + views::Widget* window = CreateWidget(); + window->Init(NULL, gfx::Rect(0, 0, 100, 100)); + views::RootView* root_view = window->GetRootView(); + views::GridLayout* layout = new views::GridLayout(root_view); + root_view->SetLayoutManager(layout); + views::ColumnSet* column_set = layout->AddColumnSet(0); + column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, + views::GridLayout::USE_PREF, 0, 0); + + // Add 3 buttons. + views::NativeButton* button1 = new views::NativeButton( + NULL, ASCIIToWide(kButton1ASCII)); + layout->StartRow(0, 0); + layout->AddView(button1); + views::NativeButton* button2 = new views::NativeButton( + NULL, ASCIIToWide(kButton2ASCII)); + layout->StartRow(0, 0); + layout->AddView(button2); + views::NativeButton* button3 = new views::NativeButton( + NULL, ASCIIToWide(kButton3ASCII)); + layout->StartRow(0, 0); + layout->AddView(button3); + + // Set focus to the first button initially. + button1->RequestFocus(); + + // Start listening to ACCESSIBILITY_CONTROL_FOCUSED notifications. + NotificationRegistrar registrar; + registrar.Add(this, + NotificationType::ACCESSIBILITY_CONTROL_FOCUSED, + NotificationService::AllSources()); + + // Switch on accessibility event notifications. + TestingProfile profile; + ExtensionAccessibilityEventRouter* accessibility_event_router = + ExtensionAccessibilityEventRouter::GetInstance(); + accessibility_event_router->SetAccessibilityEnabled(true); + + // Create an AccessibleViewHelper for this window, which will send + // accessibility notifications for all events that happen in child views. + AccessibleViewHelper accessible_view_helper(root_view, &profile); + accessible_view_helper.SetViewName(button3, std::string(kButton3NewASCII)); + + // Advance focus to the next button and test that we got the + // expected notification with the name of button 2. + views::FocusManager* focus_manager = window->GetFocusManager(); + focus_event_count_ = 0; + focus_manager->AdvanceFocus(false); + EXPECT_EQ(1, focus_event_count_); + EXPECT_EQ(kButton2ASCII, last_control_name_); + + // Advance to button 3. Expect the new accessible name we assigned. + focus_manager->AdvanceFocus(false); + EXPECT_EQ(2, focus_event_count_); + EXPECT_EQ(kButton3NewASCII, last_control_name_); + + // Advance to button 1 and check the notification. + focus_manager->AdvanceFocus(false); + EXPECT_EQ(3, focus_event_count_); + EXPECT_EQ(kButton1ASCII, last_control_name_); +} + +#endif // defined(TOOLKIT_VIEWS) |