Skip to content
Permalink
Browse files

Fixes #13815: Ensure each element has its own private data object - T…

…ests by @rwldrn
  • Loading branch information...
gnarf committed Apr 24, 2013
1 parent 3a61940 commit 55e319aa52eb828a3a4c2298aa75b6d15cfa06f8
Showing with 16 additions and 9 deletions.
  1. +3 −6 src/data.js
  2. +1 −3 src/manipulation.js
  3. +12 −0 test/unit/data.js
@@ -90,20 +90,17 @@ Data.prototype = {

// Handle: [ owner, { properties } ] args
} else {
// Support an expectation from the old data system where plain
// objects used to initialize would be set to the cache by
// reference, instead of having properties and values copied.
// Note, this will kill the connection between
// "this.cache[ unlock ]" and "cache"
// Fresh assignments by object are shallow copied
if ( jQuery.isEmptyObject( cache ) ) {
this.cache[ unlock ] = data;
jQuery.extend( this.cache[ unlock ], data );
// Otherwise, copy the properties one-by-one to the cache object
} else {
for ( prop in data ) {
cache[ prop ] = data[ prop ];
}
}
}
return cache;
},
get: function( owner, key ) {
// Either a valid cache is found, or will be created.
@@ -527,11 +527,9 @@ function cloneCopyEvent( src, dest ) {
// 1. Copy private data: events, handlers, etc.
if ( data_priv.hasData( src ) ) {
pdataOld = data_priv.access( src );
pdataCur = jQuery.extend( {}, pdataOld );
pdataCur = data_priv.set( dest, pdataOld );
events = pdataOld.events;

data_priv.set( dest, pdataCur );

if ( events ) {
delete pdataCur.handle;
pdataCur.events = {};
@@ -244,6 +244,18 @@ test("jQuery(plain Object).data(String, Object).data(String)", function() {
deepEqual( $obj[0], { exists: true }, "removeData does not clear the object" );
});

test(".data(object) does not retain references. #13815", function() {
expect( 2 );

var $divs = jQuery("<div></div><div></div>").appendTo("#qunit-fixture");

$divs.data({ "type": "foo" });
$divs.eq( 0 ).data( "type", "bar" );

equal( $divs.eq( 0 ).data("type"), "bar", "Correct updated value" );
equal( $divs.eq( 1 ).data("type"), "foo", "Original value retained" );
});

test("data-* attributes", function() {
expect(40);
var prop, i, l, metadata, elem,

0 comments on commit 55e319a

Please sign in to comment.
You can’t perform that action at this time.