aboutsummaryrefslogtreecommitdiffstats
path: root/test/unit/core.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/core.js')
-rw-r--r--test/unit/core.js43
1 files changed, 41 insertions, 2 deletions
diff --git a/test/unit/core.js b/test/unit/core.js
index 7c840993b..793677711 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -296,9 +296,9 @@ test("type", function() {
});
asyncTest("isPlainObject", function() {
- expect(15);
+ expect(16);
- var pass, iframe, doc,
+ var pass, iframe, doc, c, extended,
fn = function() {};
// The use case that we want to match
@@ -360,6 +360,45 @@ asyncTest("isPlainObject", function() {
} catch(e) {
window.iframeDone( Object, "iframes not supported" );
}
+
+ // #13571
+ function C() {}
+ C.prototype = {
+ x: 1
+ };
+ c = new C();
+
+ extended = jQuery.extend( true, {}, {
+ target: c
+ });
+
+ strictEqual(
+ extended.target, c,
+ "Instances, whose constructor defined its prototype by assigning a plain object, " +
+ "will lie about their true identity to preserve a broken user-code expectation"
+ );
+ //
+ // The test above is broken and tests a broken feature, to support a misinformed
+ // assumption, as documented here:
+ //
+ // http://bugs.jquery.com/ticket/13571#comment:4
+ //
+ // It will not pass if the object being assigned as the prototype
+ // has no properties:
+ //
+ // function C() {}
+ // C.prototype = {};
+ // c = new C();
+
+ // extended = jQuery.extend( true, {}, {
+ // target: c
+ // });
+
+ // strictEqual( extended.target, c, "Undetectable, will fail every time" );
+ //
+ // The solution is to reset the constructor property of your plain object prototypes.
+ //
+ //
});
test("isFunction", function() {