| // Copyright (c) 2011 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/scoped_nsobject.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "chrome/browser/command_updater.h" |
| #import "chrome/browser/ui/cocoa/command_observer_bridge.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "testing/platform_test.h" |
| |
| // Implements the callback interface. Records the last command id and |
| // enabled state it has received so it can be queried by the tests to see |
| // if we got a notification or not. |
| @interface CommandTestObserver : NSObject<CommandObserverProtocol> { |
| @private |
| int lastCommand_; // id of last received state change |
| bool lastState_; // state of last received state change |
| } |
| - (int)lastCommand; |
| - (bool)lastState; |
| @end |
| |
| @implementation CommandTestObserver |
| - (void)enabledStateChangedForCommand:(NSInteger)command enabled:(BOOL)enabled { |
| lastCommand_ = command; |
| lastState_ = enabled; |
| } |
| - (int)lastCommand { |
| return lastCommand_; |
| } |
| - (bool)lastState { |
| return lastState_; |
| } |
| @end |
| |
| namespace { |
| |
| class CommandObserverBridgeTest : public PlatformTest { |
| public: |
| CommandObserverBridgeTest() |
| : updater_(new CommandUpdater(NULL)), |
| observer_([[CommandTestObserver alloc] init]) { |
| } |
| scoped_ptr<CommandUpdater> updater_; |
| base::scoped_nsobject<CommandTestObserver> observer_; |
| }; |
| |
| // Tests creation and deletion. NULL arguments aren't allowed. |
| TEST_F(CommandObserverBridgeTest, Create) { |
| CommandObserverBridge bridge(observer_.get(), updater_.get()); |
| } |
| |
| // Observes state changes on command ids 1 and 2. Ensure we don't get |
| // a notification of a state change on a command we're not observing (3). |
| // Commands start off enabled in CommandUpdater. |
| TEST_F(CommandObserverBridgeTest, Observe) { |
| CommandObserverBridge bridge(observer_.get(), updater_.get()); |
| bridge.ObserveCommand(1); |
| bridge.ObserveCommand(2); |
| |
| // Validate initial state assumptions. |
| EXPECT_EQ([observer_ lastCommand], 0); |
| EXPECT_EQ([observer_ lastState], false); |
| EXPECT_EQ(updater_->IsCommandEnabled(1), true); |
| EXPECT_EQ(updater_->IsCommandEnabled(2), true); |
| |
| updater_->UpdateCommandEnabled(1, false); |
| EXPECT_EQ([observer_ lastCommand], 1); |
| EXPECT_EQ([observer_ lastState], false); |
| |
| updater_->UpdateCommandEnabled(2, false); |
| EXPECT_EQ([observer_ lastCommand], 2); |
| EXPECT_EQ([observer_ lastState], false); |
| |
| updater_->UpdateCommandEnabled(1, true); |
| EXPECT_EQ([observer_ lastCommand], 1); |
| EXPECT_EQ([observer_ lastState], true); |
| |
| // Change something we're not watching and make sure the last state hasn't |
| // changed. |
| updater_->UpdateCommandEnabled(3, false); |
| EXPECT_EQ([observer_ lastCommand], 1); |
| EXPECT_NE([observer_ lastCommand], 3); |
| EXPECT_EQ([observer_ lastState], true); |
| } |
| |
| } // namespace |