| Index: ui/base/cocoa/controls/hover_image_menu_button_unittest.mm
|
| diff --git a/ui/base/cocoa/controls/hover_image_menu_button_unittest.mm b/ui/base/cocoa/controls/hover_image_menu_button_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..45ed3689f0699e9d9ca3cd8882f2057bb356f95a
|
| --- /dev/null
|
| +++ b/ui/base/cocoa/controls/hover_image_menu_button_unittest.mm
|
| @@ -0,0 +1,173 @@
|
| +// Copyright 2013 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 "ui/base/cocoa/controls/hover_image_menu_button.h"
|
| +
|
| +#include "base/mac/foundation_util.h"
|
| +#import "testing/gtest_mac.h"
|
| +#import "ui/base/cocoa/controls/hover_image_menu_button_cell.h"
|
| +#import "ui/base/test/ui_cocoa_test_helper.h"
|
| +
|
| +namespace ui {
|
| +
|
| +namespace {
|
| +
|
| +// Test initialization and display of the NSPopUpButton that shows the drop-
|
| +// down menu. Don't try to show the menu, since it will block the thread.
|
| +class HoverImageMenuButtonTest : public CocoaTest {
|
| + public:
|
| + HoverImageMenuButtonTest() {}
|
| +
|
| + // CocoaTest override:
|
| + virtual void SetUp() OVERRIDE;
|
| +
|
| + protected:
|
| + scoped_nsobject<HoverImageMenuButton> menu_button_;
|
| + scoped_nsobject<NSImage> normal_;
|
| + scoped_nsobject<NSImage> pressed_;
|
| + scoped_nsobject<NSImage> hovered_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HoverImageMenuButtonTest);
|
| +};
|
| +
|
| +void HoverImageMenuButtonTest::SetUp() {
|
| + menu_button_.reset(
|
| + [[HoverImageMenuButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 30)
|
| + pullsDown:YES]);
|
| +
|
| + normal_.reset([base::mac::ObjCCastStrict<NSImage>(
|
| + [NSImage imageNamed:NSImageNameStatusAvailable]) retain]);
|
| + pressed_.reset([base::mac::ObjCCastStrict<NSImage>(
|
| + [NSImage imageNamed:NSImageNameStatusUnavailable]) retain]);
|
| + hovered_.reset([base::mac::ObjCCastStrict<NSImage>(
|
| + [NSImage imageNamed:NSImageNameStatusPartiallyAvailable]) retain]);
|
| + [[menu_button_ hoverImageMenuButtonCell] setDefaultImage:normal_];
|
| + [[menu_button_ hoverImageMenuButtonCell] setAlternateImage:pressed_];
|
| + [[menu_button_ hoverImageMenuButtonCell] setHoverImage:hovered_];
|
| +
|
| + CocoaTest::SetUp();
|
| + [[test_window() contentView] addSubview:menu_button_];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +TEST_VIEW(HoverImageMenuButtonTest, menu_button_);
|
| +
|
| +// Tests that the correct image is chosen, depending on the cell's state flags.
|
| +TEST_F(HoverImageMenuButtonTest, CheckImagesForState) {
|
| + EXPECT_FALSE([[menu_button_ cell] isHovered]);
|
| + EXPECT_FALSE([[menu_button_ cell] isHighlighted]);
|
| + EXPECT_NSEQ(normal_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| +
|
| + [[menu_button_ cell] setHovered:YES];
|
| + EXPECT_TRUE([[menu_button_ cell] isHovered]);
|
| + EXPECT_FALSE([[menu_button_ cell] isHighlighted]);
|
| + EXPECT_NSEQ(hovered_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| +
|
| + // Highlighted takes precendece over hover.
|
| + [[menu_button_ cell] setHighlighted:YES];
|
| + EXPECT_TRUE([[menu_button_ cell] isHovered]);
|
| + EXPECT_TRUE([[menu_button_ cell] isHighlighted]);
|
| + EXPECT_NSEQ(pressed_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| +
|
| + [[menu_button_ cell] setHovered:NO];
|
| + EXPECT_FALSE([[menu_button_ cell] isHovered]);
|
| + EXPECT_TRUE([[menu_button_ cell] isHighlighted]);
|
| + EXPECT_NSEQ(pressed_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| +
|
| + [[menu_button_ cell] setHighlighted:NO];
|
| + EXPECT_FALSE([[menu_button_ cell] isHovered]);
|
| + EXPECT_FALSE([[menu_button_ cell] isHighlighted]);
|
| + EXPECT_NSEQ(normal_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| +}
|
| +
|
| +// Tests that calling the various setXImage functions calls setNeedsDisplay.
|
| +TEST_F(HoverImageMenuButtonTest, NewImageCausesDisplay) {
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Uses setDefaultImage rather than setImage to ensure the image goes into the
|
| + // NSPopUpButtonCell's menuItem. It is then accessible using [NSCell image].
|
| + EXPECT_NSEQ(normal_, [[menu_button_ cell] image]);
|
| + [[menu_button_ cell] setDefaultImage:pressed_];
|
| + EXPECT_NSEQ(pressed_, [[menu_button_ cell] image]);
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Highlighting the cell requires a redisplay.
|
| + [[menu_button_ cell] setHighlighted:YES];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // setAlternateImage comes from NSButtonCell. Ensure the added setHover*
|
| + // behaviour matches.
|
| + [[menu_button_ cell] setAlternateImage:normal_];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Setting the same image should not cause a redisplay.
|
| + [[menu_button_ cell] setAlternateImage:normal_];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Unhighlighting requires a redisplay.
|
| + [[menu_button_ cell] setHighlighted:NO];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Changing hover state requires a redisplay.
|
| + [[menu_button_ cell] setHovered:YES];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // setHoverImage comes directly from storage in HoverImageMenuButtonCell.
|
| + [[menu_button_ cell] setHoverImage:normal_];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Setting the same image should not cause a redisplay.
|
| + [[menu_button_ cell] setHoverImage:normal_];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Unhover requires a redisplay.
|
| + [[menu_button_ cell] setHovered:NO];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + // Changing the image while not hovered should not require a redisplay.
|
| + [[menu_button_ cell] setHoverImage:pressed_];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +}
|
| +
|
| +// Test that the mouse enter and exit is properly handled, to set hover state.
|
| +TEST_F(HoverImageMenuButtonTest, SimulateMouseEnterExit) {
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| + EXPECT_NSEQ(normal_, [[menu_button_ cell] imageToDraw]);
|
| +
|
| + [menu_button_ mouseEntered:nil];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + EXPECT_NSEQ(hovered_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +
|
| + [menu_button_ mouseExited:nil];
|
| + EXPECT_TRUE([menu_button_ needsDisplay]);
|
| + EXPECT_NSEQ(normal_, [[menu_button_ cell] imageToDraw]);
|
| + [menu_button_ display];
|
| + EXPECT_FALSE([menu_button_ needsDisplay]);
|
| +}
|
| +
|
| +} // namespace ui
|
|
|