Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: third_party/WebKit/Source/core/dom/ScriptRunnerTest.cpp

Issue 1373833003: Make WTF::Vector work with gmock matchers, refactor some tests to use it (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missed a couple Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/TimerTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "config.h" 5 #include "config.h"
6 #include "core/dom/ScriptRunner.h" 6 #include "core/dom/ScriptRunner.h"
7 7
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/dom/Element.h" 9 #include "core/dom/Element.h"
10 #include "core/dom/ScriptLoader.h" 10 #include "core/dom/ScriptLoader.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 165
166 void TearDown() override 166 void TearDown() override
167 { 167 {
168 m_scriptRunner.release(); 168 m_scriptRunner.release();
169 Platform::initialize(m_oldPlatform); 169 Platform::initialize(m_oldPlatform);
170 } 170 }
171 171
172 RefPtrWillBePersistent<Document> m_document; 172 RefPtrWillBePersistent<Document> m_document;
173 RefPtrWillBePersistent<Element> m_element; 173 RefPtrWillBePersistent<Element> m_element;
174 OwnPtrWillBePersistent<ScriptRunner> m_scriptRunner; 174 OwnPtrWillBePersistent<ScriptRunner> m_scriptRunner;
175 std::vector<int> m_order; // gmock matchers don't work nicely with WTF::Vect or 175 WTF::Vector<int> m_order;
176 MockPlatform m_platform; 176 MockPlatform m_platform;
177 Platform* m_oldPlatform; // NOT OWNED 177 Platform* m_oldPlatform; // NOT OWNED
178 }; 178 };
179 179
180 TEST_F(ScriptRunnerTest, QueueSingleScript_Async) 180 TEST_F(ScriptRunnerTest, QueueSingleScript_Async)
181 { 181 {
182 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create (m_element.get()); 182 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create (m_element.get());
183 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::AS YNC_EXECUTION); 183 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::AS YNC_EXECUTION);
184 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::ASYNC_EX ECUTION); 184 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::ASYNC_EX ECUTION);
185 185
(...skipping 16 matching lines...) Expand all
202 { 202 {
203 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 203 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get());
204 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 204 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get());
205 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 205 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get());
206 206
207 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 207 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
208 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 208 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
209 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 209 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
210 210
211 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 211 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
212 m_order.push_back(1); 212 m_order.append(1);
213 })); 213 }));
214 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 214 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
215 m_order.push_back(2); 215 m_order.append(2);
216 })); 216 }));
217 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 217 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
218 m_order.push_back(3); 218 m_order.append(3);
219 })); 219 }));
220 220
221 // Make the scripts become ready in reverse order. 221 // Make the scripts become ready in reverse order.
222 bool isReady[] = { false, false, false }; 222 bool isReady[] = { false, false, false };
223 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Invoke([&isReady] { 223 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Invoke([&isReady] {
224 return isReady[0]; 224 return isReady[0];
225 })); 225 }));
226 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Invoke([&isReady] { 226 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Invoke([&isReady] {
227 return isReady[1]; 227 return isReady[1];
228 })); 228 }));
(...skipping 26 matching lines...) Expand all
255 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 255 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
256 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 256 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
257 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 257 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
258 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION); 258 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION);
259 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION); 259 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION);
260 260
261 m_scriptRunner->notifyScriptReady(scriptLoader4.get(), ScriptRunner::ASYNC_E XECUTION); 261 m_scriptRunner->notifyScriptReady(scriptLoader4.get(), ScriptRunner::ASYNC_E XECUTION);
262 m_scriptRunner->notifyScriptReady(scriptLoader5.get(), ScriptRunner::ASYNC_E XECUTION); 262 m_scriptRunner->notifyScriptReady(scriptLoader5.get(), ScriptRunner::ASYNC_E XECUTION);
263 263
264 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 264 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
265 m_order.push_back(1); 265 m_order.append(1);
266 })); 266 }));
267 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 267 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
268 m_order.push_back(2); 268 m_order.append(2);
269 })); 269 }));
270 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 270 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
271 m_order.push_back(3); 271 m_order.append(3);
272 })); 272 }));
273 EXPECT_CALL(*scriptLoader4, execute()).WillOnce(Invoke([this] { 273 EXPECT_CALL(*scriptLoader4, execute()).WillOnce(Invoke([this] {
274 m_order.push_back(4); 274 m_order.append(4);
275 })); 275 }));
276 EXPECT_CALL(*scriptLoader5, execute()).WillOnce(Invoke([this] { 276 EXPECT_CALL(*scriptLoader5, execute()).WillOnce(Invoke([this] {
277 m_order.push_back(5); 277 m_order.append(5);
278 })); 278 }));
279 279
280 m_platform.runAllTasks(); 280 m_platform.runAllTasks();
281 281
282 // Make sure the async scripts were run before the in-order ones. 282 // Make sure the async scripts were run before the in-order ones.
283 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3)); 283 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3));
284 } 284 }
285 285
286 TEST_F(ScriptRunnerTest, QueueMixedScripts_YieldAfterEveryExecution) 286 TEST_F(ScriptRunnerTest, QueueMixedScripts_YieldAfterEveryExecution)
287 { 287 {
(...skipping 12 matching lines...) Expand all
300 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 300 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
301 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 301 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
302 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 302 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
303 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION); 303 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION);
304 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION); 304 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION);
305 305
306 m_scriptRunner->notifyScriptReady(scriptLoader4.get(), ScriptRunner::ASYNC_E XECUTION); 306 m_scriptRunner->notifyScriptReady(scriptLoader4.get(), ScriptRunner::ASYNC_E XECUTION);
307 m_scriptRunner->notifyScriptReady(scriptLoader5.get(), ScriptRunner::ASYNC_E XECUTION); 307 m_scriptRunner->notifyScriptReady(scriptLoader5.get(), ScriptRunner::ASYNC_E XECUTION);
308 308
309 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 309 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
310 m_order.push_back(1); 310 m_order.append(1);
311 })); 311 }));
312 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 312 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
313 m_order.push_back(2); 313 m_order.append(2);
314 })); 314 }));
315 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 315 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
316 m_order.push_back(3); 316 m_order.append(3);
317 })); 317 }));
318 EXPECT_CALL(*scriptLoader4, execute()).WillOnce(Invoke([this] { 318 EXPECT_CALL(*scriptLoader4, execute()).WillOnce(Invoke([this] {
319 m_order.push_back(4); 319 m_order.append(4);
320 })); 320 }));
321 EXPECT_CALL(*scriptLoader5, execute()).WillOnce(Invoke([this] { 321 EXPECT_CALL(*scriptLoader5, execute()).WillOnce(Invoke([this] {
322 m_order.push_back(5); 322 m_order.append(5);
323 })); 323 }));
324 324
325 m_platform.runAllTasks(); 325 m_platform.runAllTasks();
326 326
327 // Make sure the async scripts were run before the in-order ones. 327 // Make sure the async scripts were run before the in-order ones.
328 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3)); 328 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3));
329 } 329 }
330 330
331 TEST_F(ScriptRunnerTest, QueueReentrantScript_Async) 331 TEST_F(ScriptRunnerTest, QueueReentrantScript_Async)
332 { 332 {
333 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 333 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get());
334 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 334 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get());
335 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 335 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get());
336 336
337 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION); 337 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION);
338 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION); 338 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION);
339 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION); 339 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION);
340 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION); 340 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION);
341 341
342 MockScriptLoader* scriptLoader = scriptLoader2.get(); 342 MockScriptLoader* scriptLoader = scriptLoader2.get();
343 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] { 343 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] {
344 m_order.push_back(1); 344 m_order.append(1);
345 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION); 345 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION);
346 })); 346 }));
347 347
348 scriptLoader = scriptLoader3.get(); 348 scriptLoader = scriptLoader3.get();
349 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([scriptLoader, this] { 349 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([scriptLoader, this] {
350 m_order.push_back(2); 350 m_order.append(2);
351 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION); 351 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION);
352 })); 352 }));
353 353
354 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 354 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
355 m_order.push_back(3); 355 m_order.append(3);
356 })); 356 }));
357 357
358 // Make sure that re-entrant calls to notifyScriptReady don't cause ScriptRu nner::execute to do 358 // Make sure that re-entrant calls to notifyScriptReady don't cause ScriptRu nner::execute to do
359 // more work than expected. 359 // more work than expected.
360 m_platform.runSingleTask(); 360 m_platform.runSingleTask();
361 EXPECT_THAT(m_order, ElementsAre(1)); 361 EXPECT_THAT(m_order, ElementsAre(1));
362 362
363 m_platform.runSingleTask(); 363 m_platform.runSingleTask();
364 EXPECT_THAT(m_order, ElementsAre(1, 2)); 364 EXPECT_THAT(m_order, ElementsAre(1, 2));
365 365
366 m_platform.runSingleTask(); 366 m_platform.runSingleTask();
367 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 367 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
368 } 368 }
369 369
370 TEST_F(ScriptRunnerTest, QueueReentrantScript_InOrder) 370 TEST_F(ScriptRunnerTest, QueueReentrantScript_InOrder)
371 { 371 {
372 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 372 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get());
373 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 373 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get());
374 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 374 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get());
375 375
376 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 376 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
377 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 377 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
378 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true)); 378 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true));
379 379
380 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 380 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
381 m_scriptRunner->resume(); 381 m_scriptRunner->resume();
382 382
383 MockScriptLoader* scriptLoader = scriptLoader2.get(); 383 MockScriptLoader* scriptLoader = scriptLoader2.get();
384 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] { 384 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] {
385 m_order.push_back(1); 385 m_order.append(1);
386 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION); 386 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION);
387 m_scriptRunner->resume(); 387 m_scriptRunner->resume();
388 })); 388 }));
389 389
390 scriptLoader = scriptLoader3.get(); 390 scriptLoader = scriptLoader3.get();
391 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([scriptLoader, this] { 391 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([scriptLoader, this] {
392 m_order.push_back(2); 392 m_order.append(2);
393 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION); 393 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION);
394 m_scriptRunner->resume(); 394 m_scriptRunner->resume();
395 })); 395 }));
396 396
397 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 397 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
398 m_order.push_back(3); 398 m_order.append(3);
399 })); 399 }));
400 400
401 // Make sure that re-entrant calls to queueScriptForExecution don't cause Sc riptRunner::execute to do 401 // Make sure that re-entrant calls to queueScriptForExecution don't cause Sc riptRunner::execute to do
402 // more work than expected. 402 // more work than expected.
403 m_platform.runSingleTask(); 403 m_platform.runSingleTask();
404 EXPECT_THAT(m_order, ElementsAre(1)); 404 EXPECT_THAT(m_order, ElementsAre(1));
405 405
406 m_platform.runSingleTask(); 406 m_platform.runSingleTask();
407 EXPECT_THAT(m_order, ElementsAre(1, 2)); 407 EXPECT_THAT(m_order, ElementsAre(1, 2));
408 408
409 m_platform.runSingleTask(); 409 m_platform.runSingleTask();
410 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 410 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
411 } 411 }
412 412
413 TEST_F(ScriptRunnerTest, ShouldYield_AsyncScripts) 413 TEST_F(ScriptRunnerTest, ShouldYield_AsyncScripts)
414 { 414 {
415 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 415 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get());
416 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 416 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get());
417 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 417 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get());
418 418
419 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION); 419 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION);
420 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION); 420 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION);
421 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION); 421 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION);
422 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION); 422 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION);
423 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION); 423 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION);
424 m_scriptRunner->notifyScriptReady(scriptLoader3.get(), ScriptRunner::ASYNC_E XECUTION); 424 m_scriptRunner->notifyScriptReady(scriptLoader3.get(), ScriptRunner::ASYNC_E XECUTION);
425 425
426 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 426 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
427 m_order.push_back(1); 427 m_order.append(1);
428 m_platform.setShouldYield(true); 428 m_platform.setShouldYield(true);
429 })); 429 }));
430 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 430 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
431 m_order.push_back(2); 431 m_order.append(2);
432 })); 432 }));
433 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 433 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
434 m_order.push_back(3); 434 m_order.append(3);
435 })); 435 }));
436 436
437 m_platform.runSingleTask(); 437 m_platform.runSingleTask();
438 EXPECT_THAT(m_order, ElementsAre(1)); 438 EXPECT_THAT(m_order, ElementsAre(1));
439 439
440 // Make sure the interrupted tasks are executed next 'tick'. 440 // Make sure the interrupted tasks are executed next 'tick'.
441 m_platform.setShouldYield(false); 441 m_platform.setShouldYield(false);
442 m_platform.runSingleTask(); 442 m_platform.runSingleTask();
443 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 443 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
444 } 444 }
445 445
446 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts) 446 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts)
447 { 447 {
448 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoaders[20]; 448 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoaders[20];
449 for (int i = 0; i < 20; i++) 449 for (int i = 0; i < 20; i++)
450 scriptLoaders[i] = nullptr; 450 scriptLoaders[i] = nullptr;
451 451
452 for (int i = 0; i < 20; i++) { 452 for (int i = 0; i < 20; i++) {
453 scriptLoaders[i] = MockScriptLoader::create(m_element.get()); 453 scriptLoaders[i] = MockScriptLoader::create(m_element.get());
454 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true)); 454 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true));
455 455
456 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu nner::ASYNC_EXECUTION); 456 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu nner::ASYNC_EXECUTION);
457 457
458 if (i > 0) { 458 if (i > 0) {
459 EXPECT_CALL(*scriptLoaders[i], execute()).WillOnce(Invoke([this, i] { 459 EXPECT_CALL(*scriptLoaders[i], execute()).WillOnce(Invoke([this, i] {
460 m_order.push_back(i); 460 m_order.append(i);
461 })); 461 }));
462 } 462 }
463 } 463 }
464 464
465 m_scriptRunner->notifyScriptReady(scriptLoaders[0].get(), ScriptRunner::ASYN C_EXECUTION); 465 m_scriptRunner->notifyScriptReady(scriptLoaders[0].get(), ScriptRunner::ASYN C_EXECUTION);
466 m_scriptRunner->notifyScriptReady(scriptLoaders[1].get(), ScriptRunner::ASYN C_EXECUTION); 466 m_scriptRunner->notifyScriptReady(scriptLoaders[1].get(), ScriptRunner::ASYN C_EXECUTION);
467 m_scriptRunner->resume(); 467 m_scriptRunner->resume();
468 468
469 EXPECT_CALL(*scriptLoaders[0], execute()).WillOnce(Invoke([&scriptLoaders, t his] { 469 EXPECT_CALL(*scriptLoaders[0], execute()).WillOnce(Invoke([&scriptLoaders, t his] {
470 for (int i = 2; i < 20; i++) 470 for (int i = 2; i < 20; i++)
471 m_scriptRunner->notifyScriptReady(scriptLoaders[i].get(), ScriptRunn er::ASYNC_EXECUTION); 471 m_scriptRunner->notifyScriptReady(scriptLoaders[i].get(), ScriptRunn er::ASYNC_EXECUTION);
472 m_scriptRunner->resume(); 472 m_scriptRunner->resume();
473 m_order.push_back(0); 473 m_order.append(0);
474 })); 474 }));
475 475
476 m_platform.runAllTasks(); 476 m_platform.runAllTasks();
477 477
478 int expected[] = { 478 int expected[] = {
479 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 479 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
480 }; 480 };
481 481
482 EXPECT_THAT(m_order, testing::ElementsAreArray(expected)); 482 EXPECT_THAT(m_order, testing::ElementsAreArray(expected));
483 } 483 }
484 484
485 TEST_F(ScriptRunnerTest, ShouldYield_InOrderScripts) 485 TEST_F(ScriptRunnerTest, ShouldYield_InOrderScripts)
486 { 486 {
487 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 487 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get());
488 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 488 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get());
489 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 489 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get());
490 490
491 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 491 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
492 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 492 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
493 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true)); 493 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true));
494 494
495 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 495 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
496 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 496 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
497 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 497 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
498 m_scriptRunner->resume(); 498 m_scriptRunner->resume();
499 499
500 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 500 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
501 m_order.push_back(1); 501 m_order.append(1);
502 m_platform.setShouldYield(true); 502 m_platform.setShouldYield(true);
503 })); 503 }));
504 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 504 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
505 m_order.push_back(2); 505 m_order.append(2);
506 })); 506 }));
507 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] { 507 EXPECT_CALL(*scriptLoader3, execute()).WillOnce(Invoke([this] {
508 m_order.push_back(3); 508 m_order.append(3);
509 })); 509 }));
510 510
511 m_platform.runSingleTask(); 511 m_platform.runSingleTask();
512 EXPECT_THAT(m_order, ElementsAre(1)); 512 EXPECT_THAT(m_order, ElementsAre(1));
513 513
514 // Make sure the interrupted tasks are executed next 'tick'. 514 // Make sure the interrupted tasks are executed next 'tick'.
515 m_platform.setShouldYield(false); 515 m_platform.setShouldYield(false);
516 m_platform.runSingleTask(); 516 m_platform.runSingleTask();
517 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 517 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
518 } 518 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 testing::Mock::VerifyAndClear(scriptLoader2.get()); 572 testing::Mock::VerifyAndClear(scriptLoader2.get());
573 testing::Mock::VerifyAndClear(scriptLoader3.get()); 573 testing::Mock::VerifyAndClear(scriptLoader3.get());
574 EXPECT_CALL(*scriptLoader2, execute()).Times(1); 574 EXPECT_CALL(*scriptLoader2, execute()).Times(1);
575 EXPECT_CALL(*scriptLoader3, execute()).Times(1); 575 EXPECT_CALL(*scriptLoader3, execute()).Times(1);
576 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 576 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
577 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true)); 577 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true));
578 m_platform.runAllTasks(); 578 m_platform.runAllTasks();
579 } 579 }
580 580
581 } // namespace blink 581 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/TimerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698