You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
"use strict"; |
|
|
|
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); |
|
}); |
|
});
|
|
|