Home | History | Annotate | Download | only in find_bar
      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 #include "base/string_util.h"
      6 #include "base/sys_string_conversions.h"
      7 #include "chrome/browser/ui/browser_window.h"
      8 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
      9 #import "chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.h"
     10 #import "chrome/browser/ui/cocoa/find_bar/find_bar_text_field.h"
     11 #import "chrome/browser/ui/cocoa/find_pasteboard.h"
     12 #include "chrome/browser/ui/find_bar/find_notification_details.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 #include "testing/platform_test.h"
     15 
     16 // Expose private variables to make testing easier.
     17 @interface FindBarCocoaController(Testing)
     18 - (NSView*)findBarView;
     19 - (NSString*)findText;
     20 - (FindBarTextField*)findTextField;
     21 @end
     22 
     23 @implementation FindBarCocoaController(Testing)
     24 - (NSView*)findBarView {
     25   return findBarView_;
     26 }
     27 
     28 - (NSString*)findText {
     29   return [findText_ stringValue];
     30 }
     31 
     32 - (FindBarTextField*)findTextField {
     33   return findText_;
     34 }
     35 
     36 - (NSButton*)nextButton {
     37   return nextButton_;
     38 }
     39 
     40 - (NSButton*)previousButton {
     41   return previousButton_;
     42 }
     43 @end
     44 
     45 namespace {
     46 
     47 class FindBarCocoaControllerTest : public CocoaTest {
     48  public:
     49   virtual void SetUp() {
     50     CocoaTest::SetUp();
     51     controller_.reset([[FindBarCocoaController alloc] init]);
     52     [[test_window() contentView] addSubview:[controller_ view]];
     53   }
     54 
     55   virtual void TearDown() {
     56     CocoaTest::TearDown();
     57     [controller_ stopAnimation];
     58   }
     59 
     60  protected:
     61   scoped_nsobject<FindBarCocoaController> controller_;
     62 };
     63 
     64 TEST_VIEW(FindBarCocoaControllerTest, [controller_ view])
     65 
     66 TEST_F(FindBarCocoaControllerTest, ImagesLoadedProperly) {
     67   EXPECT_TRUE([[[controller_ nextButton] image] isValid]);
     68   EXPECT_TRUE([[[controller_ previousButton] image] isValid]);
     69 }
     70 
     71 TEST_F(FindBarCocoaControllerTest, ShowAndHide) {
     72   NSView* findBarView = [controller_ findBarView];
     73 
     74   ASSERT_GT([findBarView frame].origin.y, 0);
     75   ASSERT_FALSE([controller_ isFindBarVisible]);
     76 
     77   [controller_ showFindBar:NO];
     78   EXPECT_EQ([findBarView frame].origin.y, 0);
     79   EXPECT_TRUE([controller_ isFindBarVisible]);
     80 
     81   [controller_ hideFindBar:NO];
     82   EXPECT_GT([findBarView frame].origin.y, 0);
     83   EXPECT_FALSE([controller_ isFindBarVisible]);
     84 }
     85 
     86 TEST_F(FindBarCocoaControllerTest, SetFindText) {
     87   NSTextField* findTextField = [controller_ findTextField];
     88 
     89   // Start by making the find bar visible.
     90   [controller_ showFindBar:NO];
     91   EXPECT_TRUE([controller_ isFindBarVisible]);
     92 
     93   // Set the find text.
     94   NSString* const kFindText = @"Google";
     95   [controller_ setFindText:kFindText];
     96   EXPECT_EQ(
     97       NSOrderedSame,
     98       [[findTextField stringValue] compare:kFindText]);
     99 
    100   // Call clearResults, which doesn't actually clear the find text but
    101   // simply sets it back to what it was before.  This is silly, but
    102   // matches the behavior on other platforms.  |details| isn't used by
    103   // our implementation of clearResults, so it's ok to pass in an
    104   // empty |details|.
    105   FindNotificationDetails details;
    106   [controller_ clearResults:details];
    107   EXPECT_EQ(
    108       NSOrderedSame,
    109       [[findTextField stringValue] compare:kFindText]);
    110 }
    111 
    112 TEST_F(FindBarCocoaControllerTest, ResultLabelUpdatesCorrectly) {
    113   // TODO(rohitrao): Test this.  It may involve creating some dummy
    114   // FindNotificationDetails objects.
    115 }
    116 
    117 TEST_F(FindBarCocoaControllerTest, FindTextIsGlobal) {
    118   scoped_nsobject<FindBarCocoaController> otherController(
    119       [[FindBarCocoaController alloc] init]);
    120   [[test_window() contentView] addSubview:[otherController view]];
    121 
    122   // Setting the text in one controller should update the other controller's
    123   // text as well.
    124   NSString* const kFindText = @"Respect to the man in the ice cream van";
    125   [controller_ setFindText:kFindText];
    126   EXPECT_EQ(
    127       NSOrderedSame,
    128       [[controller_ findText] compare:kFindText]);
    129   EXPECT_EQ(
    130       NSOrderedSame,
    131       [[otherController.get() findText] compare:kFindText]);
    132 }
    133 
    134 TEST_F(FindBarCocoaControllerTest, SettingFindTextUpdatesFindPboard) {
    135   NSString* const kFindText =
    136       @"It's not a bird, it's not a plane, it must be Dave who's on the train";
    137   [controller_ setFindText:kFindText];
    138   EXPECT_EQ(
    139       NSOrderedSame,
    140       [[[FindPasteboard sharedInstance] findText] compare:kFindText]);
    141 }
    142 
    143 }  // namespace
    144