OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 | 6 |
7 #import "chrome/browser/cocoa/reload_button.h" | 7 #import "chrome/browser/cocoa/reload_button.h" |
8 | 8 |
9 #include "base/scoped_nsobject.h" | 9 #include "base/scoped_nsobject.h" |
10 #include "chrome/app/chrome_dll_resource.h" | 10 #include "chrome/app/chrome_dll_resource.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 | 22 |
23 class ReloadButtonTest : public CocoaTest { | 23 class ReloadButtonTest : public CocoaTest { |
24 public: | 24 public: |
25 ReloadButtonTest() { | 25 ReloadButtonTest() { |
26 NSRect frame = NSMakeRect(0, 0, 20, 20); | 26 NSRect frame = NSMakeRect(0, 0, 20, 20); |
27 scoped_nsobject<ReloadButton> button( | 27 scoped_nsobject<ReloadButton> button( |
28 [[ReloadButton alloc] initWithFrame:frame]); | 28 [[ReloadButton alloc] initWithFrame:frame]); |
29 button_ = button.get(); | 29 button_ = button.get(); |
30 | 30 |
31 // Set things up so unit tests have a reliable baseline. | 31 // Set things up so unit tests have a reliable baseline. |
32 [button_ setTag:IDC_RELOAD]; | 32 [button_ setCommand:IDC_RELOAD]; |
33 [button_ awakeFromNib]; | 33 [button_ awakeFromNib]; |
34 | 34 |
35 [[test_window() contentView] addSubview:button_]; | 35 [[test_window() contentView] addSubview:button_]; |
36 } | 36 } |
37 | 37 |
38 ReloadButton* button_; | 38 ReloadButton* button_; |
39 }; | 39 }; |
40 | 40 |
41 TEST_VIEW(ReloadButtonTest, button_) | 41 TEST_VIEW(ReloadButtonTest, button_) |
42 | 42 |
(...skipping 26 matching lines...) Expand all Loading... |
69 [NSApp postEvent:click_two.second atStart:YES]; | 69 [NSApp postEvent:click_two.second atStart:YES]; |
70 [button_ mouseDown:click_two.first]; | 70 [button_ mouseDown:click_two.first]; |
71 | 71 |
72 [button_ setTarget:nil]; | 72 [button_ setTarget:nil]; |
73 } | 73 } |
74 | 74 |
75 // Test that when forcing the mode, it takes effect immediately, | 75 // Test that when forcing the mode, it takes effect immediately, |
76 // regardless of whether the mouse is hovering. | 76 // regardless of whether the mouse is hovering. |
77 TEST_F(ReloadButtonTest, SetIsLoadingForce) { | 77 TEST_F(ReloadButtonTest, SetIsLoadingForce) { |
78 EXPECT_FALSE([button_ isMouseInside]); | 78 EXPECT_FALSE([button_ isMouseInside]); |
79 EXPECT_EQ([button_ tag], IDC_RELOAD); | 79 EXPECT_EQ([button_ command], IDC_RELOAD); |
80 | 80 |
81 // Changes to stop immediately. | 81 // Changes to stop immediately. |
82 [button_ setIsLoading:YES force:YES]; | 82 [button_ setIsLoading:YES force:YES]; |
83 EXPECT_EQ([button_ tag], IDC_STOP); | 83 EXPECT_EQ([button_ command], IDC_STOP); |
84 | 84 |
85 // Changes to reload immediately. | 85 // Changes to reload immediately. |
86 [button_ setIsLoading:NO force:YES]; | 86 [button_ setIsLoading:NO force:YES]; |
87 EXPECT_EQ([button_ tag], IDC_RELOAD); | 87 EXPECT_EQ([button_ command], IDC_RELOAD); |
88 | 88 |
89 // Changes to stop immediately when the mouse is hovered, and | 89 // Changes to stop immediately when the mouse is hovered, and |
90 // doesn't change when the mouse exits. | 90 // doesn't change when the mouse exits. |
91 [button_ mouseEntered:nil]; | 91 [button_ mouseEntered:nil]; |
92 EXPECT_TRUE([button_ isMouseInside]); | 92 EXPECT_TRUE([button_ isMouseInside]); |
93 [button_ setIsLoading:YES force:YES]; | 93 [button_ setIsLoading:YES force:YES]; |
94 EXPECT_EQ([button_ tag], IDC_STOP); | 94 EXPECT_EQ([button_ command], IDC_STOP); |
95 [button_ mouseExited:nil]; | 95 [button_ mouseExited:nil]; |
96 EXPECT_FALSE([button_ isMouseInside]); | 96 EXPECT_FALSE([button_ isMouseInside]); |
97 EXPECT_EQ([button_ tag], IDC_STOP); | 97 EXPECT_EQ([button_ command], IDC_STOP); |
98 | 98 |
99 // Changes to reload immediately when the mouse is hovered, and | 99 // Changes to reload immediately when the mouse is hovered, and |
100 // doesn't change when the mouse exits. | 100 // doesn't change when the mouse exits. |
101 [button_ mouseEntered:nil]; | 101 [button_ mouseEntered:nil]; |
102 EXPECT_TRUE([button_ isMouseInside]); | 102 EXPECT_TRUE([button_ isMouseInside]); |
103 [button_ setIsLoading:NO force:YES]; | 103 [button_ setIsLoading:NO force:YES]; |
104 EXPECT_EQ([button_ tag], IDC_RELOAD); | 104 EXPECT_EQ([button_ command], IDC_RELOAD); |
105 [button_ mouseExited:nil]; | 105 [button_ mouseExited:nil]; |
106 EXPECT_FALSE([button_ isMouseInside]); | 106 EXPECT_FALSE([button_ isMouseInside]); |
107 EXPECT_EQ([button_ tag], IDC_RELOAD); | 107 EXPECT_EQ([button_ command], IDC_RELOAD); |
108 } | 108 } |
109 | 109 |
110 // Test that without force, stop mode is set immediately, but reload | 110 // Test that without force, stop mode is set immediately, but reload |
111 // is affected by the hover status. | 111 // is affected by the hover status. |
112 TEST_F(ReloadButtonTest, SetIsLoadingNoForce) { | 112 TEST_F(ReloadButtonTest, SetIsLoadingNoForce) { |
113 EXPECT_FALSE([button_ isMouseInside]); | 113 EXPECT_FALSE([button_ isMouseInside]); |
114 EXPECT_EQ([button_ tag], IDC_RELOAD); | 114 EXPECT_EQ([button_ command], IDC_RELOAD); |
115 | 115 |
116 // Changes to stop immediately when the mouse is not hovering. | 116 // Changes to stop immediately when the mouse is not hovering. |
117 [button_ setIsLoading:YES force:NO]; | 117 [button_ setIsLoading:YES force:NO]; |
118 EXPECT_EQ([button_ tag], IDC_STOP); | 118 EXPECT_EQ([button_ command], IDC_STOP); |
119 | 119 |
120 // Changes to reload immediately when the mouse is not hovering. | 120 // Changes to reload immediately when the mouse is not hovering. |
121 [button_ setIsLoading:NO force:NO]; | 121 [button_ setIsLoading:NO force:NO]; |
122 EXPECT_EQ([button_ tag], IDC_RELOAD); | 122 EXPECT_EQ([button_ command], IDC_RELOAD); |
123 | 123 |
124 // Changes to stop immediately when the mouse is hovered, and | 124 // Changes to stop immediately when the mouse is hovered, and |
125 // doesn't change when the mouse exits. | 125 // doesn't change when the mouse exits. |
126 [button_ mouseEntered:nil]; | 126 [button_ mouseEntered:nil]; |
127 EXPECT_TRUE([button_ isMouseInside]); | 127 EXPECT_TRUE([button_ isMouseInside]); |
128 [button_ setIsLoading:YES force:NO]; | 128 [button_ setIsLoading:YES force:NO]; |
129 EXPECT_EQ([button_ tag], IDC_STOP); | 129 EXPECT_EQ([button_ command], IDC_STOP); |
130 [button_ mouseExited:nil]; | 130 [button_ mouseExited:nil]; |
131 EXPECT_FALSE([button_ isMouseInside]); | 131 EXPECT_FALSE([button_ isMouseInside]); |
132 EXPECT_EQ([button_ tag], IDC_STOP); | 132 EXPECT_EQ([button_ command], IDC_STOP); |
133 | 133 |
134 // Does not change to reload immediately when the mouse is hovered, | 134 // Does not change to reload immediately when the mouse is hovered, |
135 // changes when the mouse exits. | 135 // changes when the mouse exits. |
136 [button_ mouseEntered:nil]; | 136 [button_ mouseEntered:nil]; |
137 EXPECT_TRUE([button_ isMouseInside]); | 137 EXPECT_TRUE([button_ isMouseInside]); |
138 [button_ setIsLoading:NO force:NO]; | 138 [button_ setIsLoading:NO force:NO]; |
139 EXPECT_EQ([button_ tag], IDC_STOP); | 139 EXPECT_EQ([button_ command], IDC_STOP); |
140 [button_ mouseExited:nil]; | 140 [button_ mouseExited:nil]; |
141 EXPECT_FALSE([button_ isMouseInside]); | 141 EXPECT_FALSE([button_ isMouseInside]); |
142 EXPECT_EQ([button_ tag], IDC_RELOAD); | 142 EXPECT_EQ([button_ command], IDC_RELOAD); |
143 } | 143 } |
144 | 144 |
145 // Test that pressing stop after reload mode has been requested | 145 // Test that pressing stop after reload mode has been requested |
146 // doesn't forward the stop message. | 146 // doesn't forward the stop message. |
147 TEST_F(ReloadButtonTest, StopAfterReloadSet) { | 147 TEST_F(ReloadButtonTest, StopAfterReloadSet) { |
148 id mock_target = [OCMockObject mockForProtocol:@protocol(TargetActionMock)]; | 148 id mock_target = [OCMockObject mockForProtocol:@protocol(TargetActionMock)]; |
149 [button_ setTarget:mock_target]; | 149 [button_ setTarget:mock_target]; |
150 [button_ setAction:@selector(anAction:)]; | 150 [button_ setAction:@selector(anAction:)]; |
151 | 151 |
152 EXPECT_FALSE([button_ isMouseInside]); | 152 EXPECT_FALSE([button_ isMouseInside]); |
153 | 153 |
154 // Get to stop mode. | 154 // Get to stop mode. |
155 [button_ setIsLoading:YES force:YES]; | 155 [button_ setIsLoading:YES force:YES]; |
156 EXPECT_EQ([button_ tag], IDC_STOP); | 156 EXPECT_EQ([button_ command], IDC_STOP); |
157 | 157 |
158 // Expect the action once. | 158 // Expect the action once. |
159 [[mock_target expect] anAction:button_]; | 159 [[mock_target expect] anAction:button_]; |
160 | 160 |
161 // Clicking in stop mode should send the action and transition to | 161 // Clicking in stop mode should send the action and transition to |
162 // reload mode. | 162 // reload mode. |
163 const std::pair<NSEvent*,NSEvent*> click = | 163 const std::pair<NSEvent*,NSEvent*> click = |
164 test_event_utils::MouseClickInView(button_, 1); | 164 test_event_utils::MouseClickInView(button_, 1); |
165 [NSApp postEvent:click.second atStart:YES]; | 165 [NSApp postEvent:click.second atStart:YES]; |
166 [button_ mouseDown:click.first]; | 166 [button_ mouseDown:click.first]; |
167 EXPECT_EQ([button_ tag], IDC_RELOAD); | 167 EXPECT_EQ([button_ command], IDC_RELOAD); |
168 | 168 |
169 // Get back to stop mode. | 169 // Get back to stop mode. |
170 [button_ setIsLoading:YES force:YES]; | 170 [button_ setIsLoading:YES force:YES]; |
171 EXPECT_EQ([button_ tag], IDC_STOP); | 171 EXPECT_EQ([button_ command], IDC_STOP); |
172 | 172 |
173 // If hover prevented reload mode immediately taking effect, clicks | 173 // If hover prevented reload mode immediately taking effect, clicks |
174 // should not send any action, but should still transition to reload | 174 // should not send any action, but should still transition to reload |
175 // mode. | 175 // mode. |
176 [button_ mouseEntered:nil]; | 176 [button_ mouseEntered:nil]; |
177 EXPECT_TRUE([button_ isMouseInside]); | 177 EXPECT_TRUE([button_ isMouseInside]); |
178 [button_ setIsLoading:NO force:NO]; | 178 [button_ setIsLoading:NO force:NO]; |
179 EXPECT_EQ([button_ tag], IDC_STOP); | 179 EXPECT_EQ([button_ command], IDC_STOP); |
180 [NSApp postEvent:click.second atStart:YES]; | 180 [NSApp postEvent:click.second atStart:YES]; |
181 [button_ mouseDown:click.first]; | 181 [button_ mouseDown:click.first]; |
182 EXPECT_EQ([button_ tag], IDC_RELOAD); | 182 EXPECT_EQ([button_ command], IDC_RELOAD); |
183 | 183 |
184 [button_ setTarget:nil]; | 184 [button_ setTarget:nil]; |
185 } | 185 } |
186 | 186 |
187 } // namespace | 187 } // namespace |
OLD | NEW |