Chromium Code Reviews| 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..37ecde06353e6690d634f664dd8d53b187cdc5a8 |
| --- /dev/null |
| +++ b/ui/base/cocoa/controls/hover_image_menu_button_unittest.mm |
| @@ -0,0 +1,145 @@ |
| +// 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 "grit/ui_resources.h" |
| +#import "testing/gtest_mac.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| +#import "ui/base/test/ui_cocoa_test_helper.h" |
| + |
| +namespace ui { |
| + |
| +namespace { |
| + |
| +const int kIdrNormal = IDR_CHECKBOX; |
| +const int kIdrPressed = IDR_CHECKBOX_PRESSED; |
| +const int kIdrHovered = IDR_CHECKBOX_HOVER; |
| + |
| +// 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() { |
| + Init(); |
|
sail
2013/05/31 19:07:03
don't need this (base class does it already)
tapted
2013/06/03 12:49:18
Done.
|
| + } |
| + |
| + NSImage* ResetImage(int resource_id, scoped_nsobject<NSImage>* storage) { |
| + storage->reset([ResourceBundle::GetSharedInstance(). |
| + GetNativeImageNamed(resource_id).AsNSImage() retain]); |
| + return storage->get(); |
| + } |
| + |
| + void SetImages() { |
| + [[menu_button_ cell] setImage:ResetImage(kIdrNormal, &normal_)]; |
|
sail
2013/05/31 19:07:03
How about using system provided images instead of
tapted
2013/06/03 12:49:18
Done.
|
| + [[menu_button_ cell] setAlternateImage:ResetImage(kIdrPressed, &pressed_)]; |
| + [[menu_button_ cell] setHoverImage:ResetImage(kIdrHovered, &hovered_)]; |
|
sail
2013/05/31 19:07:03
use hoverImageMenuButtonCell instead of cell ?
tapted
2013/06/03 12:49:18
Done.
|
| + } |
| + |
| + virtual void SetUp() OVERRIDE { |
| + menu_button_.reset( |
| + [[HoverImageMenuButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 30) |
| + pullsDown:YES]); |
| + CocoaTest::SetUp(); |
| + [[test_window() contentView] addSubview:menu_button_]; |
| + } |
| + |
| + protected: |
| + scoped_nsobject<HoverImageMenuButton> menu_button_; |
| + scoped_nsobject<NSImage> normal_; |
|
sail
2013/05/31 19:07:03
how about setting these in the constructor, then y
tapted
2013/06/03 12:49:18
Done.
|
| + scoped_nsobject<NSImage> pressed_; |
| + scoped_nsobject<NSImage> hovered_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(HoverImageMenuButtonTest); |
| +}; |
| + |
| +} // namespace |
| + |
| +TEST_VIEW(HoverImageMenuButtonTest, menu_button_); |
| + |
| +// Tests that the correct image is chosen, depending on the cell's state flags. |
| +TEST_F(HoverImageMenuButtonTest, CheckImagesForState) { |
| + SetImages(); |
| + EXPECT_NSNE(normal_, pressed_); |
|
sail
2013/05/31 19:07:03
I don't this is necessary.
tapted
2013/06/03 12:49:18
Done.
|
| + EXPECT_NSNE(pressed_, hovered_); |
| + EXPECT_NSNE(hovered_, normal_); |
| + |
| + 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]); |
| + |
| + // Note that regular setImage is overridden to ensure the image goes into the |
| + // NSPopUpButtonCell's menuItem. |
| + [[menu_button_ cell] setImage:ResetImage(kIdrNormal, &normal_)]; |
| + EXPECT_TRUE([menu_button_ needsDisplay]); |
| + [menu_button_ display]; |
| + EXPECT_FALSE([menu_button_ needsDisplay]); |
| + |
| + // setAlternateImage comes from NSButtonCell. |
| + [[menu_button_ cell] setAlternateImage:ResetImage(kIdrPressed, &pressed_)]; |
| + EXPECT_TRUE([menu_button_ needsDisplay]); |
| + [menu_button_ display]; |
| + EXPECT_FALSE([menu_button_ needsDisplay]); |
| + |
| + // setHoverImage comes directly from storage in HoverImageMenuButtonCell. |
| + [[menu_button_ cell] setHoverImage:ResetImage(kIdrHovered, &hovered_)]; |
| + EXPECT_TRUE([menu_button_ needsDisplay]); |
| + [menu_button_ display]; |
| + EXPECT_FALSE([menu_button_ needsDisplay]); |
| +} |
| + |
| +// Test that the mouse enter and exit is properly handled, to set hover state. |
| +TEST_F(HoverImageMenuButtonTest, SimulateMouseEnterExit) { |
| + SetImages(); |
| + EXPECT_NSNE(normal_, hovered_); |
| + [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 |