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