-var expando = "jQuery" + now(), uuid = 0, windowData = {};\r
-var emptyObject = {};\r
-\r
-jQuery.extend({\r
- cache: {},\r
- \r
- expando:expando,\r
-\r
- data: function( elem, name, data ) {\r
- elem = elem == window ?\r
- windowData :\r
- elem;\r
-\r
- var id = elem[ expando ], cache = jQuery.cache, thisCache;\r
-\r
- // Handle the case where there's no name immediately\r
- if ( !name && !id ) {\r
- return null;\r
- }\r
-\r
- // Compute a unique ID for the element\r
- if ( !id ) { \r
- id = ++uuid;\r
- }\r
-\r
- // Avoid generating a new cache unless none exists and we\r
- // want to manipulate it.\r
- if ( cache[ id ] ) {\r
- thisCache = cache[ id ];\r
- } else if ( typeof data === "undefined" ) {\r
- thisCache = emptyObject;\r
- } else {\r
- thisCache = cache[ id ] = {};\r
- }\r
- \r
- // Prevent overriding the named cache with undefined values\r
- if ( data !== undefined ) {\r
- elem[ expando ] = id;\r
- thisCache[ name ] = data;\r
- }\r
- \r
- return name ? thisCache[ name ] : thisCache;\r
- },\r
-\r
- removeData: function( elem, name ) {\r
- elem = elem == window ?\r
- windowData :\r
- elem;\r
-\r
- var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];\r
-\r
- // If we want to remove a specific section of the element's data\r
- if ( name ) {\r
- if ( thisCache ) {\r
- // Remove the section of cache data\r
- delete thisCache[ name ];\r
-\r
- // If we've removed all the data, remove the element's cache\r
- if ( jQuery.isEmptyObject(thisCache) ) {\r
- jQuery.removeData( elem );\r
- }\r
- }\r
-\r
- // Otherwise, we want to remove all of the element's data\r
- } else {\r
- // Clean up the element expando\r
- try {\r
- delete elem[ expando ];\r
- } catch( e ) {\r
- // IE has trouble directly removing the expando\r
- // but it's ok with using removeAttribute\r
- if ( elem.removeAttribute ) {\r
- elem.removeAttribute( expando );\r
- }\r
- }\r
-\r
- // Completely remove the data cache\r
- delete cache[ id ];\r
- }\r
- },\r
- \r
- queue: function( elem, type, data ) {\r
- if( !elem ) return;\r
-\r
- type = (type || "fx") + "queue";\r
- var q = jQuery.data( elem, type );\r
-\r
- // Speed up dequeue by getting out quickly if this is just a lookup\r
- if( !data ) return q || [];\r
-\r
- if ( !q || jQuery.isArray(data) )\r
- q = jQuery.data( elem, type, jQuery.makeArray(data) );\r
- else\r
- q.push( data );\r
-\r
- return q;\r
- },\r
-\r
- dequeue: function( elem, type ){\r
- type = type || "fx";\r
-\r
- var queue = jQuery.queue( elem, type ), fn = queue.shift();\r
-\r
- // If the fx queue is dequeued, always remove the progress sentinel\r
- if( fn === "inprogress" ) fn = queue.shift();\r
-\r
- if( fn ) {\r
- // Add a progress sentinel to prevent the fx queue from being\r
- // automatically dequeued\r
- if( type == "fx" ) queue.unshift("inprogress");\r
-\r
- fn.call(elem, function() { jQuery.dequeue(elem, type); });\r
- }\r
- }\r
-});\r
-\r
-jQuery.fn.extend({\r
- data: function( key, value ){\r
- if ( typeof key === "undefined" && this.length ) {\r
- return jQuery.data( this[0] );\r
- }\r
-\r
- var parts = key.split(".");\r
- parts[1] = parts[1] ? "." + parts[1] : "";\r
-\r
- if ( value === undefined ) {\r
- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);\r
-\r
- if ( data === undefined && this.length )\r
- data = jQuery.data( this[0], key );\r
-\r
- return data === undefined && parts[1] ?\r
- this.data( parts[0] ) :\r
- data;\r
- } else\r
- return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){\r
- jQuery.data( this, key, value );\r
- });\r
- },\r
-\r
- removeData: function( key ){\r
- return this.each(function(){\r
- jQuery.removeData( this, key );\r
- });\r
- },\r
- queue: function(type, data){\r
- if ( typeof type !== "string" ) {\r
- data = type;\r
- type = "fx";\r
- }\r
-\r
- if ( data === undefined )\r
- return jQuery.queue( this[0], type );\r
-\r
- return this.each(function(i, elem){\r
- var queue = jQuery.queue( this, type, data );\r
-\r
- if( type == "fx" && queue[0] !== "inprogress" )\r
- jQuery.dequeue( this, type )\r
- });\r
- },\r
- dequeue: function(type){\r
- return this.each(function(){\r
- jQuery.dequeue( this, type );\r
- });\r
- },\r
- clearQueue: function(type){\r
- return this.queue( type || "fx", [] );\r
- }\r
-});\r
+var expando = "jQuery" + now(), uuid = 0, windowData = {};
+var emptyObject = {};
+
+jQuery.extend({
+ cache: {},
+
+ expando:expando,
+
+ data: function( elem, name, data ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ], cache = jQuery.cache, thisCache;
+
+ // Handle the case where there's no name immediately
+ if ( !name && !id ) {
+ return null;
+ }
+
+ // Compute a unique ID for the element
+ if ( !id ) {
+ id = ++uuid;
+ }
+
+ // Avoid generating a new cache unless none exists and we
+ // want to manipulate it.
+ if ( cache[ id ] ) {
+ thisCache = cache[ id ];
+ } else if ( typeof data === "undefined" ) {
+ thisCache = emptyObject;
+ } else {
+ thisCache = cache[ id ] = {};
+ }
+
+ // Prevent overriding the named cache with undefined values
+ if ( data !== undefined ) {
+ elem[ expando ] = id;
+ thisCache[ name ] = data;
+ }
+
+ return name ? thisCache[ name ] : thisCache;
+ },
+
+ removeData: function( elem, name ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( thisCache ) {
+ // Remove the section of cache data
+ delete thisCache[ name ];
+
+ // If we've removed all the data, remove the element's cache
+ if ( jQuery.isEmptyObject(thisCache) ) {
+ jQuery.removeData( elem );
+ }
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ // Clean up the element expando
+ try {
+ delete elem[ expando ];
+ } catch( e ) {
+ // IE has trouble directly removing the expando
+ // but it's ok with using removeAttribute
+ if ( elem.removeAttribute ) {
+ elem.removeAttribute( expando );
+ }
+ }
+
+ // Completely remove the data cache
+ delete cache[ id ];
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ if( !elem ) return;
+
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if( !data ) return q || [];
+
+ if ( !q || jQuery.isArray(data) )
+ q = jQuery.data( elem, type, jQuery.makeArray(data) );
+ else
+ q.push( data );
+
+ return q;
+ },
+
+ dequeue: function( elem, type ){
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if( fn === "inprogress" ) fn = queue.shift();
+
+ if( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if( type == "fx" ) queue.unshift("inprogress");
+
+ fn.call(elem, function() { jQuery.dequeue(elem, type); });
+ }
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ){
+ if ( typeof key === "undefined" && this.length ) {
+ return jQuery.data( this[0] );
+ }
+
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ if ( data === undefined && this.length )
+ data = jQuery.data( this[0], key );
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ } else
+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
+ jQuery.data( this, key, value );
+ });
+ },
+
+ removeData: function( key ){
+ return this.each(function(){
+ jQuery.removeData( this, key );
+ });
+ },
+ queue: function(type, data){
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined )
+ return jQuery.queue( this[0], type );
+
+ return this.each(function(i, elem){
+ var queue = jQuery.queue( this, type, data );
+
+ if( type == "fx" && queue[0] !== "inprogress" )
+ jQuery.dequeue( this, type )
+ });
+ },
+ dequeue: function(type){
+ return this.each(function(){
+ jQuery.dequeue( this, type );
+ });
+ },
+ clearQueue: function(type){
+ return this.queue( type || "fx", [] );
+ }
+});
-module("data");\r
-\r
-test("expando", function(){\r
- expect(7);\r
- \r
- equals("expando" in jQuery, true, "jQuery is exposing the expando");\r
- \r
- var obj = {};\r
- jQuery.data(obj);\r
- equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );\r
- \r
- jQuery.data(obj, true);\r
- equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );\r
- \r
- jQuery.data(obj, 'test');\r
- equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );\r
- \r
- jQuery.data(obj, "foo", "bar");\r
- equals( jQuery.expando in obj, true, "jQuery.data added an expando to the object" );\r
- \r
- var id = obj[jQuery.expando];\r
- equals( id in jQuery.cache, true, "jQuery.data added an entry to jQuery.cache" );\r
- \r
- equals( jQuery.cache[id].foo, "bar", "jQuery.data worked correctly" );\r
-});\r
-\r
-test("jQuery.data", function() {\r
- expect(6);\r
- var div = jQuery("#foo")[0];\r
- equals( jQuery.data(div, "test"), undefined, "Check for no data exists" );\r
- \r
- jQuery.data(div, "test", "success");\r
- equals( jQuery.data(div, "test"), "success", "Check for added data" );\r
- \r
- var data = jQuery.data(div);\r
- same( data, { "test": "success" }, "Return complete data set" );\r
- \r
- jQuery.data(div, "test", "overwritten");\r
- equals( jQuery.data(div, "test"), "overwritten", "Check for overwritten data" );\r
- \r
- jQuery.data(div, "test", undefined);\r
- equals( jQuery.data(div, "test"), "overwritten", "Check that data wasn't removed");\r
- \r
- jQuery.data(div, "test", null);\r
- ok( jQuery.data(div, "test") === null, "Check for null data");\r
-});\r
-\r
-test(".data()", function() {\r
- expect(1);\r
-\r
- var div = jQuery("#foo");\r
- div.data("test", "success");\r
- same( div.data(), {test: "success"}, "data() get the entire data object" )\r
-})\r
-\r
-test(".data(String) and .data(String, Object)", function() {\r
- expect(22);\r
- var div = jQuery("#foo");\r
- equals( div.data("test"), undefined, "Check for no data exists" );\r
- div.data("test", "success");\r
- equals( div.data("test"), "success", "Check for added data" );\r
- div.data("test", "overwritten");\r
- equals( div.data("test"), "overwritten", "Check for overwritten data" );\r
- div.data("test", undefined);\r
- equals( div.data("test"), "overwritten", "Check that data wasn't removed");\r
- div.data("test", null);\r
- ok( div.data("test") === null, "Check for null data");\r
-\r
- div.data("test", "overwritten");\r
- var hits = {test:0}, gets = {test:0};\r
-\r
- div\r
- .bind("setData",function(e,key,value){ hits[key] += value; })\r
- .bind("setData.foo",function(e,key,value){ hits[key] += value; })\r
- .bind("getData",function(e,key){ gets[key] += 1; })\r
- .bind("getData.foo",function(e,key){ gets[key] += 3; });\r
-\r
- div.data("test.foo", 2);\r
- equals( div.data("test"), "overwritten", "Check for original data" );\r
- equals( div.data("test.foo"), 2, "Check for namespaced data" );\r
- equals( div.data("test.bar"), "overwritten", "Check for unmatched namespace" );\r
- equals( hits.test, 2, "Check triggered setter functions" );\r
- equals( gets.test, 5, "Check triggered getter functions" );\r
-\r
- hits.test = 0;\r
- gets.test = 0;\r
-\r
- div.data("test", 1);\r
- equals( div.data("test"), 1, "Check for original data" );\r
- equals( div.data("test.foo"), 2, "Check for namespaced data" );\r
- equals( div.data("test.bar"), 1, "Check for unmatched namespace" );\r
- equals( hits.test, 1, "Check triggered setter functions" );\r
- equals( gets.test, 5, "Check triggered getter functions" );\r
-\r
- hits.test = 0;\r
- gets.test = 0;\r
-\r
- div\r
- .bind("getData",function(e,key){ return key + "root"; })\r
- .bind("getData.foo",function(e,key){ return key + "foo"; });\r
-\r
- equals( div.data("test"), "testroot", "Check for original data" );\r
- equals( div.data("test.foo"), "testfoo", "Check for namespaced data" );\r
- equals( div.data("test.bar"), "testroot", "Check for unmatched namespace" );\r
- \r
- // #3748\r
- var $elem = jQuery({});\r
- equals( $elem.data('nothing'), undefined, "Non-existent data returns undefined");\r
- equals( $elem.data('null',null).data('null'), null, "null's are preserved");\r
- equals( $elem.data('emptyString','').data('emptyString'), '', "Empty strings are preserved");\r
- equals( $elem.data('false',false).data('false'), false, "false's are preserved");\r
- \r
- // Clean up\r
- $elem.removeData();\r
-});\r
-\r
-test("jQuery.removeData", function() {\r
- expect(1);\r
- var div = jQuery("#foo")[0];\r
- jQuery.data(div, "test", "testing");\r
- jQuery.removeData(div, "test");\r
- equals( jQuery.data(div, "test"), undefined, "Check removal of data" );\r
-});\r
-\r
-test(".removeData()", function() {\r
- expect(6);\r
- var div = jQuery("#foo");\r
- div.data("test", "testing");\r
- div.removeData("test");\r
- equals( div.data("test"), undefined, "Check removal of data" );\r
-\r
- div.data("test", "testing");\r
- div.data("test.foo", "testing2");\r
- div.removeData("test.bar");\r
- equals( div.data("test.foo"), "testing2", "Make sure data is intact" );\r
- equals( div.data("test"), "testing", "Make sure data is intact" );\r
-\r
- div.removeData("test");\r
- equals( div.data("test.foo"), "testing2", "Make sure data is intact" );\r
- equals( div.data("test"), undefined, "Make sure data is intact" );\r
-\r
- div.removeData("test.foo");\r
- equals( div.data("test.foo"), undefined, "Make sure data is intact" );\r
-});\r
-\r
-test("queue() defaults to 'fx' type", function () {\r
- expect(1);\r
- stop();\r
-\r
- var counter = 0;\r
-\r
- var $foo = jQuery("#foo");\r
-\r
- $foo.queue(function() {\r
- var self = this;\r
- setTimeout(function() {\r
- jQuery(self).dequeue("fx");\r
- start();\r
- }, 200);\r
- }).queue(function() {\r
- ok( "dequeuing 'fx' calls queues created with no name" )\r
- });\r
-\r
-});\r
-\r
-test("queue() with other types",function() {\r
- expect(9);\r
- var counter = 0;\r
- \r
- var $div = jQuery({});\r
- \r
- $div\r
- .queue('foo',function(){\r
- equals( ++counter, 1, "Dequeuing" );\r
- jQuery.dequeue(this,'foo');\r
- })\r
- .queue('foo',function(){\r
- equals( ++counter, 2, "Dequeuing" );\r
- jQuery(this).dequeue('foo');\r
- })\r
- .queue('foo',function(){\r
- equals( ++counter, 3, "Dequeuing" );\r
- })\r
- .queue('foo',function(){\r
- equals( ++counter, 4, "Dequeuing" );\r
- });\r
- \r
- equals( $div.queue('foo').length, 4, "Testing queue length" );\r
- \r
- $div.dequeue('foo');\r
- \r
- equals( counter, 3, "Testing previous call to dequeue" );\r
- equals( $div.queue('foo').length, 1, "Testing queue length" );\r
- \r
- $div.dequeue('foo');\r
- \r
- equals( counter, 4, "Testing previous call to dequeue" );\r
- equals( $div.queue('foo').length, 0, "Testing queue length" );\r
-});\r
-\r
-test("queue(name) passes in the next item in the queue as a parameter", function() {\r
- expect(2);\r
- \r
- var div = jQuery({});\r
- var counter = 0;\r
- \r
- div.queue("foo", function(next) {\r
- equals(++counter, 1, "Dequeueing");\r
- next();\r
- }).queue("foo", function(next) {\r
- equals(++counter, 2, "Next was called");\r
- next();\r
- }).queue("bar", function() {\r
- equals(++counter, 3, "Other queues are not triggered by next()")\r
- });\r
- \r
- div.dequeue("foo");\r
-});\r
-\r
-test("queue(name) passes in the next item in the queue as a parameter", function() {\r
- expect(2);\r
- \r
- var div = jQuery({});\r
- var counter = 0;\r
- \r
- div.queue("foo", function(next) {\r
- equals(++counter, 1, "Dequeueing");\r
- next();\r
- }).queue("foo", function(next) {\r
- equals(++counter, 2, "Next was called");\r
- next();\r
- }).queue("bar", function() {\r
- equals(++counter, 3, "Other queues are not triggered by next()")\r
- });\r
- \r
- div.dequeue("foo");\r
-});\r
-\r
-test("queue() passes in the next item in the queue as a parameter to fx queues", function() {\r
- expect(2);\r
- stop();\r
- \r
- var div = jQuery({});\r
- var counter = 0;\r
- \r
- div.queue(function(next) {\r
- equals(++counter, 1, "Dequeueing");\r
- var self = this;\r
- setTimeout(function() { next() }, 500);\r
- }).queue(function(next) {\r
- equals(++counter, 2, "Next was called");\r
- next();\r
- start();\r
- }).queue("bar", function() {\r
- equals(++counter, 3, "Other queues are not triggered by next()")\r
- });\r
-\r
-});\r
-\r
-test("clearQueue(name) clears the queue", function() {\r
- expect(1);\r
- \r
- var div = jQuery({});\r
- var counter = 0;\r
- \r
- div.queue("foo", function(next) {\r
- counter++;\r
- jQuery(this).clearQueue("foo");\r
- next();\r
- }).queue("foo", function(next) {\r
- counter++;\r
- });\r
- \r
- div.dequeue("foo");\r
- \r
- equals(counter, 1, "the queue was cleared");\r
-});\r
-\r
-test("clearQueue() clears the fx queue", function() {\r
- expect(1);\r
- \r
- var div = jQuery({});\r
- var counter = 0;\r
- \r
- div.queue(function(next) {\r
- counter++;\r
- var self = this;\r
- setTimeout(function() { jQuery(self).clearQueue(); next(); }, 50);\r
- }).queue(function(next) {\r
- counter++;\r
- });\r
- \r
- equals(counter, 1, "the queue was cleared");\r
- \r
- div.removeData();\r
-});\r
+module("data");
+
+test("expando", function(){
+ expect(7);
+
+ equals("expando" in jQuery, true, "jQuery is exposing the expando");
+
+ var obj = {};
+ jQuery.data(obj);
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
+ jQuery.data(obj, true);
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
+ jQuery.data(obj, 'test');
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
+ jQuery.data(obj, "foo", "bar");
+ equals( jQuery.expando in obj, true, "jQuery.data added an expando to the object" );
+
+ var id = obj[jQuery.expando];
+ equals( id in jQuery.cache, true, "jQuery.data added an entry to jQuery.cache" );
+
+ equals( jQuery.cache[id].foo, "bar", "jQuery.data worked correctly" );
+});
+
+test("jQuery.data", function() {
+ expect(6);
+ var div = jQuery("#foo")[0];
+ equals( jQuery.data(div, "test"), undefined, "Check for no data exists" );
+
+ jQuery.data(div, "test", "success");
+ equals( jQuery.data(div, "test"), "success", "Check for added data" );
+
+ var data = jQuery.data(div);
+ same( data, { "test": "success" }, "Return complete data set" );
+
+ jQuery.data(div, "test", "overwritten");
+ equals( jQuery.data(div, "test"), "overwritten", "Check for overwritten data" );
+
+ jQuery.data(div, "test", undefined);
+ equals( jQuery.data(div, "test"), "overwritten", "Check that data wasn't removed");
+
+ jQuery.data(div, "test", null);
+ ok( jQuery.data(div, "test") === null, "Check for null data");
+});
+
+test(".data()", function() {
+ expect(1);
+
+ var div = jQuery("#foo");
+ div.data("test", "success");
+ same( div.data(), {test: "success"}, "data() get the entire data object" )
+})
+
+test(".data(String) and .data(String, Object)", function() {
+ expect(22);
+ var div = jQuery("#foo");
+ equals( div.data("test"), undefined, "Check for no data exists" );
+ div.data("test", "success");
+ equals( div.data("test"), "success", "Check for added data" );
+ div.data("test", "overwritten");
+ equals( div.data("test"), "overwritten", "Check for overwritten data" );
+ div.data("test", undefined);
+ equals( div.data("test"), "overwritten", "Check that data wasn't removed");
+ div.data("test", null);
+ ok( div.data("test") === null, "Check for null data");
+
+ div.data("test", "overwritten");
+ var hits = {test:0}, gets = {test:0};
+
+ div
+ .bind("setData",function(e,key,value){ hits[key] += value; })
+ .bind("setData.foo",function(e,key,value){ hits[key] += value; })
+ .bind("getData",function(e,key){ gets[key] += 1; })
+ .bind("getData.foo",function(e,key){ gets[key] += 3; });
+
+ div.data("test.foo", 2);
+ equals( div.data("test"), "overwritten", "Check for original data" );
+ equals( div.data("test.foo"), 2, "Check for namespaced data" );
+ equals( div.data("test.bar"), "overwritten", "Check for unmatched namespace" );
+ equals( hits.test, 2, "Check triggered setter functions" );
+ equals( gets.test, 5, "Check triggered getter functions" );
+
+ hits.test = 0;
+ gets.test = 0;
+
+ div.data("test", 1);
+ equals( div.data("test"), 1, "Check for original data" );
+ equals( div.data("test.foo"), 2, "Check for namespaced data" );
+ equals( div.data("test.bar"), 1, "Check for unmatched namespace" );
+ equals( hits.test, 1, "Check triggered setter functions" );
+ equals( gets.test, 5, "Check triggered getter functions" );
+
+ hits.test = 0;
+ gets.test = 0;
+
+ div
+ .bind("getData",function(e,key){ return key + "root"; })
+ .bind("getData.foo",function(e,key){ return key + "foo"; });
+
+ equals( div.data("test"), "testroot", "Check for original data" );
+ equals( div.data("test.foo"), "testfoo", "Check for namespaced data" );
+ equals( div.data("test.bar"), "testroot", "Check for unmatched namespace" );
+
+ // #3748
+ var $elem = jQuery({});
+ equals( $elem.data('nothing'), undefined, "Non-existent data returns undefined");
+ equals( $elem.data('null',null).data('null'), null, "null's are preserved");
+ equals( $elem.data('emptyString','').data('emptyString'), '', "Empty strings are preserved");
+ equals( $elem.data('false',false).data('false'), false, "false's are preserved");
+
+ // Clean up
+ $elem.removeData();
+});
+
+test("jQuery.removeData", function() {
+ expect(1);
+ var div = jQuery("#foo")[0];
+ jQuery.data(div, "test", "testing");
+ jQuery.removeData(div, "test");
+ equals( jQuery.data(div, "test"), undefined, "Check removal of data" );
+});
+
+test(".removeData()", function() {
+ expect(6);
+ var div = jQuery("#foo");
+ div.data("test", "testing");
+ div.removeData("test");
+ equals( div.data("test"), undefined, "Check removal of data" );
+
+ div.data("test", "testing");
+ div.data("test.foo", "testing2");
+ div.removeData("test.bar");
+ equals( div.data("test.foo"), "testing2", "Make sure data is intact" );
+ equals( div.data("test"), "testing", "Make sure data is intact" );
+
+ div.removeData("test");
+ equals( div.data("test.foo"), "testing2", "Make sure data is intact" );
+ equals( div.data("test"), undefined, "Make sure data is intact" );
+
+ div.removeData("test.foo");
+ equals( div.data("test.foo"), undefined, "Make sure data is intact" );
+});
+
+test("queue() defaults to 'fx' type", function () {
+ expect(1);
+ stop();
+
+ var counter = 0;
+
+ var $foo = jQuery("#foo");
+
+ $foo.queue(function() {
+ var self = this;
+ setTimeout(function() {
+ jQuery(self).dequeue("fx");
+ start();
+ }, 200);
+ }).queue(function() {
+ ok( "dequeuing 'fx' calls queues created with no name" )
+ });
+
+});
+
+test("queue() with other types",function() {
+ expect(9);
+ var counter = 0;
+
+ var $div = jQuery({});
+
+ $div
+ .queue('foo',function(){
+ equals( ++counter, 1, "Dequeuing" );
+ jQuery.dequeue(this,'foo');
+ })
+ .queue('foo',function(){
+ equals( ++counter, 2, "Dequeuing" );
+ jQuery(this).dequeue('foo');
+ })
+ .queue('foo',function(){
+ equals( ++counter, 3, "Dequeuing" );
+ })
+ .queue('foo',function(){
+ equals( ++counter, 4, "Dequeuing" );
+ });
+
+ equals( $div.queue('foo').length, 4, "Testing queue length" );
+
+ $div.dequeue('foo');
+
+ equals( counter, 3, "Testing previous call to dequeue" );
+ equals( $div.queue('foo').length, 1, "Testing queue length" );
+
+ $div.dequeue('foo');
+
+ equals( counter, 4, "Testing previous call to dequeue" );
+ equals( $div.queue('foo').length, 0, "Testing queue length" );
+});
+
+test("queue(name) passes in the next item in the queue as a parameter", function() {
+ expect(2);
+
+ var div = jQuery({});
+ var counter = 0;
+
+ div.queue("foo", function(next) {
+ equals(++counter, 1, "Dequeueing");
+ next();
+ }).queue("foo", function(next) {
+ equals(++counter, 2, "Next was called");
+ next();
+ }).queue("bar", function() {
+ equals(++counter, 3, "Other queues are not triggered by next()")
+ });
+
+ div.dequeue("foo");
+});
+
+test("queue(name) passes in the next item in the queue as a parameter", function() {
+ expect(2);
+
+ var div = jQuery({});
+ var counter = 0;
+
+ div.queue("foo", function(next) {
+ equals(++counter, 1, "Dequeueing");
+ next();
+ }).queue("foo", function(next) {
+ equals(++counter, 2, "Next was called");
+ next();
+ }).queue("bar", function() {
+ equals(++counter, 3, "Other queues are not triggered by next()")
+ });
+
+ div.dequeue("foo");
+});
+
+test("queue() passes in the next item in the queue as a parameter to fx queues", function() {
+ expect(2);
+ stop();
+
+ var div = jQuery({});
+ var counter = 0;
+
+ div.queue(function(next) {
+ equals(++counter, 1, "Dequeueing");
+ var self = this;
+ setTimeout(function() { next() }, 500);
+ }).queue(function(next) {
+ equals(++counter, 2, "Next was called");
+ next();
+ start();
+ }).queue("bar", function() {
+ equals(++counter, 3, "Other queues are not triggered by next()")
+ });
+
+});
+
+test("clearQueue(name) clears the queue", function() {
+ expect(1);
+
+ var div = jQuery({});
+ var counter = 0;
+
+ div.queue("foo", function(next) {
+ counter++;
+ jQuery(this).clearQueue("foo");
+ next();
+ }).queue("foo", function(next) {
+ counter++;
+ });
+
+ div.dequeue("foo");
+
+ equals(counter, 1, "the queue was cleared");
+});
+
+test("clearQueue() clears the fx queue", function() {
+ expect(1);
+
+ var div = jQuery({});
+ var counter = 0;
+
+ div.queue(function(next) {
+ counter++;
+ var self = this;
+ setTimeout(function() { jQuery(self).clearQueue(); next(); }, 50);
+ }).queue(function(next) {
+ counter++;
+ });
+
+ equals(counter, 1, "the queue was cleared");
+
+ div.removeData();
+});