import _isArrayLike from '../check/isArrayLike'
const eq = (x, y) => expect(x).toEqual(y)
describe('isArrayLike', () => {
it('is true for Arrays', () => {
eq(_isArrayLike([]), true)
eq(_isArrayLike([1, 2, 3, 4]), true)
eq(_isArrayLike([null]), true)
})
it('is true for arguments', () => {
function test() {
return _isArrayLike(arguments)
}
eq(test(), true)
eq(test(1, 2, 3), true)
eq(test(null), true)
})
it('is false for Strings', () => {
eq(_isArrayLike(''), false)
eq(_isArrayLike('abcdefg'), false)
})
it('is true for arbitrary objects with numeric length, if extreme indices are defined', () => {
const obj1 = { length: 0 }
const obj2 = { 0: 'something', length: 0 }
const obj3 = { 0: void 0, length: 0 }
const obj4 = { 0: 'zero', 1: 'one', length: 2 }
const obj5 = { 0: 'zero', length: 2 }
const obj6 = { 1: 'one', length: 2 }
eq(_isArrayLike(obj1), true)
eq(_isArrayLike(obj2), true)
eq(_isArrayLike(obj3), true)
eq(_isArrayLike(obj4), true)
eq(_isArrayLike(obj5), false)
eq(_isArrayLike(obj6), false)
})
it('is false for everything else', () => {
eq(_isArrayLike(undefined), false)
eq(_isArrayLike(1), false)
eq(_isArrayLike({}), false)
eq(_isArrayLike(false), false)
eq(_isArrayLike(() => {}), false)
})
})