From 7829c50f9e89e779980f6d60a397aedfc7eaec61 Mon Sep 17 00:00:00 2001 From: Daniel Luz Date: Mon, 8 Jul 2013 11:00:59 +0100 Subject: fix(angular.equals): do not match keys defined in the prototype chain Merely testing for object[key] will give incorrect results on keys defined in Object.prototype. Note: IE8 is generally broken in this regard since `for...in` never returns certain property keys even if they are defined directly on the object. See #2141 - partially merges this PR --- test/AngularSpec.js | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'test/AngularSpec.js') diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 8fda7a65..bf952249 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -270,6 +270,14 @@ describe('angular', function() { expect(equals(new Date(0), 0)).toBe(false); expect(equals(0, new Date(0))).toBe(false); }); + + it('should correctly test for keys that are present on Object.prototype', function() { + // MS IE8 just doesn't work for this kind of thing, since "for ... in" doesn't return + // things like hasOwnProperty even if it is explicitly defined on the actual object! + if (msie<=8) return; + expect(equals({}, {hasOwnProperty: 1})).toBe(false); + expect(equals({}, {toString: null})).toBe(false); + }); }); describe('size', function() { -- cgit v1.2.3