Index: chrome/browser/ui/cocoa/tabs/media_indicator_button_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/media_indicator_view_unittest.mm b/chrome/browser/ui/cocoa/tabs/media_indicator_button_unittest.mm |
similarity index 15% |
rename from chrome/browser/ui/cocoa/tabs/media_indicator_view_unittest.mm |
rename to chrome/browser/ui/cocoa/tabs/media_indicator_button_unittest.mm |
index bef0bc4b956a1d4d5bf048c41cf90ab2a49b040f..76ce8093afa9706d4eb16c72b176dbbe40791265 100644 |
--- a/chrome/browser/ui/cocoa/tabs/media_indicator_view_unittest.mm |
+++ b/chrome/browser/ui/cocoa/tabs/media_indicator_button_unittest.mm |
@@ -2,33 +2,89 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#import "chrome/browser/ui/cocoa/tabs/media_indicator_view.h" |
+#import "chrome/browser/ui/cocoa/tabs/media_indicator_button.h" |
+#include <string> |
+ |
+#include "base/command_line.h" |
#include "base/mac/scoped_nsobject.h" |
#include "base/message_loop/message_loop.h" |
#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
+#include "chrome/common/chrome_switches.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/platform_test.h" |
+// A simple target to confirm an action was invoked. |
+@interface MediaIndicatorButtonTestTarget : NSObject { |
+ @private |
+ int count_; |
+} |
+@property(readonly, nonatomic) int count; |
+- (void)incrementCount:(id)sender; |
+@end |
+ |
+@implementation MediaIndicatorButtonTestTarget |
+@synthesize count = count_; |
+- (void)incrementCount:(id)sender { |
+ ++count_; |
+} |
+@end |
+ |
namespace { |
-class MediaIndicatorViewTest : public CocoaTest { |
+class MediaIndicatorButtonTest : public CocoaTest { |
public: |
- MediaIndicatorViewTest() { |
- view_.reset([[MediaIndicatorView alloc] init]); |
- EXPECT_TRUE(view_ != nil); |
- EXPECT_EQ(TAB_MEDIA_STATE_NONE, [view_ animatingMediaState]); |
+ MediaIndicatorButtonTest() { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ std::string("--") + switches::kEnableTabAudioMuting); |
+ |
+ // Create the MediaIndicatorButton and add it to a view. |
+ button_.reset([[MediaIndicatorButton alloc] init]); |
+ EXPECT_TRUE(button_ != nil); |
+ [[test_window() contentView] addSubview:button_.get()]; |
+ |
+ // Initially the button is disabled and showing no indicator. |
+ EXPECT_EQ(TAB_MEDIA_STATE_NONE, [button_ showingMediaState]); |
+ EXPECT_FALSE([button_ isEnabled]); |
+ |
+ // Register target to be notified of clicks. |
+ base::scoped_nsobject<MediaIndicatorButtonTestTarget> clickTarget( |
+ [[MediaIndicatorButtonTestTarget alloc] init]); |
+ EXPECT_EQ(0, [clickTarget count]); |
+ [button_ setClickTarget:clickTarget withAction:@selector(incrementCount:)]; |
+ |
+ // Transition to audio indicator mode, and expect button is enabled. |
+ [button_ transitionToMediaState:TAB_MEDIA_STATE_AUDIO_PLAYING]; |
+ EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, [button_ showingMediaState]); |
+ EXPECT_TRUE([button_ isEnabled]); |
+ |
+ // Click, and expect one click notification. |
+ EXPECT_EQ(0, [clickTarget count]); |
+ [button_ performClick:button_]; |
+ EXPECT_EQ(1, [clickTarget count]); |
- [[test_window() contentView] addSubview:view_.get()]; |
+ // Transition to audio muting mode, and expect button is still enabled. A |
+ // click should result in another click notification. |
+ [button_ transitionToMediaState:TAB_MEDIA_STATE_AUDIO_MUTING]; |
+ EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_MUTING, [button_ showingMediaState]); |
+ EXPECT_TRUE([button_ isEnabled]); |
+ [button_ performClick:button_]; |
+ EXPECT_EQ(2, [clickTarget count]); |
- [view_ updateIndicator:TAB_MEDIA_STATE_AUDIO_PLAYING]; |
- EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, [view_ animatingMediaState]); |
+ // Transition to capturing mode. Now, the button is disabled since it |
+ // should only be drawing the indicator icon (i.e., there is nothing to |
+ // mute). A click should NOT result in another click notification. |
+ [button_ transitionToMediaState:TAB_MEDIA_STATE_CAPTURING]; |
+ EXPECT_EQ(TAB_MEDIA_STATE_CAPTURING, [button_ showingMediaState]); |
+ EXPECT_FALSE([button_ isEnabled]); |
+ [button_ performClick:button_]; |
+ EXPECT_EQ(2, [clickTarget count]); |
} |
- base::scoped_nsobject<MediaIndicatorView> view_; |
+ base::scoped_nsobject<MediaIndicatorButton> button_; |
base::MessageLoopForUI message_loop_; // Needed for gfx::Animation. |
}; |
-TEST_VIEW(MediaIndicatorViewTest, view_) |
+TEST_VIEW(MediaIndicatorButtonTest, button_) |
} // namespace |