Home | History | Annotate | Download | only in cocoa
      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