Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4341)

Unified Diff: chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller_unittest.mm

Issue 2516803002: [Mac] Tests for FullscreenToolbarController (Closed)
Patch Set: Fix for rsesek Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller.mm ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller_unittest.mm
diff --git a/chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller_unittest.mm b/chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..b731b8b64342614265b8a8f911ea06bb54571af8
--- /dev/null
+++ b/chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller_unittest.mm
@@ -0,0 +1,299 @@
+// Copyright 2016 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.
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/mac_util.h"
+#include "base/mac/scoped_nsobject.h"
+#include "base/macros.h"
+#import "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_menubar_tracker.h"
+#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_animation_controller.h"
+#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller.h"
+#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_mouse_tracker.h"
+#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_visibility_lock_controller.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#import "testing/gtest_mac.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "ui/base/cocoa/appkit_utils.h"
+
+//////////////////////////////////////////////////////////////////
+// MockFullscreenToolbarMouseTracker
+// Mocks the mouse interactions with the toolbar.
+
+@interface MockFullscreenToolbarMouseTracker : FullscreenToolbarMouseTracker
+
+@property(nonatomic, assign) BOOL mouseInside;
+
+// Overridden to prevent a tracking area from being created.
+- (void)updateTrackingArea;
+
+- (BOOL)mouseInsideTrackingArea;
+
+@end
+
+@implementation MockFullscreenToolbarMouseTracker
+
+@synthesize mouseInside = mouseInside_;
+
+- (void)updateTrackingArea {
+}
+
+- (BOOL)mouseInsideTrackingArea {
+ return mouseInside_;
+}
+
+@end
+
+//////////////////////////////////////////////////////////////////
+// MockFullscreenMenubarTracker
+// Mocks the state of the menubar.
+
+@interface MockFullscreenMenubarTracker : FullscreenMenubarTracker {
+ CGFloat menubarFraction_;
+ FullscreenMenubarState menubarState_;
+}
+
+- (CGFloat)menubarFraction;
+- (FullscreenMenubarState)state;
+- (void)setMenubarProgress:(CGFloat)progress;
+
+@end
+
+@implementation MockFullscreenMenubarTracker
+
+- (CGFloat)menubarFraction {
+ return menubarFraction_;
+}
+
+- (FullscreenMenubarState)state {
+ return menubarState_;
+}
+
+- (void)setMenubarProgress:(CGFloat)progress {
+ if (ui::IsCGFloatEqual(progress, 1.0))
+ menubarState_ = FullscreenMenubarState::SHOWN;
+ else if (ui::IsCGFloatEqual(progress, 0.0))
+ menubarState_ = FullscreenMenubarState::HIDDEN;
+ else if (progress < menubarFraction_)
+ menubarState_ = FullscreenMenubarState::HIDING;
+ else if (progress > menubarFraction_)
+ menubarState_ = FullscreenMenubarState::SHOWING;
+ menubarFraction_ = progress;
+}
+
+@end
+
+namespace {
+
+class FullscreenToolbarControllerTest : public testing::Test {
+ public:
+ FullscreenToolbarControllerTest() {}
+ void SetUp() override {
+ BOOL yes = YES;
+ BOOL no = NO;
+
+ bwc_ = [OCMockObject mockForClass:[BrowserWindowController class]];
+ [[[bwc_ stub] andReturnValue:OCMOCK_VALUE(yes)]
+ isKindOfClass:[BrowserWindowController class]];
+ [[[bwc_ stub] andReturnValue:OCMOCK_VALUE(yes)] isInAppKitFullscreen];
+ [[[bwc_ stub] andReturnValue:OCMOCK_VALUE(no)] isInImmersiveFullscreen];
+ [[bwc_ stub] layoutSubviews];
+
+ controller_.reset(
+ [[FullscreenToolbarController alloc] initWithBrowserController:bwc_]);
+ SetToolbarStyle(FullscreenToolbarStyle::TOOLBAR_HIDDEN);
+
+ menubar_tracker_.reset([[MockFullscreenMenubarTracker alloc]
+ initWithFullscreenToolbarController:nil]);
+ [menubar_tracker_ setMenubarProgress:0.0];
+ [controller_ setMenubarTracker:menubar_tracker_];
+
+ mouse_tracker_.reset([[MockFullscreenToolbarMouseTracker alloc] init]);
+ [controller_ setMouseTracker:mouse_tracker_];
+
+ [controller_ animationController]->SetAnimationDuration(0.0);
+
+ [controller_ setTestFullscreenMode:YES];
+ }
+
+ void TearDown() override { [controller_ setTestFullscreenMode:NO]; }
+
+ void SetToolbarStyle(FullscreenToolbarStyle style) {
+ [controller_ setToolbarStyle:style];
+ }
+
+ void CheckLayout(CGFloat toolbarFraction, CGFloat menubarFraction) {
+ FullscreenToolbarLayout layout = [controller_ computeLayout];
+ EXPECT_EQ(toolbarFraction, layout.toolbarFraction);
+ EXPECT_EQ(menubarFraction * [controller_ toolbarVerticalOffset],
+ layout.menubarOffset);
+ }
+
+ // A mock BrowserWindowController object.
+ id bwc_;
+
+ // The FullscreenToolbarController object being tested.
+ base::scoped_nsobject<FullscreenToolbarController> controller_;
+
+ // Mocks the state of the menubar.
+ base::scoped_nsobject<MockFullscreenMenubarTracker> menubar_tracker_;
+
+ // Mocks the mouse interactions with the toolbar.
+ base::scoped_nsobject<MockFullscreenToolbarMouseTracker> mouse_tracker_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FullscreenToolbarControllerTest);
+};
+
+// Tests the toolbar fraction for the TOOLBAR_NONE and TOOLBAR_PRESENT
+// styles.
+TEST_F(FullscreenToolbarControllerTest, TestPresentAndNoneToolbarStyle) {
+ CheckLayout(0, 0);
+
+ [controller_ setToolbarStyle:FullscreenToolbarStyle::TOOLBAR_NONE];
+ CheckLayout(0, 0);
+
+ [controller_ setToolbarStyle:FullscreenToolbarStyle::TOOLBAR_PRESENT];
+ CheckLayout(1, 0);
+}
+
+// Basic test that checks if the toolbar fraction for different menubar values.
+// This test simulates the showing and hiding the menubar.
+TEST_F(FullscreenToolbarControllerTest, TestHiddenToolbarWithMenubar) {
+ CheckLayout(0, 0);
+
+ [menubar_tracker_ setMenubarProgress:0.5];
+ CheckLayout(0.5, 0.5);
+
+ [menubar_tracker_ setMenubarProgress:1];
+ CheckLayout(1, 1);
+
+ [menubar_tracker_ setMenubarProgress:0.5];
+ CheckLayout(0.5, 0.5);
+
+ [menubar_tracker_ setMenubarProgress:0];
+ CheckLayout(0, 0);
+}
+
+// Test that checks the visibility lock functions and the toolbar fraction.
+TEST_F(FullscreenToolbarControllerTest, TestHiddenToolbarWithVisibilityLocks) {
+ FullscreenToolbarVisibilityLockController* locks =
+ [controller_ visibilityLockController];
+ base::scoped_nsobject<NSObject> owner([[NSObject alloc] init]);
+ base::scoped_nsobject<NSObject> alt_owner([[NSObject alloc] init]);
+
+ [menubar_tracker_ setMenubarProgress:0];
+ CheckLayout(0, 0);
+
+ // Lock the toolbar visibility. Toolbar should be fully visible.
+ [locks lockToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ EXPECT_TRUE([locks isToolbarVisibilityLocked]);
+ EXPECT_TRUE([locks isToolbarVisibilityLockedForOwner:owner.get()]);
+ EXPECT_TRUE(![locks isToolbarVisibilityLockedForOwner:alt_owner.get()]);
+ CheckLayout(1, 0);
+
+ // Show the menubar.
+ [menubar_tracker_ setMenubarProgress:1];
+ CheckLayout(1, 1);
+
+ // Hide the menubar. The toolbar should still be fully visible.
+ [menubar_tracker_ setMenubarProgress:0.5];
+ CheckLayout(1, 0.5);
+ [menubar_tracker_ setMenubarProgress:0];
+ CheckLayout(1, 0);
+
+ // Release the lock. Toolbar should now be hidden.
+ [locks releaseToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ EXPECT_TRUE(![locks isToolbarVisibilityLocked]);
+ EXPECT_TRUE(![locks isToolbarVisibilityLockedForOwner:owner.get()]);
+ CheckLayout(0, 0);
+
+ // Lock and release the toolbar visibility with multiple owners.
+ [locks lockToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ [locks lockToolbarVisibilityForOwner:alt_owner.get() withAnimation:NO];
+ EXPECT_TRUE([locks isToolbarVisibilityLocked]);
+ EXPECT_TRUE([locks isToolbarVisibilityLockedForOwner:owner.get()]);
+ EXPECT_TRUE([locks isToolbarVisibilityLockedForOwner:alt_owner.get()]);
+ CheckLayout(1, 0);
+
+ [locks releaseToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ EXPECT_TRUE([locks isToolbarVisibilityLocked]);
+ EXPECT_TRUE(![locks isToolbarVisibilityLockedForOwner:owner.get()]);
+ EXPECT_TRUE([locks isToolbarVisibilityLockedForOwner:alt_owner.get()]);
+ CheckLayout(1, 0);
+
+ [locks releaseToolbarVisibilityForOwner:alt_owner.get() withAnimation:NO];
+ EXPECT_TRUE(![locks isToolbarVisibilityLocked]);
+ EXPECT_TRUE(![locks isToolbarVisibilityLockedForOwner:alt_owner.get()]);
+ CheckLayout(0, 0);
+}
+
+// Basic test that checks the toolbar fraction for different mouse tracking
+// values.
+TEST_F(FullscreenToolbarControllerTest, TestHiddenToolbarWithMouseTracking) {
+ CheckLayout(0, 0);
+
+ [mouse_tracker_ setMouseInside:YES];
+ CheckLayout(1, 0);
+
+ [menubar_tracker_ setMenubarProgress:1];
+ CheckLayout(1, 1);
+
+ [menubar_tracker_ setMenubarProgress:0];
+ CheckLayout(1, 0);
+
+ [mouse_tracker_ setMouseInside:NO];
+ CheckLayout(0, 0);
+}
+
+// Test that checks the toolbar fraction with mouse tracking, menubar fraction,
+// and visibility locks.
+TEST_F(FullscreenToolbarControllerTest, TestHiddenToolbarWithMultipleFactors) {
+ FullscreenToolbarVisibilityLockController* locks =
+ [controller_ visibilityLockController];
+ base::scoped_nsobject<NSObject> owner([[NSObject alloc] init]);
+ CheckLayout(0, 0);
+
+ // Toolbar should be shown with the menubar.
+ [menubar_tracker_ setMenubarProgress:1];
+ CheckLayout(1, 1);
+
+ // Move the mouse to the toolbar and start hiding the menubar. Toolbar
+ // should be fully visible.
+ [mouse_tracker_ setMouseInside:YES];
+ CheckLayout(1, 1);
+ [menubar_tracker_ setMenubarProgress:0.5];
+ CheckLayout(1, 0.5);
+
+ // Lock the toolbar's visibility.
+ [locks lockToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ CheckLayout(1, 0.5);
+
+ // Hide the menubar. Toolbar should be fully visible.
+ [menubar_tracker_ setMenubarProgress:0];
+ CheckLayout(1, 0);
+
+ // Lock the toolbar's visibility. Toolbar should be fully visible.
+ [locks releaseToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ CheckLayout(1, 0);
+
+ // Move the mouse away from the toolbar. Toolbar should hide.
+ [mouse_tracker_ setMouseInside:NO];
+ CheckLayout(0, 0);
+
+ // Lock the toolbar and move the mouse to it.
+ [locks lockToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+ [mouse_tracker_ setMouseInside:YES];
+ CheckLayout(1, 0);
+
+ // Move the mouse away from the toolbar. Toolbar should be fully visible.
+ [mouse_tracker_ setMouseInside:NO];
+ CheckLayout(1, 0);
+
+ // Release the toolbar. Toolbar should be hidden.
+ [locks releaseToolbarVisibilityForOwner:owner.get() withAnimation:NO];
+}
+
+} // namespace
« no previous file with comments | « chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_controller.mm ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698