Spaces:
Sleeping
Sleeping
; | |
var assert = require("@sinonjs/referee-sinon").assert; | |
var knuthShuffle = require("knuth-shuffle").knuthShuffle; | |
var sinon = require("@sinonjs/referee-sinon").sinon; | |
var orderByFirstCall = require("./order-by-first-call"); | |
describe("orderByFirstCall", function () { | |
it("should order an Array of spies by the callId of the first call, ascending", function () { | |
// create an array of spies | |
var spies = [ | |
sinon.spy(), | |
sinon.spy(), | |
sinon.spy(), | |
sinon.spy(), | |
sinon.spy(), | |
sinon.spy(), | |
]; | |
// call all the spies | |
spies.forEach(function (spy) { | |
spy(); | |
}); | |
// add a few uncalled spies | |
spies.push(sinon.spy()); | |
spies.push(sinon.spy()); | |
// randomise the order of the spies | |
knuthShuffle(spies); | |
var sortedSpies = orderByFirstCall(spies); | |
assert.equals(sortedSpies.length, spies.length); | |
var orderedByFirstCall = sortedSpies.every(function (spy, index) { | |
if (index + 1 === sortedSpies.length) { | |
return true; | |
} | |
var nextSpy = sortedSpies[index + 1]; | |
// uncalled spies should be ordered first | |
if (!spy.called) { | |
return true; | |
} | |
return spy.calledImmediatelyBefore(nextSpy); | |
}); | |
assert.isTrue(orderedByFirstCall); | |
}); | |
}); | |