// Copyright (c) 2009 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 #import "base/cocoa_protocols_mac.h" #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/find_bar_text_field.h" #import "chrome/browser/cocoa/find_bar_text_field_cell.h" #import "chrome/browser/cocoa/cocoa_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" #import "third_party/ocmock/OCMock/OCMock.h" // OCMock wants to mock a concrete class or protocol. This should // provide a correct protocol for newer versions of the SDK, while // providing something mockable for older versions. @protocol MockTextEditingDelegate - (void)controlTextDidBeginEditing:(NSNotification*)aNotification; - (BOOL)control:(NSControl*)control textShouldEndEditing:(NSText*)fieldEditor; @end namespace { // Width of the field so that we don't have to ask |field_| for it all // the time. static const CGFloat kWidth(300.0); class FindBarTextFieldTest : public CocoaTest { public: FindBarTextFieldTest() { // Make sure this is wide enough to play games with the cell // decorations. NSRect frame = NSMakeRect(0, 0, kWidth, 30); scoped_nsobject field( [[FindBarTextField alloc] initWithFrame:frame]); field_ = field.get(); [field_ setStringValue:@"Test test"]; [[test_window() contentView] addSubview:field_]; } FindBarTextField* field_; }; // Basic view tests (AddRemove, Display). TEST_VIEW(FindBarTextFieldTest, field_); // Test that we have the right cell class. TEST_F(FindBarTextFieldTest, CellClass) { EXPECT_TRUE([[field_ cell] isKindOfClass:[FindBarTextFieldCell class]]); } // Test that we get the same cell from -cell and // -findBarTextFieldCell. TEST_F(FindBarTextFieldTest, Cell) { FindBarTextFieldCell* cell = [field_ findBarTextFieldCell]; EXPECT_EQ(cell, [field_ cell]); EXPECT_TRUE(cell != nil); } // Test that becoming first responder sets things up correctly. TEST_F(FindBarTextFieldTest, FirstResponder) { EXPECT_EQ(nil, [field_ currentEditor]); EXPECT_EQ([[field_ subviews] count], 0U); [test_window() makePretendKeyWindowAndSetFirstResponder:field_]; EXPECT_FALSE(nil == [field_ currentEditor]); EXPECT_EQ([[field_ subviews] count], 1U); EXPECT_TRUE([[field_ currentEditor] isDescendantOf:field_]); } // Test drawing, mostly to ensure nothing leaks or crashes. TEST_F(FindBarTextFieldTest, Display) { [field_ display]; // Test focussed drawing. [test_window() makePretendKeyWindowAndSetFirstResponder:field_]; [field_ display]; [test_window() clearPretendKeyWindowAndFirstResponder]; // Test display of various cell configurations. FindBarTextFieldCell* cell = [field_ findBarTextFieldCell]; [cell setActiveMatch:4 of:5]; [field_ display]; [cell clearResults]; [field_ display]; } } // namespace