diff --git a/index.js b/index.js index c4cc274..ada15bf 100644 --- a/index.js +++ b/index.js @@ -392,8 +392,15 @@ function getEnumerableKeys(target) { return keys; } -function getNonEnumerableSymbols(target) { - var keys = Object.getOwnPropertySymbols(target); +function getEnumerableSymbols(target) { + var keys = []; + var allKeys = Object.getOwnPropertySymbols(target); + for (var i = 0; i < allKeys.length; i += 1) { + var key = allKeys[i]; + if (Object.getOwnPropertyDescriptor(target, key).enumerable) { + keys.push(key); + } + } return keys; } @@ -432,8 +439,8 @@ function keysEqual(leftHandOperand, rightHandOperand, keys, options) { function objectEqual(leftHandOperand, rightHandOperand, options) { var leftHandKeys = getEnumerableKeys(leftHandOperand); var rightHandKeys = getEnumerableKeys(rightHandOperand); - var leftHandSymbols = getNonEnumerableSymbols(leftHandOperand); - var rightHandSymbols = getNonEnumerableSymbols(rightHandOperand); + var leftHandSymbols = getEnumerableSymbols(leftHandOperand); + var rightHandSymbols = getEnumerableSymbols(rightHandOperand); leftHandKeys = leftHandKeys.concat(leftHandSymbols); rightHandKeys = rightHandKeys.concat(rightHandSymbols); diff --git a/test/index.js b/test/index.js index 0f8f257..75f2715 100644 --- a/test/index.js +++ b/test/index.js @@ -444,6 +444,16 @@ describe('Generic', function () { objectB = { [symb3]: 'a', [symb2]: 'b' }; assert(eql(objectA, objectB) === true, 'eql(obj, obj)'); }); + + it('ignores non-enumerable symbols', function () { + var symb = Symbol('a'); + var symb2 = Symbol('b'); + var objectA = { [symb]: 'a' }; + Object.defineProperty(objectA, symb2, { value: 'b', enumerable: false }); + var objectB = { [symb]: 'a' }; + Object.defineProperty(objectB, symb2, { value: 'c', enumerable: false }); + assert(eql(objectA, objectB) === true, 'eql(obj, obj)'); + }); });