| // Make sure `setTimeout()` and friends don't throw if the user-supplied |
| // function has .call() and .apply() monkey-patched to undesirable values. |
| |
| // Refs: https://github.com/nodejs/node/issues/12956 |
| |
| 'use strict'; |
| |
| const common = require('../common'); |
| |
| { |
| const fn = common.mustCall(10); |
| fn.call = 'not a function'; |
| fn.apply = 'also not a function'; |
| setTimeout(fn, 1); |
| setTimeout(fn, 1, 'oneArg'); |
| setTimeout(fn, 1, 'two', 'args'); |
| setTimeout(fn, 1, 'three', '(3)', 'args'); |
| setTimeout(fn, 1, 'more', 'than', 'three', 'args'); |
| |
| setImmediate(fn, 1); |
| setImmediate(fn, 1, 'oneArg'); |
| setImmediate(fn, 1, 'two', 'args'); |
| setImmediate(fn, 1, 'three', '(3)', 'args'); |
| setImmediate(fn, 1, 'more', 'than', 'three', 'args'); |
| } |
| |
| { |
| const testInterval = common.mustCall((...args) => { |
| const fn = common.mustCall(() => { clearInterval(interval); }); |
| fn.call = 'not a function'; |
| fn.apply = 'also not a function'; |
| const interval = setInterval(fn, 1, ...args); |
| }, 5); |
| |
| testInterval(); |
| testInterval('oneArg'); |
| testInterval('two', 'args'); |
| testInterval('three', '(3)', 'args'); |
| testInterval('more', 'than', 'three', 'args'); |
| } |