Spaces:
Configuration error
Configuration error
; | |
var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false. | |
var thrower = function () { | |
throw new Error('should not reach here'); | |
}; | |
module.exports = function (findIndex, t) { | |
var list = [5, 10, 15, 20]; | |
t.equal( | |
findIndex(list, function (item) { return item === 15; }), | |
2, | |
'find index by predicate' | |
); | |
t.equal( | |
findIndex(list, function (item) { return item === 'a'; }), | |
-1, | |
'returns -1 when nothing matches' | |
); | |
t['throws']( | |
function () { findIndex(list); }, | |
TypeError, | |
'throws without callback' | |
); | |
var context = {}; | |
var foundIndex = findIndex(list, function (value, index, arr) { | |
t.equal(list[index], value); | |
t.deepEqual(list, arr); | |
t.equal(this, context, 'receiver is as expected'); | |
return false; | |
}, context); | |
t.equal(foundIndex, -1, 'receives all three arguments'); | |
var arraylike = { 0: 1, 1: 2, 2: 3, length: 3 }; | |
t.equal( | |
findIndex(arraylike, function (item) { | |
return item === 2; | |
}), | |
1, | |
'works with an array-like object' | |
); | |
t.equal( | |
findIndex({ 0: 1, 1: 2, 2: 3, length: -3 }, thrower), | |
-1, | |
'works with an array-like object with negative length' | |
); | |
t.test('sparse arrays', { skip: !canDistinguishSparseFromUndefined }, function (st) { | |
st.test('works with a sparse array', function (s2t) { | |
var obj = [1, , undefined]; // eslint-disable-line no-sparse-arrays | |
s2t.notOk(1 in obj); | |
var seen = []; | |
var foundSparse = findIndex(obj, function (item, idx) { | |
seen.push([idx, item]); | |
return false; | |
}); | |
s2t.equal(foundSparse, -1); | |
s2t.deepEqual(seen, [[0, 1], [1, undefined], [2, undefined]]); | |
s2t.end(); | |
}); | |
st.test('works with a sparse array-like object', function (s2t) { | |
var obj = { 0: 1, 2: undefined, length: 3.2 }; | |
var seen = []; | |
var foundSparse = findIndex(obj, function (item, idx) { | |
seen.push([idx, item]); | |
return false; | |
}); | |
s2t.equal(foundSparse, -1); | |
s2t.deepEqual(seen, [[0, 1], [1, undefined], [2, undefined]]); | |
s2t.end(); | |
}); | |
st.end(); | |
}); | |
}; | |