1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #import <Cocoa/Cocoa.h> 6 7 #include "base/memory/scoped_nsobject.h" 8 #include "base/memory/scoped_ptr.h" 9 #import "chrome/browser/ui/cocoa/command_observer_bridge.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/platform_test.h" 12 13 // Implements the callback interface. Records the last command id and 14 // enabled state it has received so it can be queried by the tests to see 15 // if we got a notification or not. 16 @interface CommandTestObserver : NSObject<CommandObserverProtocol> { 17 @private 18 int lastCommand_; // id of last received state change 19 bool lastState_; // state of last received state change 20 } 21 - (int)lastCommand; 22 - (bool)lastState; 23 @end 24 25 @implementation CommandTestObserver 26 - (void)enabledStateChangedForCommand:(NSInteger)command enabled:(BOOL)enabled { 27 lastCommand_ = command; 28 lastState_ = enabled; 29 } 30 - (int)lastCommand { 31 return lastCommand_; 32 } 33 - (bool)lastState { 34 return lastState_; 35 } 36 @end 37 38 namespace { 39 40 class CommandObserverBridgeTest : public PlatformTest { 41 public: 42 CommandObserverBridgeTest() 43 : updater_(new CommandUpdater(NULL)), 44 observer_([[CommandTestObserver alloc] init]) { 45 } 46 scoped_ptr<CommandUpdater> updater_; 47 scoped_nsobject<CommandTestObserver> observer_; 48 }; 49 50 // Tests creation and deletion. NULL arguments aren't allowed. 51 TEST_F(CommandObserverBridgeTest, Create) { 52 CommandObserverBridge bridge(observer_.get(), updater_.get()); 53 } 54 55 // Observes state changes on command ids 1 and 2. Ensure we don't get 56 // a notification of a state change on a command we're not observing (3). 57 // Commands start off enabled in CommandUpdater. 58 TEST_F(CommandObserverBridgeTest, Observe) { 59 CommandObserverBridge bridge(observer_.get(), updater_.get()); 60 bridge.ObserveCommand(1); 61 bridge.ObserveCommand(2); 62 63 // Validate initial state assumptions. 64 EXPECT_EQ([observer_ lastCommand], 0); 65 EXPECT_EQ([observer_ lastState], false); 66 EXPECT_EQ(updater_->IsCommandEnabled(1), true); 67 EXPECT_EQ(updater_->IsCommandEnabled(2), true); 68 69 updater_->UpdateCommandEnabled(1, false); 70 EXPECT_EQ([observer_ lastCommand], 1); 71 EXPECT_EQ([observer_ lastState], false); 72 73 updater_->UpdateCommandEnabled(2, false); 74 EXPECT_EQ([observer_ lastCommand], 2); 75 EXPECT_EQ([observer_ lastState], false); 76 77 updater_->UpdateCommandEnabled(1, true); 78 EXPECT_EQ([observer_ lastCommand], 1); 79 EXPECT_EQ([observer_ lastState], true); 80 81 // Change something we're not watching and make sure the last state hasn't 82 // changed. 83 updater_->UpdateCommandEnabled(3, false); 84 EXPECT_EQ([observer_ lastCommand], 1); 85 EXPECT_NE([observer_ lastCommand], 3); 86 EXPECT_EQ([observer_ lastState], true); 87 } 88 89 } // namespace 90