OLD | NEW |
1 // Copyright (c) 2006-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 #include "chrome_frame/test/automation_client_mock.h" | 4 #include "chrome_frame/test/automation_client_mock.h" |
5 | 5 |
6 #include "base/callback.h" | 6 #include "base/callback.h" |
7 #include "net/base/net_errors.h" | 7 #include "net/base/net_errors.h" |
8 #include "chrome_frame/test/chrome_frame_test_utils.h" | 8 #include "chrome_frame/test/chrome_frame_test_utils.h" |
9 | 9 |
10 #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING | 10 #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING |
11 #include "testing/gmock_mutant.h" | 11 #include "testing/gmock_mutant.h" |
(...skipping 25 matching lines...) Expand all Loading... |
37 *automation_server_id = proxy_id; | 37 *automation_server_id = proxy_id; |
38 Task* task = NewRunnableMethod(d, | 38 Task* task = NewRunnableMethod(d, |
39 &ProxyFactory::LaunchDelegate::LaunchComplete, pxy, result); | 39 &ProxyFactory::LaunchDelegate::LaunchComplete, pxy, result); |
40 loop_->PostDelayedTask(FROM_HERE, task, | 40 loop_->PostDelayedTask(FROM_HERE, task, |
41 params.automation_server_launch_timeout/2); | 41 params.automation_server_launch_timeout/2); |
42 } | 42 } |
43 | 43 |
44 void CFACMockTest::SetAutomationServerOk() { | 44 void CFACMockTest::SetAutomationServerOk() { |
45 EXPECT_CALL(factory_, GetAutomationServer(testing::NotNull(), | 45 EXPECT_CALL(factory_, GetAutomationServer(testing::NotNull(), |
46 testing::Field(&ChromeFrameLaunchParams::profile_name, | 46 testing::Field(&ChromeFrameLaunchParams::profile_name, |
47 testing::StrEq(profile_)), | 47 testing::StrEq(profile_path_.BaseName().ToWStringHack())), |
48 testing::NotNull())) | 48 testing::NotNull())) |
49 .Times(1) | 49 .Times(1) |
50 .WillOnce(testing::Invoke(CreateFunctor(&factory_, | 50 .WillOnce(testing::Invoke(CreateFunctor(&factory_, |
51 &MockProxyFactory::GetServerImpl, | 51 &MockProxyFactory::GetServerImpl, |
52 get_proxy(), id_, | 52 get_proxy(), id_, |
53 AUTOMATION_SUCCESS))); | 53 AUTOMATION_SUCCESS))); |
54 | 54 |
55 EXPECT_CALL(factory_, ReleaseAutomationServer(testing::Eq(id_))).Times(1); | 55 EXPECT_CALL(factory_, ReleaseAutomationServer(testing::Eq(id_))).Times(1); |
56 } | 56 } |
57 | 57 |
(...skipping 26 matching lines...) Expand all Loading... |
84 c->Run(external_tab_container, tab_wnd, tab_handle); | 84 c->Run(external_tab_container, tab_wnd, tab_handle); |
85 delete c; | 85 delete c; |
86 delete arg0; | 86 delete arg0; |
87 } | 87 } |
88 | 88 |
89 // We mock ChromeFrameDelegate only. The rest is with real AutomationProxy | 89 // We mock ChromeFrameDelegate only. The rest is with real AutomationProxy |
90 TEST(CFACWithChrome, CreateTooFast) { | 90 TEST(CFACWithChrome, CreateTooFast) { |
91 MockCFDelegate cfd; | 91 MockCFDelegate cfd; |
92 chrome_frame_test::TimedMsgLoop loop; | 92 chrome_frame_test::TimedMsgLoop loop; |
93 int timeout = 0; // Chrome cannot send Hello message so fast. | 93 int timeout = 0; // Chrome cannot send Hello message so fast. |
94 const std::wstring profile = L"Adam.N.Epilinter"; | 94 const FilePath profile_path( |
| 95 chrome_frame_test::GetProfilePath(L"Adam.N.Epilinter")); |
95 | 96 |
96 scoped_refptr<ChromeFrameAutomationClient> client; | 97 scoped_refptr<ChromeFrameAutomationClient> client; |
97 client = new ChromeFrameAutomationClient(); | 98 client = new ChromeFrameAutomationClient(); |
98 | 99 |
99 EXPECT_CALL(cfd, OnAutomationServerLaunchFailed(AUTOMATION_TIMEOUT, _)) | 100 EXPECT_CALL(cfd, OnAutomationServerLaunchFailed(AUTOMATION_TIMEOUT, _)) |
100 .Times(1) | 101 .Times(1) |
101 .WillOnce(QUIT_LOOP(loop)); | 102 .WillOnce(QUIT_LOOP(loop)); |
102 | 103 |
103 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile, L"", false)); | 104 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile_path, L"", |
| 105 false)); |
104 loop.RunFor(10); | 106 loop.RunFor(10); |
105 client->Uninitialize(); | 107 client->Uninitialize(); |
106 } | 108 } |
107 | 109 |
108 // This test may fail if Chrome take more that 10 seconds (timeout var) to | 110 // This test may fail if Chrome take more that 10 seconds (timeout var) to |
109 // launch. In this case GMock shall print something like "unexpected call to | 111 // launch. In this case GMock shall print something like "unexpected call to |
110 // OnAutomationServerLaunchFailed". I'm yet to find out how to specify | 112 // OnAutomationServerLaunchFailed". I'm yet to find out how to specify |
111 // that this is an unexpected call, and still to execute and action. | 113 // that this is an unexpected call, and still to execute and action. |
112 TEST(CFACWithChrome, CreateNotSoFast) { | 114 TEST(CFACWithChrome, CreateNotSoFast) { |
113 MockCFDelegate cfd; | 115 MockCFDelegate cfd; |
114 chrome_frame_test::TimedMsgLoop loop; | 116 chrome_frame_test::TimedMsgLoop loop; |
115 const std::wstring profile = L"Adam.N.Epilinter"; | 117 const FilePath profile_path( |
| 118 chrome_frame_test::GetProfilePath(L"Adam.N.Epilinter")); |
116 int timeout = 10000; | 119 int timeout = 10000; |
117 | 120 |
118 scoped_refptr<ChromeFrameAutomationClient> client; | 121 scoped_refptr<ChromeFrameAutomationClient> client; |
119 client = new ChromeFrameAutomationClient; | 122 client = new ChromeFrameAutomationClient; |
120 | 123 |
121 EXPECT_CALL(cfd, OnAutomationServerReady()) | 124 EXPECT_CALL(cfd, OnAutomationServerReady()) |
122 .Times(1) | 125 .Times(1) |
123 .WillOnce(QUIT_LOOP(loop)); | 126 .WillOnce(QUIT_LOOP(loop)); |
124 | 127 |
125 EXPECT_CALL(cfd, OnAutomationServerLaunchFailed(_, _)) | 128 EXPECT_CALL(cfd, OnAutomationServerLaunchFailed(_, _)) |
126 .Times(0); | 129 .Times(0); |
127 | 130 |
128 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile, L"", false)); | 131 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile_path, L"", |
| 132 false)); |
129 | 133 |
130 loop.RunFor(11); | 134 loop.RunFor(11); |
131 client->Uninitialize(); | 135 client->Uninitialize(); |
132 client = NULL; | 136 client = NULL; |
133 } | 137 } |
134 | 138 |
135 TEST(CFACWithChrome, NavigateOk) { | 139 TEST(CFACWithChrome, NavigateOk) { |
136 MockCFDelegate cfd; | 140 MockCFDelegate cfd; |
137 chrome_frame_test::TimedMsgLoop loop; | 141 chrome_frame_test::TimedMsgLoop loop; |
138 const std::wstring profile = L"Adam.N.Epilinter"; | |
139 const std::string url = "about:version"; | 142 const std::string url = "about:version"; |
| 143 const FilePath profile_path( |
| 144 chrome_frame_test::GetProfilePath(L"Adam.N.Epilinter")); |
140 int timeout = 10000; | 145 int timeout = 10000; |
141 | 146 |
142 scoped_refptr<ChromeFrameAutomationClient> client; | 147 scoped_refptr<ChromeFrameAutomationClient> client; |
143 client = new ChromeFrameAutomationClient; | 148 client = new ChromeFrameAutomationClient; |
144 | 149 |
145 EXPECT_CALL(cfd, OnAutomationServerReady()) | 150 EXPECT_CALL(cfd, OnAutomationServerReady()) |
146 .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor( | 151 .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor( |
147 client.get(), &ChromeFrameAutomationClient::InitiateNavigation, | 152 client.get(), &ChromeFrameAutomationClient::InitiateNavigation, |
148 url, std::string(), false)))); | 153 url, std::string(), false)))); |
149 | 154 |
150 EXPECT_CALL(cfd, GetBounds(_)).Times(testing::AnyNumber()); | 155 EXPECT_CALL(cfd, GetBounds(_)).Times(testing::AnyNumber()); |
151 | 156 |
152 EXPECT_CALL(cfd, OnNavigationStateChanged(_, _)) | 157 EXPECT_CALL(cfd, OnNavigationStateChanged(_, _)) |
153 .Times(testing::AnyNumber()); | 158 .Times(testing::AnyNumber()); |
154 | 159 |
155 { | 160 { |
156 testing::InSequence s; | 161 testing::InSequence s; |
157 | 162 |
158 EXPECT_CALL(cfd, OnDidNavigate(_, EqNavigationInfoUrl(GURL()))) | 163 EXPECT_CALL(cfd, OnDidNavigate(_, EqNavigationInfoUrl(GURL()))) |
159 .Times(1); | 164 .Times(1); |
160 | 165 |
161 EXPECT_CALL(cfd, OnUpdateTargetUrl(_, _)).Times(1); | 166 EXPECT_CALL(cfd, OnUpdateTargetUrl(_, _)).Times(1); |
162 | 167 |
163 EXPECT_CALL(cfd, OnLoad(_, _)) | 168 EXPECT_CALL(cfd, OnLoad(_, _)) |
164 .Times(1) | 169 .Times(1) |
165 .WillOnce(QUIT_LOOP(loop)); | 170 .WillOnce(QUIT_LOOP(loop)); |
166 } | 171 } |
167 | 172 |
168 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile, L"", false)); | 173 EXPECT_TRUE(client->Initialize(&cfd, timeout, false, profile_path, L"", |
| 174 false)); |
169 loop.RunFor(10); | 175 loop.RunFor(10); |
170 client->Uninitialize(); | 176 client->Uninitialize(); |
171 client = NULL; | 177 client = NULL; |
172 } | 178 } |
173 | 179 |
174 TEST(CFACWithChrome, NavigateFailed) { | 180 TEST(CFACWithChrome, NavigateFailed) { |
175 MockCFDelegate cfd; | 181 MockCFDelegate cfd; |
176 chrome_frame_test::TimedMsgLoop loop; | 182 chrome_frame_test::TimedMsgLoop loop; |
177 const std::wstring profile = L"Adam.N.Epilinter"; | 183 const FilePath profile_path( |
| 184 chrome_frame_test::GetProfilePath(L"Adam.N.Epilinter")); |
178 const std::string url = "http://127.0.0.3:65412/"; | 185 const std::string url = "http://127.0.0.3:65412/"; |
179 const URLRequestStatus connection_failed(URLRequestStatus::FAILED, | 186 const URLRequestStatus connection_failed(URLRequestStatus::FAILED, |
180 net::ERR_INVALID_URL); | 187 net::ERR_INVALID_URL); |
181 | 188 |
182 scoped_refptr<ChromeFrameAutomationClient> client; | 189 scoped_refptr<ChromeFrameAutomationClient> client; |
183 client = new ChromeFrameAutomationClient; | 190 client = new ChromeFrameAutomationClient; |
184 cfd.SetRequestDelegate(client); | 191 cfd.SetRequestDelegate(client); |
185 | 192 |
186 EXPECT_CALL(cfd, OnAutomationServerReady()) | 193 EXPECT_CALL(cfd, OnAutomationServerReady()) |
187 .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor( | 194 .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor( |
188 client.get(), &ChromeFrameAutomationClient::InitiateNavigation, | 195 client.get(), &ChromeFrameAutomationClient::InitiateNavigation, |
189 url, std::string(), false)))); | 196 url, std::string(), false)))); |
190 | 197 |
191 EXPECT_CALL(cfd, GetBounds(_)).Times(testing::AnyNumber()); | 198 EXPECT_CALL(cfd, GetBounds(_)).Times(testing::AnyNumber()); |
192 EXPECT_CALL(cfd, OnNavigationStateChanged(_, _)).Times(testing::AnyNumber()); | 199 EXPECT_CALL(cfd, OnNavigationStateChanged(_, _)).Times(testing::AnyNumber()); |
193 | 200 |
194 EXPECT_CALL(cfd, OnRequestStart(_, _, _)) | 201 EXPECT_CALL(cfd, OnRequestStart(_, _, _)) |
195 // Often there's another request for the error page | 202 // Often there's another request for the error page |
196 .Times(testing::Between(1, 2)) | 203 .Times(testing::Between(1, 2)) |
197 .WillRepeatedly(testing::WithArgs<1>(testing::Invoke(CreateFunctor(&cfd, | 204 .WillRepeatedly(testing::WithArgs<1>(testing::Invoke(CreateFunctor(&cfd, |
198 &MockCFDelegate::Reply, connection_failed)))); | 205 &MockCFDelegate::Reply, connection_failed)))); |
199 | 206 |
200 EXPECT_CALL(cfd, OnUpdateTargetUrl(_, _)).Times(testing::AnyNumber()); | 207 EXPECT_CALL(cfd, OnUpdateTargetUrl(_, _)).Times(testing::AnyNumber()); |
201 EXPECT_CALL(cfd, OnLoad(_, _)).Times(testing::AtMost(1)); | 208 EXPECT_CALL(cfd, OnLoad(_, _)).Times(testing::AtMost(1)); |
202 | 209 |
203 EXPECT_CALL(cfd, OnNavigationFailed(_, _, GURL(url))) | 210 EXPECT_CALL(cfd, OnNavigationFailed(_, _, GURL(url))) |
204 .Times(1) | 211 .Times(1) |
205 .WillOnce(QUIT_LOOP_SOON(loop, 2)); | 212 .WillOnce(QUIT_LOOP_SOON(loop, 2)); |
206 | 213 |
207 EXPECT_TRUE(client->Initialize(&cfd, 10000, false, profile, L"", false)); | 214 EXPECT_TRUE(client->Initialize(&cfd, 10000, false, profile_path, L"", |
| 215 false)); |
208 | 216 |
209 loop.RunFor(10); | 217 loop.RunFor(10); |
210 client->Uninitialize(); | 218 client->Uninitialize(); |
211 client = NULL; | 219 client = NULL; |
212 } | 220 } |
213 | 221 |
214 TEST_F(CFACMockTest, MockedCreateTabOk) { | 222 TEST_F(CFACMockTest, MockedCreateTabOk) { |
215 int timeout = 500; | 223 int timeout = 500; |
216 CreateTab(); | 224 CreateTab(); |
217 SetAutomationServerOk(); | 225 SetAutomationServerOk(); |
(...skipping 12 matching lines...) Expand all Loading... |
230 | 238 |
231 EXPECT_CALL(proxy_, CreateTabProxy(testing::Eq(tab_handle_))) | 239 EXPECT_CALL(proxy_, CreateTabProxy(testing::Eq(tab_handle_))) |
232 .WillOnce(testing::Return(tab_)); | 240 .WillOnce(testing::Return(tab_)); |
233 | 241 |
234 EXPECT_CALL(cfd_, OnAutomationServerReady()) | 242 EXPECT_CALL(cfd_, OnAutomationServerReady()) |
235 .WillOnce(QUIT_LOOP(loop_)); | 243 .WillOnce(QUIT_LOOP(loop_)); |
236 | 244 |
237 EXPECT_CALL(proxy_, CancelAsync(_)).Times(testing::AnyNumber()); | 245 EXPECT_CALL(proxy_, CancelAsync(_)).Times(testing::AnyNumber()); |
238 | 246 |
239 // Here we go! | 247 // Here we go! |
240 EXPECT_TRUE(client_->Initialize(&cfd_, timeout, false, profile_, L"", false)); | 248 EXPECT_TRUE(client_->Initialize(&cfd_, timeout, false, profile_path_, L"", |
| 249 false)); |
241 loop_.RunFor(10); | 250 loop_.RunFor(10); |
242 client_->Uninitialize(); | 251 client_->Uninitialize(); |
243 } | 252 } |
244 | 253 |
245 TEST_F(CFACMockTest, MockedCreateTabFailed) { | 254 TEST_F(CFACMockTest, MockedCreateTabFailed) { |
246 HWND null_wnd = NULL; | 255 HWND null_wnd = NULL; |
247 SetAutomationServerOk(); | 256 SetAutomationServerOk(); |
248 | 257 |
249 EXPECT_CALL(proxy_, server_version()).Times(testing::AnyNumber()) | 258 EXPECT_CALL(proxy_, server_version()).Times(testing::AnyNumber()) |
250 .WillRepeatedly(testing::Return("")); | 259 .WillRepeatedly(testing::Return("")); |
251 | 260 |
252 EXPECT_CALL(proxy_, SendAsAsync(testing::Property(&IPC::SyncMessage::type, | 261 EXPECT_CALL(proxy_, SendAsAsync(testing::Property(&IPC::SyncMessage::type, |
253 AutomationMsg_CreateExternalTab__ID), | 262 AutomationMsg_CreateExternalTab__ID), |
254 testing::NotNull(), _)) | 263 testing::NotNull(), _)) |
255 .Times(1) | 264 .Times(1) |
256 .WillOnce(HandleCreateTab(tab_handle_, null_wnd, null_wnd)); | 265 .WillOnce(HandleCreateTab(tab_handle_, null_wnd, null_wnd)); |
257 | 266 |
258 EXPECT_CALL(proxy_, CreateTabProxy(_)).Times(0); | 267 EXPECT_CALL(proxy_, CreateTabProxy(_)).Times(0); |
259 | 268 |
260 EXPECT_CALL(proxy_, CancelAsync(_)).Times(testing::AnyNumber()); | 269 EXPECT_CALL(proxy_, CancelAsync(_)).Times(testing::AnyNumber()); |
261 | 270 |
262 Set_CFD_LaunchFailed(AUTOMATION_CREATE_TAB_FAILED); | 271 Set_CFD_LaunchFailed(AUTOMATION_CREATE_TAB_FAILED); |
263 | 272 |
264 // Here we go! | 273 // Here we go! |
265 EXPECT_TRUE(client_->Initialize(&cfd_, timeout_, false, profile_, L"", | 274 EXPECT_TRUE(client_->Initialize(&cfd_, timeout_, false, profile_path_, L"", |
266 false)); | 275 false)); |
267 loop_.RunFor(4); | 276 loop_.RunFor(4); |
268 client_->Uninitialize(); | 277 client_->Uninitialize(); |
269 } | 278 } |
270 | 279 |
OLD | NEW |