Chromium Code Reviews| Index: ui/views/cocoa/bridged_native_widget_unittest.mm |
| diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| index d67e665fbb1d13611fe5e500f18ec6995cab0a59..1c5aa8eb14da334565aa8f12c75b04d2e2303a76 100644 |
| --- a/ui/views/cocoa/bridged_native_widget_unittest.mm |
| +++ b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| @@ -10,6 +10,7 @@ |
| #import "base/mac/foundation_util.h" |
| #import "base/mac/mac_util.h" |
| +#import "base/mac/scoped_objc_class_swizzler.h" |
| #import "base/mac/sdk_forward_declarations.h" |
| #include "base/macros.h" |
| #include "base/message_loop/message_loop.h" |
| @@ -18,6 +19,8 @@ |
| #import "testing/gtest_mac.h" |
| #import "ui/base/cocoa/window_size_constants.h" |
| #include "ui/base/ime/input_method.h" |
| +#import "ui/base/test/scoped_fake_full_keyboard_access.h" |
| +#import "ui/base/test/scoped_fake_nswindow_focus.h" |
| #import "ui/gfx/mac/coordinate_conversion.h" |
| #import "ui/gfx/test/ui_cocoa_test_helper.h" |
| #import "ui/views/cocoa/bridged_content_view.h" |
| @@ -748,5 +751,110 @@ TEST_F(BridgedNativeWidgetSimulateFullscreenTest, FailToEnterAndExit) { |
| widget_->CloseNow(); |
| } |
| +class BridgedNativeWidgetFullKeyboardAccess |
|
tapted
2016/04/20 06:05:57
BridgedNativeWidgetFullKeyboardAccessTest
karandeepb
2016/05/03 02:54:12
Done.
|
| + : public BridgedNativeWidgetTestBase { |
| + public: |
| + BridgedNativeWidgetFullKeyboardAccess(); |
| + ~BridgedNativeWidgetFullKeyboardAccess() override; |
| + |
| + // testing::Test: |
| + void SetUp() override; |
| + void TearDown() override; |
| + |
| + protected: |
| + std::unique_ptr<views::View> view_; |
| + base::scoped_nsobject<NSWindow> window_; |
| + ui::test::ScopedFakeFullKeyboardAccess fake_full_keyboard_access_; |
| + |
| + private: |
| + ui::test::ScopedFakeNSWindowFocus fake_window_focus_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BridgedNativeWidgetFullKeyboardAccess); |
| +}; |
| + |
| +BridgedNativeWidgetFullKeyboardAccess::BridgedNativeWidgetFullKeyboardAccess() { |
| +} |
| + |
| +BridgedNativeWidgetFullKeyboardAccess:: |
| + ~BridgedNativeWidgetFullKeyboardAccess() {} |
|
tapted
2016/04/20 06:05:57
these can be defined inline
karandeepb
2016/05/03 02:54:12
Done.
|
| + |
| +void BridgedNativeWidgetFullKeyboardAccess::SetUp() { |
| + BridgedNativeWidgetTestBase::SetUp(); |
| + |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(false); |
| + |
| + // Don't use test_window() since it has special handling when key. |
|
tapted
2016/04/20 06:05:57
It might be easier to use NativeWidgetMacTest -- B
karandeepb
2016/05/03 02:54:12
Done, though it feels like these tests should belo
|
| + window_.reset([[NativeWidgetMacNSWindow alloc] |
| + initWithContentRect:NSMakeRect(50, 50, 400, 300) |
| + styleMask:NSBorderlessWindowMask |
| + backing:NSBackingStoreBuffered |
| + defer:NO]); |
| + [window_ setReleasedWhenClosed:NO]; // Owned by scoped_nsobject. |
| + |
| + bridge()->Init(window_, init_params_); |
| + |
| + view_.reset(new views::internal::RootView(widget_.get())); |
| + bridge()->SetRootView(view_.get()); |
| + [window_ makeFirstResponder:bridge()->ns_view()]; |
| + |
| + widget_->Show(); |
| +} |
| + |
| +void BridgedNativeWidgetFullKeyboardAccess::TearDown() { |
| + widget_->CloseNow(); |
| + |
| + // Release |window_| since ui::CocoaTest::TearDown() checks whether all |
| + // windows have been released. |
| + window_.reset(); |
| + BridgedNativeWidgetTestBase::TearDown(); |
| +} |
| + |
| +// Test that updateFullKeyboardAccess method on BridgedContentView correctly |
| +// sets the keyboard accessibility mode on the associated focus manager. |
| +TEST_F(BridgedNativeWidgetFullKeyboardAccess, FullKeyboardToggle) { |
| + EXPECT_FALSE(widget_->GetFocusManager()->keyboard_accessible()); |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(true); |
| + [bridge()->ns_view() updateFullKeyboardAccess]; |
|
tapted
2016/04/20 06:05:57
(unless you run into problems, this should be trig
karandeepb
2016/05/03 02:54:12
Can't catch notifications generated via NSDistribu
|
| + EXPECT_TRUE(widget_->GetFocusManager()->keyboard_accessible()); |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(false); |
| + [bridge()->ns_view() updateFullKeyboardAccess]; |
| + EXPECT_FALSE(widget_->GetFocusManager()->keyboard_accessible()); |
| +} |
| + |
| +// Test that on initilization, BridgedContentView correctly sets the full |
| +// keyboard access mode on the associated FocusManager. |
| +TEST_F(BridgedNativeWidgetFullKeyboardAccess, Initialization) { |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(true); |
| + view_.reset(new views::internal::RootView(widget_.get())); |
| + bridge()->SetRootView(view_.get()); |
| + EXPECT_TRUE(widget_->GetFocusManager()->keyboard_accessible()); |
| + |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(false); |
| + view_.reset(new views::internal::RootView(widget_.get())); |
| + bridge()->SetRootView(view_.get()); |
| + EXPECT_FALSE(widget_->GetFocusManager()->keyboard_accessible()); |
| +} |
| + |
| +// Test that the correct keyboard accessibility mode is set when the window |
| +// becomes active. |
| +TEST_F(BridgedNativeWidgetFullKeyboardAccess, Activation) { |
| + EXPECT_FALSE(widget_->GetFocusManager()->keyboard_accessible()); |
| + |
| + widget_->Hide(); |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(true); |
| + // [ns_view updateFullKeyboardAccess] is not explicitly called since we may |
| + // not receive full keyboard access toggle notifications when our |
| + // application is inactive. |
| + |
| + widget_->Show(); |
| + EXPECT_TRUE(widget_->GetFocusManager()->keyboard_accessible()); |
| + |
| + widget_->Hide(); |
| + fake_full_keyboard_access_.SetFullKeyboardAccessState(false); |
| + |
| + widget_->Show(); |
| + EXPECT_FALSE(widget_->GetFocusManager()->keyboard_accessible()); |
| +} |
| + |
| } // namespace test |
| } // namespace views |