diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index ba11617f..047e2f10 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -5576,17 +5576,16 @@ getJasmineRequireObj().MatchersUtil = function(j$) { }; function keys(obj, isArray) { - var allKeys = Object.keys - ? Object.keys(obj) - : (function(o) { - var keys = []; - for (var key in o) { - if (j$.util.has(o, key)) { - keys.push(key); - } - } - return keys; - })(obj); + var allKeys = (function(o) { + var keys = []; + for (var key in o) { + if (j$.util.has(o, key)) { + keys.push(key); + } + } + // eslint-disable-next-line compat/compat + return keys.concat(Object.getOwnPropertySymbols(o)); + })(obj); if (!isArray) { return allKeys; diff --git a/spec/core/matchers/toEqualSpec.js b/spec/core/matchers/toEqualSpec.js index 5eed167d..0a4c0643 100644 --- a/spec/core/matchers/toEqualSpec.js +++ b/spec/core/matchers/toEqualSpec.js @@ -1,3 +1,4 @@ +/* eslint-disable compat/compat */ describe('toEqual', function() { 'use strict'; @@ -1039,4 +1040,94 @@ describe('toEqual', function() { expect(compareEquals(actual, expected).message).toEqual(message); }); }); + + // == Symbols == + + describe('Symbols', function() { + it('Fails if Symbol compared to Object', function() { + var sym = Symbol('foo'); + var obj = {}; + + expect(sym).not.toEqual(obj); + }); + + it('Passes Symbol with itself', function() { + var sym = Symbol('foo'); + + expect(sym).toEqual(sym); + }); + + it('Fails if two Symbols with same value are compared', function() { + var symA = Symbol('foo'); + var symB = Symbol('foo'); + + expect(symA).not.toEqual(symB); + }); + + it('Fails if two Symbols with different value are compared', function() { + var symA = Symbol('foo'); + var symB = Symbol('bar'); + + expect(symA).not.toEqual(symB); + }); + + it('Fails if Symbol compared to NaN', function() { + var sym = Symbol('foo'); + + expect(sym).not.toEqual(NaN); + }); + + it('Fails if Symbol compared to Infinity', function() { + var sym = Symbol('foo'); + + expect(sym).not.toEqual(Infinity); + }); + + it('Fails if Symbol compared to String', function() { + var sym = Symbol('foo'); + var str = 'foo'; + + expect(sym).not.toEqual(str); + }); + + it('Fails if Symbol compared to Number', function() { + var sym = Symbol('foo'); + var num = Math.random(); + + expect(sym).not.toEqual(num); + }); + + it('Fails if Symbol compared to Boolean', function() { + var sym = Symbol('foo'); + + expect(sym).not.toEqual(true); + expect(sym).not.toEqual(false); + }); + + it('Fails if Symbol compared to Undefined', function() { + var sym = Symbol('foo'); + + expect(sym).not.toEqual(undefined); + }); + + it('Fails if Symbol compared to null', function() { + var sym = Symbol('foo'); + + expect(sym).not.toEqual(null); + }); + + it('Fails if Symbol compared to []', function() { + var sym = Symbol('foo'); + var arr = ['foo']; + + expect(sym).not.toEqual(arr); + }); + + it('Fails if Symbol compared to Function', function() { + var sym = Symbol('foo'); + var f = function func() {}; + + expect(sym).not.toEqual(f); + }); + }); }); diff --git a/src/core/matchers/matchersUtil.js b/src/core/matchers/matchersUtil.js index 9c9a2c36..c6f297f2 100644 --- a/src/core/matchers/matchersUtil.js +++ b/src/core/matchers/matchersUtil.js @@ -525,17 +525,16 @@ getJasmineRequireObj().MatchersUtil = function(j$) { }; function keys(obj, isArray) { - var allKeys = Object.keys - ? Object.keys(obj) - : (function(o) { - var keys = []; - for (var key in o) { - if (j$.util.has(o, key)) { - keys.push(key); - } - } - return keys; - })(obj); + var allKeys = (function(o) { + var keys = []; + for (var key in o) { + if (j$.util.has(o, key)) { + keys.push(key); + } + } + // eslint-disable-next-line compat/compat + return keys.concat(Object.getOwnPropertySymbols(o)); + })(obj); if (!isArray) { return allKeys;