OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 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/scoped_nsobject.h" | |
8 #import "chrome/browser/ui/cocoa/find_bar_text_field_cell.h" | |
9 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 #include "testing/platform_test.h" | |
12 | |
13 @interface FindBarTextFieldCell (ExposedForTesting) | |
14 - (NSAttributedString*)resultsString; | |
15 @end | |
16 | |
17 @implementation FindBarTextFieldCell (ExposedForTesting) | |
18 - (NSAttributedString*)resultsString { | |
19 return resultsString_.get(); | |
20 } | |
21 @end | |
22 | |
23 namespace { | |
24 | |
25 // Width of the field so that we don't have to ask |field_| for it all | |
26 // the time. | |
27 const CGFloat kWidth(300.0); | |
28 | |
29 // A narrow width for tests which test things that don't fit. | |
30 const CGFloat kNarrowWidth(5.0); | |
31 | |
32 class FindBarTextFieldCellTest : public CocoaTest { | |
33 public: | |
34 FindBarTextFieldCellTest() { | |
35 // Make sure this is wide enough to play games with the cell | |
36 // decorations. | |
37 const NSRect frame = NSMakeRect(0, 0, kWidth, 30); | |
38 | |
39 scoped_nsobject<FindBarTextFieldCell> cell( | |
40 [[FindBarTextFieldCell alloc] initTextCell:@"Testing"]); | |
41 cell_ = cell; | |
42 [cell_ setEditable:YES]; | |
43 [cell_ setBordered:YES]; | |
44 | |
45 scoped_nsobject<NSTextField> view( | |
46 [[NSTextField alloc] initWithFrame:frame]); | |
47 view_ = view; | |
48 [view_ setCell:cell_]; | |
49 | |
50 [[test_window() contentView] addSubview:view_]; | |
51 } | |
52 | |
53 NSTextField* view_; | |
54 FindBarTextFieldCell* cell_; | |
55 }; | |
56 | |
57 // Basic view tests (AddRemove, Display). | |
58 TEST_VIEW(FindBarTextFieldCellTest, view_); | |
59 | |
60 // Test drawing, mostly to ensure nothing leaks or crashes. | |
61 TEST_F(FindBarTextFieldCellTest, FocusedDisplay) { | |
62 [view_ display]; | |
63 | |
64 // Test focused drawing. | |
65 [test_window() makePretendKeyWindowAndSetFirstResponder:view_]; | |
66 [view_ display]; | |
67 [test_window() clearPretendKeyWindowAndFirstResponder]; | |
68 | |
69 // Test display of various cell configurations. | |
70 [cell_ setActiveMatch:4 of:30]; | |
71 [view_ display]; | |
72 | |
73 [cell_ setActiveMatch:0 of:0]; | |
74 [view_ display]; | |
75 | |
76 [cell_ clearResults]; | |
77 [view_ display]; | |
78 } | |
79 | |
80 // Verify that setting and clearing the find results changes the results string | |
81 // appropriately. | |
82 TEST_F(FindBarTextFieldCellTest, SetAndClearFindResults) { | |
83 [cell_ setActiveMatch:10 of:30]; | |
84 scoped_nsobject<NSAttributedString> tenString([[cell_ resultsString] copy]); | |
85 EXPECT_GT([tenString length], 0U); | |
86 | |
87 [cell_ setActiveMatch:0 of:0]; | |
88 scoped_nsobject<NSAttributedString> zeroString([[cell_ resultsString] copy]); | |
89 EXPECT_GT([zeroString length], 0U); | |
90 EXPECT_FALSE([tenString isEqualToAttributedString:zeroString]); | |
91 | |
92 [cell_ clearResults]; | |
93 EXPECT_EQ(0U, [[cell_ resultsString] length]); | |
94 } | |
95 | |
96 TEST_F(FindBarTextFieldCellTest, TextFrame) { | |
97 const NSRect bounds = [view_ bounds]; | |
98 NSRect textFrame = [cell_ textFrameForFrame:bounds]; | |
99 NSRect cursorFrame = [cell_ textCursorFrameForFrame:bounds]; | |
100 | |
101 // At default settings, everything goes to the text area. | |
102 EXPECT_FALSE(NSIsEmptyRect(textFrame)); | |
103 EXPECT_TRUE(NSContainsRect(bounds, textFrame)); | |
104 EXPECT_EQ(NSMinX(bounds), NSMinX(textFrame)); | |
105 EXPECT_EQ(NSMaxX(bounds), NSMaxX(textFrame)); | |
106 EXPECT_TRUE(NSEqualRects(cursorFrame, textFrame)); | |
107 | |
108 // Setting an active match leaves text frame to left. | |
109 [cell_ setActiveMatch:4 of:5]; | |
110 textFrame = [cell_ textFrameForFrame:bounds]; | |
111 cursorFrame = [cell_ textCursorFrameForFrame:bounds]; | |
112 EXPECT_FALSE(NSIsEmptyRect(textFrame)); | |
113 EXPECT_TRUE(NSContainsRect(bounds, textFrame)); | |
114 EXPECT_LT(NSMaxX(textFrame), NSMaxX(bounds)); | |
115 EXPECT_TRUE(NSEqualRects(cursorFrame, textFrame)); | |
116 | |
117 } | |
118 | |
119 // The editor frame should be slightly inset from the text frame. | |
120 TEST_F(FindBarTextFieldCellTest, DrawingRectForBounds) { | |
121 const NSRect bounds = [view_ bounds]; | |
122 NSRect textFrame = [cell_ textFrameForFrame:bounds]; | |
123 NSRect drawingRect = [cell_ drawingRectForBounds:bounds]; | |
124 | |
125 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); | |
126 EXPECT_TRUE(NSContainsRect(textFrame, NSInsetRect(drawingRect, 1, 1))); | |
127 | |
128 [cell_ setActiveMatch:4 of:5]; | |
129 textFrame = [cell_ textFrameForFrame:bounds]; | |
130 drawingRect = [cell_ drawingRectForBounds:bounds]; | |
131 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); | |
132 EXPECT_TRUE(NSContainsRect(textFrame, NSInsetRect(drawingRect, 1, 1))); | |
133 } | |
134 | |
135 } // namespace | |
OLD | NEW |