| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (async function(testRunner) { |
| var {page, session, dp} = await testRunner.startBlank( |
| `Tests that dom timer respect virtual time order.`); |
| |
| await dp.Emulation.setVirtualTimePolicy({policy: 'pause'}); |
| await session.evaluate(` |
| var run_order = []; |
| function timerFn(delay, value) { |
| setTimeout(() => { run_order.push(value); }, delay); |
| }; |
| var one_minute = 60 * 1000; |
| timerFn(one_minute * 4, 'a'); |
| timerFn(one_minute * 2, 'b'); |
| timerFn(one_minute, 'c');`); |
| |
| // Normally the JS runs pretty much instantly but the timer callbacks will |
| // take 4 mins to fire, but thanks to timer fast forwarding we can make them |
| // fire immediatly. |
| await dp.Emulation.setVirtualTimePolicy({ |
| policy: 'pauseIfNetworkFetchesPending', budget: 60 * 1000 * 4}); |
| await dp.Emulation.onceVirtualTimeBudgetExpired(); |
| testRunner.log(await session.evaluate(`run_order.join(', ')`)); |
| testRunner.completeTest(); |
| }) |