Spaces:
Sleeping
Sleeping
; | |
var every = require("./prototypes/array").every; | |
/** | |
* @private | |
*/ | |
function hasCallsLeft(callMap, spy) { | |
if (callMap[spy.id] === undefined) { | |
callMap[spy.id] = 0; | |
} | |
return callMap[spy.id] < spy.callCount; | |
} | |
/** | |
* @private | |
*/ | |
function checkAdjacentCalls(callMap, spy, index, spies) { | |
var calledBeforeNext = true; | |
if (index !== spies.length - 1) { | |
calledBeforeNext = spy.calledBefore(spies[index + 1]); | |
} | |
if (hasCallsLeft(callMap, spy) && calledBeforeNext) { | |
callMap[spy.id] += 1; | |
return true; | |
} | |
return false; | |
} | |
/** | |
* A Sinon proxy object (fake, spy, stub) | |
* | |
* @typedef {object} SinonProxy | |
* @property {Function} calledBefore - A method that determines if this proxy was called before another one | |
* @property {string} id - Some id | |
* @property {number} callCount - Number of times this proxy has been called | |
*/ | |
/** | |
* Returns true when the spies have been called in the order they were supplied in | |
* | |
* @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments | |
* @returns {boolean} true when spies are called in order, false otherwise | |
*/ | |
function calledInOrder(spies) { | |
var callMap = {}; | |
// eslint-disable-next-line no-underscore-dangle | |
var _spies = arguments.length > 1 ? arguments : spies; | |
return every(_spies, checkAdjacentCalls.bind(null, callMap)); | |
} | |
module.exports = calledInOrder; | |