1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
// Copyright (c) 2012 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/debug/debugger.h"
#include "base/mac/scoped_nsobject.h"
#include "chrome/app/chrome_command_ids.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
#import "chrome/browser/ui/cocoa/framed_browser_window.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
#include "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
class FramedBrowserWindowTest : public CocoaTest {
public:
void SetUp() override {
CocoaTest::SetUp();
// Create a window.
window_ = [[FramedBrowserWindow alloc]
initWithContentRect:NSMakeRect(0, 0, 800, 600)
hasTabStrip:YES];
if (base::debug::BeingDebugged()) {
[window_ orderFront:nil];
} else {
[window_ orderBack:nil];
}
}
void TearDown() override {
[window_ close];
CocoaTest::TearDown();
}
// Returns a canonical snapshot of the window.
NSData* WindowContentsAsTIFF() {
[window_ display];
NSView* frameView = [window_ contentView];
while ([frameView superview]) {
frameView = [frameView superview];
}
// Inset to mask off left and right edges which vary in HighDPI.
NSRect bounds = NSInsetRect([frameView bounds], 4, 0);
// On 10.6, the grippy changes appearance slightly when painted the second
// time in a textured window. Since this test cares about the window title,
// cut off the bottom of the window.
bounds.size.height -= 40;
bounds.origin.y += 40;
[frameView lockFocus];
base::scoped_nsobject<NSBitmapImageRep> bitmap(
[[NSBitmapImageRep alloc] initWithFocusedViewRect:bounds]);
[frameView unlockFocus];
return [bitmap TIFFRepresentation];
}
FramedBrowserWindow* window_;
};
// Baseline test that the window creates, displays, closes, and
// releases.
TEST_F(FramedBrowserWindowTest, ShowAndClose) {
[window_ display];
}
// Test that undocumented title-hiding API we're using does the job.
TEST_F(FramedBrowserWindowTest, DoesHideTitle) {
// The -display calls are not strictly necessary, but they do
// make it easier to see what's happening when debugging (without
// them the changes are never flushed to the screen).
[window_ setTitle:@""];
[window_ display];
NSData* emptyTitleData = WindowContentsAsTIFF();
[window_ setTitle:@"This is a title"];
[window_ display];
NSData* thisTitleData = WindowContentsAsTIFF();
// The default window with a title should look different from the
// window with an empty title.
EXPECT_FALSE([emptyTitleData isEqualToData:thisTitleData]);
[window_ setShouldHideTitle:YES];
[window_ setTitle:@""];
[window_ display];
[window_ setTitle:@"This is a title"];
[window_ display];
NSData* hiddenTitleData = WindowContentsAsTIFF();
// With our magic setting, the window with a title should look the
// same as the window with an empty title.
EXPECT_TRUE([window_ _isTitleHidden]);
EXPECT_TRUE([emptyTitleData isEqualToData:hiddenTitleData]);
}
// Test to make sure that our window widgets are in the right place.
TEST_F(FramedBrowserWindowTest, WindowWidgetLocation) {
BOOL yes = YES;
BOOL no = NO;
// First without a tabstrip.
[window_ close];
window_ = [[FramedBrowserWindow alloc]
initWithContentRect:NSMakeRect(0, 0, 800, 600)
hasTabStrip:NO];
id controller = [OCMockObject mockForClass:[BrowserWindowController class]];
[[[controller stub] andReturnValue:OCMOCK_VALUE(yes)]
isKindOfClass:[BrowserWindowController class]];
[[[controller expect] andReturnValue:OCMOCK_VALUE(no)] hasTabStrip];
[[[controller expect] andReturnValue:OCMOCK_VALUE(yes)] hasTitleBar];
[[[controller expect] andReturnValue:OCMOCK_VALUE(no)] isTabbedWindow];
[window_ setWindowController:controller];
NSView* closeBoxControl = [window_ standardWindowButton:NSWindowCloseButton];
EXPECT_TRUE(closeBoxControl);
NSRect closeBoxFrame = [closeBoxControl frame];
NSRect windowBounds = [window_ frame];
windowBounds = [[window_ contentView] convertRect:windowBounds fromView:nil];
windowBounds.origin = NSZeroPoint;
EXPECT_EQ(NSMaxY(closeBoxFrame),
NSMaxY(windowBounds) -
kFramedWindowButtonsWithoutTabStripOffsetFromTop);
EXPECT_EQ(NSMinX(closeBoxFrame),
kFramedWindowButtonsWithoutTabStripOffsetFromLeft);
NSView* miniaturizeControl =
[window_ standardWindowButton:NSWindowMiniaturizeButton];
EXPECT_TRUE(miniaturizeControl);
NSRect miniaturizeFrame = [miniaturizeControl frame];
EXPECT_EQ(NSMaxY(miniaturizeFrame),
NSMaxY(windowBounds) -
kFramedWindowButtonsWithoutTabStripOffsetFromTop);
EXPECT_EQ(NSMinX(miniaturizeFrame),
NSMaxX(closeBoxFrame) + [window_ windowButtonsInterButtonSpacing]);
[window_ setWindowController:nil];
// Then with a tabstrip.
[window_ close];
window_ = [[FramedBrowserWindow alloc]
initWithContentRect:NSMakeRect(0, 0, 800, 600)
hasTabStrip:YES];
controller = [OCMockObject mockForClass:[BrowserWindowController class]];
[[[controller stub] andReturnValue:OCMOCK_VALUE(yes)]
isKindOfClass:[BrowserWindowController class]];
[[[controller expect] andReturnValue:OCMOCK_VALUE(yes)] hasTabStrip];
[[[controller expect] andReturnValue:OCMOCK_VALUE(no)] hasTitleBar];
[[[controller expect] andReturnValue:OCMOCK_VALUE(yes)] isTabbedWindow];
[window_ setWindowController:controller];
closeBoxControl = [window_ standardWindowButton:NSWindowCloseButton];
EXPECT_TRUE(closeBoxControl);
closeBoxFrame = [closeBoxControl frame];
windowBounds = [window_ frame];
windowBounds = [[window_ contentView] convertRect:windowBounds fromView:nil];
windowBounds.origin = NSZeroPoint;
EXPECT_EQ(NSMaxY(closeBoxFrame),
NSMaxY(windowBounds) -
kFramedWindowButtonsWithTabStripOffsetFromTop);
EXPECT_EQ(NSMinX(closeBoxFrame),
kFramedWindowButtonsWithTabStripOffsetFromLeft);
miniaturizeControl = [window_ standardWindowButton:NSWindowMiniaturizeButton];
EXPECT_TRUE(miniaturizeControl);
miniaturizeFrame = [miniaturizeControl frame];
EXPECT_EQ(NSMaxY(miniaturizeFrame),
NSMaxY(windowBounds) -
kFramedWindowButtonsWithTabStripOffsetFromTop);
EXPECT_EQ(NSMinX(miniaturizeFrame),
NSMaxX(closeBoxFrame) + [window_ windowButtonsInterButtonSpacing]);
[window_ setWindowController:nil];
}
|