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 |