Ensure _.times doesn't error when passed negative numbers.

Former-commit-id: 5d694743fbda0f477250fe3c90cf29168834ac6f
This commit is contained in:
John-David Dalton
2013-03-07 09:05:27 -08:00
parent 952afa05ce
commit 11ba02067e
4 changed files with 29 additions and 1 deletions

View File

@@ -2170,6 +2170,19 @@
'}'
].join('\n'));
// replace `_.times`
source = replaceFunction(source, 'times', [
'function times(n, callback, thisArg) {',
' var index = -1,',
' result = Array(n > -1 ? n : 0);',
'',
' while (++index < n) {',
' result[index] = callback.call(thisArg, index);',
' }',
' return result;',
'}'
].join('\n'));
// replace `_.uniq`
source = replaceFunction(source, 'uniq', [
'function uniq(array, isSorted, callback, thisArg) {',

View File

@@ -4973,7 +4973,7 @@
* // => also calls `mage.castSpell(n)` three times
*/
function times(n, callback, thisArg) {
n = +n || 0;
n = (n = +n) > -1 ? n : 0;
var index = -1,
result = Array(n);

View File

@@ -911,6 +911,7 @@
strictEqual(lodash.result(), null, '_.result should return `null` for falsey `object` arguments: ' + basename);
strictEqual(lodash.some([false, true, false]), true, '_.some: ' + basename);
deepEqual(lodash.times(null, function() {}), [null], '_.times should not coerce `n` to a number: ' + basename);
equal(lodash.template('${a}', object), '${a}', '_.template should ignore ES6 delimiters: ' + basename);
equal('imports' in lodash.templateSettings, false, '_.templateSettings should not have an "imports" property: ' + basename);
strictEqual(lodash.uniqueId(0), '1', '_.uniqueId should ignore a prefix of `0`: ' + basename);

View File

@@ -2603,6 +2603,20 @@
test('should return an array of the results of each `callback` execution', function() {
deepEqual(_.times(3, function(n) { return n * 2; }), [0, 2, 4]);
});
test('should coerce `n` to a number', function() {
deepEqual(_.times(null), []);
});
test('should not error on negative `n` values', function() {
var pass = true;
try {
_.times(-1);
} catch(e) {
pass = false;
}
ok(pass);
});
}());
/*--------------------------------------------------------------------------*/