Remove custom toArray checks in _.toArray and simplify array-like object checks in "Collections" methods.

Former-commit-id: 6b7678de16907f44c1b079a22a6a2e091a638d4b
This commit is contained in:
John-David Dalton
2012-09-15 08:46:49 -07:00
parent 837c15e4f9
commit 0e387d2cda
4 changed files with 27 additions and 75 deletions

View File

@@ -466,18 +466,6 @@
equal(_.forEach(collection, Boolean), collection);
});
test('should treat array-like object with invalid `length` as a regular object', function() {
var keys = [],
object = { 'length': -1 };
_.forEach(object, function(value, key) { keys.push(key); });
deepEqual(keys, ['length']);
keys = []; object.length = Math.pow(2, 32);
_.forEach(object, function(value, key) { keys.push(key); });
deepEqual(keys, ['length']);
});
_.each({
'literal': 'abc',
'object': Object('abc')
@@ -1260,22 +1248,6 @@
deepEqual(args, expected);
});
test('should treat array-like object with invalid `length` as a regular object', function() {
var args,
object = { 'a': 1, 'length': -1 },
lastKey = _.keys(object).pop();
var expected = lastKey == 'length'
? [-1, 1, 'a', object]
: [1, -1, 'length', object];
_.reduceRight(object, function() {
args || (args = slice.call(arguments));
});
deepEqual(args, expected);
});
_.each({
'literal': 'abc',
'object': Object('abc')
@@ -1558,27 +1530,12 @@
(function() {
var args = arguments;
_.each({
'an array': ['a', 'b', 'c'],
'a string': Object('abc')
}, function(collection, key) {
test('should call custom `toArray` method of ' + key, function() {
collection.toArray = function() { return [3, 2, 1]; };
deepEqual(_.toArray(collection), [3, 2, 1]);
});
});
test('should treat array-like objects like arrays', function() {
var object = { '0': 'a', '1': 'b', '2': 'c', 'length': 3 };
deepEqual(_.toArray(object), ['a', 'b', 'c']);
deepEqual(_.toArray(args), [1, 2, 3]);
});
test('should treat array-like object with invalid `length` as a regular object', function() {
var object = { 'length': -1 };
deepEqual(_.toArray(object), [-1]);
});
test('should work with a string for `collection` (test in Opera < 10.52)', function() {
deepEqual(_.toArray('abc'), ['a', 'b', 'c']);
deepEqual(_.toArray(Object('abc')), ['a', 'b', 'c']);