diff --git a/.travis.yml b/.travis.yml index 4d4c9da..e2d7f1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,9 @@ cache: directories: - node_modules node_js: - - 0.12 # to be removed 2016-12-31 - 4 # to be removed 2018-04-01 - 6 # to be removed 2019-04-01 + - 7 # to be removed 2017-06-30 - lts/* # safety net; don't remove - node # safety net; don't remove before_install: diff --git a/index.js b/index.js index 51c9837..19bbfc5 100644 --- a/index.js +++ b/index.js @@ -325,6 +325,20 @@ function iterableEqual(leftHandOperand, rightHandOperand, options) { return false; } } + + var leftHandProps = Object.keys(leftHandOperand); + var rightHandProps = Object.keys(rightHandOperand); + if (leftHandProps.length !== rightHandProps.length) { + return false; + } + + for (var prop in rightHandProps) { + var propName = rightHandProps[prop]; + if (deepEqual(leftHandOperand[propName], rightHandOperand[propName], options) === false) { + return false; + } + } + return true; } diff --git a/test/index.js b/test/index.js index 2aaa29f..24215c7 100644 --- a/test/index.js +++ b/test/index.js @@ -278,6 +278,24 @@ describe('Generic', function () { assert(eql(new Array(1), new Array(100)) === false, 'eql(new Array(1), new Array(100)) === false'); }); + it('returns true for arrays with the same custom properties', function () { + var one = [ 1, 2, 'str' ]; + var two = [ 1, 2, 'str' ]; + one.foo = 'bar'; + two.foo = 'bar'; + + assert(eql(one, two), 'eql([ 0: 1, 1: 2, 2: "str", foo: "bar" ], [ 0: 1, 1: 2, 2: "str", foo: "bar" ])'); + }); + + it('returns false for arrays with different custom properties', function () { + var one = [ 1, 2, 'str' ]; + var two = [ 1, 2, 'str' ]; + one.foo = 'bar'; + two.foo = 'baz'; + + assert(eql(one, two) === false, + 'eql([ 0: 1, 1: 2, 2: "str", foo: "bar" ], [ 0: 1, 1: 2, 2: "str", foo: "baz" ]) === false'); + }); }); describe('objects', function () {