From 63317eb474a75b64ee5b0667ecdbf1e49d637d18 Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Thu, 3 Mar 2016 18:29:45 -0500 Subject: [PATCH] Core: restore enumeration behavior in isPlainObject Fixes gh-2968 Close gh-2970 --- test/unit/core.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/test/unit/core.js b/test/unit/core.js index a0cf715cf..97fc031d9 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -328,13 +328,21 @@ QUnit.test( "type for `Symbol`", function( assert ) { } ); QUnit.asyncTest( "isPlainObject", function( assert ) { - assert.expect( 16 ); + assert.expect( 20 ); - var pass, iframe, doc, + var pass, iframe, doc, parentObj, childObj, deep, fn = function() {}; // The use case that we want to match assert.ok( jQuery.isPlainObject( {} ), "{}" ); + assert.ok( jQuery.isPlainObject( new window.Object() ), "new Object" ); + + parentObj = { foo: "bar" }; + childObj = Object.create( parentObj ); + + assert.ok( !jQuery.isPlainObject( childObj ), "isPlainObject(Object.create({}))" ); + childObj.bar = "foo"; + assert.ok( !jQuery.isPlainObject( childObj ), "isPlainObject(Object.create({}))" ); // Not objects shouldn't be matched assert.ok( !jQuery.isPlainObject( "" ), "string" ); @@ -372,6 +380,10 @@ QUnit.asyncTest( "isPlainObject", function( assert ) { assert.ok( !jQuery.isPlainObject( new fn() ), "fn (inherited and own properties)" ); + // Deep object + deep = { "foo": { "baz": true }, "foo2": document }; + assert.ok( jQuery.isPlainObject( deep ), "Object with objects is still plain" ); + // DOM Element assert.ok( !jQuery.isPlainObject( document.createElement( "div" ) ), "DOM Element" ); -- 2.39.5