aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/data.js340
-rw-r--r--test/data/json.php16
-rw-r--r--test/data/jsonp.php20
-rw-r--r--test/data/name.php56
-rw-r--r--test/data/params_html.php22
-rw-r--r--test/data/test.js6
-rw-r--r--test/polluted.php128
-rw-r--r--test/unit/data.js592
8 files changed, 590 insertions, 590 deletions
diff --git a/src/data.js b/src/data.js
index 500f7ea43..8fa62dc1e 100644
--- a/src/data.js
+++ b/src/data.js
@@ -1,170 +1,170 @@
-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", [] );
- }
-});
+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", [] );
+ }
+});
diff --git a/test/data/json.php b/test/data/json.php
index 08e3f9e32..d19a41792 100644
--- a/test/data/json.php
+++ b/test/data/json.php
@@ -1,9 +1,9 @@
-<?php
-error_reporting(0);
-$json = $_REQUEST['json'];
-if($json) {
- echo '[ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ]';
-} else {
- echo '{ "data": {"lang": "en", "length": 25} }';
-}
+<?php
+error_reporting(0);
+$json = $_REQUEST['json'];
+if($json) {
+ echo '[ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ]';
+} else {
+ echo '{ "data": {"lang": "en", "length": 25} }';
+}
?> \ No newline at end of file
diff --git a/test/data/jsonp.php b/test/data/jsonp.php
index 75000252b..9ae1d8487 100644
--- a/test/data/jsonp.php
+++ b/test/data/jsonp.php
@@ -1,10 +1,10 @@
-<?php
-error_reporting(0);
-$callback = $_REQUEST['callback'];
-$json = $_REQUEST['json'];
-if($json) {
- echo $callback . '([ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ])';
-} else {
- echo $callback . '({ "data": {"lang": "en", "length": 25} })';
-}
-?>
+<?php
+error_reporting(0);
+$callback = $_REQUEST['callback'];
+$json = $_REQUEST['json'];
+if($json) {
+ echo $callback . '([ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ])';
+} else {
+ echo $callback . '({ "data": {"lang": "en", "length": 25} })';
+}
+?>
diff --git a/test/data/name.php b/test/data/name.php
index a4b990e3d..ee22e4582 100644
--- a/test/data/name.php
+++ b/test/data/name.php
@@ -1,29 +1,29 @@
-<?php
-error_reporting(0);
-$wait = $_REQUEST['wait'];
-if($wait) {
- sleep($wait);
-}
-$xml = $_REQUEST['xml'];
-if($xml) {
- header("Content-type: text/xml");
- $result = ($xml == "5-2") ? "3" : "?";
- echo "<math><calculation>$xml</calculation><result>$result</result></math>";
- die();
-}
-$name = $_REQUEST['name'];
-if($name == 'foo') {
- echo "bar";
- die();
-} else if($name == 'peter') {
- echo "pan";
- die();
-}
-$request = apache_request_headers();
-$request = $request['X-Custom-Header'];
-if(strlen($request) > 0) {
- echo $request;
- die();
-}
-echo 'ERROR <script type="text/javascript">ok( true, "name.php executed" );</script>';
+<?php
+error_reporting(0);
+$wait = $_REQUEST['wait'];
+if($wait) {
+ sleep($wait);
+}
+$xml = $_REQUEST['xml'];
+if($xml) {
+ header("Content-type: text/xml");
+ $result = ($xml == "5-2") ? "3" : "?";
+ echo "<math><calculation>$xml</calculation><result>$result</result></math>";
+ die();
+}
+$name = $_REQUEST['name'];
+if($name == 'foo') {
+ echo "bar";
+ die();
+} else if($name == 'peter') {
+ echo "pan";
+ die();
+}
+$request = apache_request_headers();
+$request = $request['X-Custom-Header'];
+if(strlen($request) > 0) {
+ echo $request;
+ die();
+}
+echo 'ERROR <script type="text/javascript">ok( true, "name.php executed" );</script>';
?> \ No newline at end of file
diff --git a/test/data/params_html.php b/test/data/params_html.php
index e170e8a93..0bab00f29 100644
--- a/test/data/params_html.php
+++ b/test/data/params_html.php
@@ -1,12 +1,12 @@
-<div id="post">
-<?php
- foreach( $_POST as $key=>$value )
- echo "<b id='$key'>$value</b>";
-?>
-</div>
-<div id="get">
-<?php
- foreach( $_GET as $key=>$value )
- echo "<b id='$key'>$value</b>";
-?>
+<div id="post">
+<?php
+ foreach( $_POST as $key=>$value )
+ echo "<b id='$key'>$value</b>";
+?>
+</div>
+<div id="get">
+<?php
+ foreach( $_GET as $key=>$value )
+ echo "<b id='$key'>$value</b>";
+?>
</div> \ No newline at end of file
diff --git a/test/data/test.js b/test/data/test.js
index a41cb232b..69f492dcc 100644
--- a/test/data/test.js
+++ b/test/data/test.js
@@ -1,3 +1,3 @@
-var foobar = "bar";
-jQuery('#ap').html('bar');
-ok( true, "test.js executed");
+var foobar = "bar";
+jQuery('#ap').html('bar');
+ok( true, "test.js executed");
diff --git a/test/polluted.php b/test/polluted.php
index ebe450906..3ddb7acd2 100644
--- a/test/polluted.php
+++ b/test/polluted.php
@@ -1,64 +1,64 @@
-<?php
- if( count($_POST) ){ // second call
- $includes = array();
- foreach( $_POST as $lib=>$ver ){
- if( !$ver )
- continue;
- $include = "<script type='text/javascript' src='otherlibs/$lib/$ver/$lib.js'></script>\n";
- if( $lib == 'prototype' ) // prototype must be included first
- array_unshift( $includes, $include );
- else
- array_push( $includes, $include );
- }
-
- $includes = implode( "\n", $includes );
- $suite = file_get_contents('index.html');
- echo str_replace( '<!-- Includes -->', $includes, $suite );
- exit;
- }
-?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>jQuery Test Suite</title>
- <link rel="Stylesheet" media="screen" href="qunit/testsuite.css" />
- <link rel="Stylesheet" media="screen" href="data/otherlibs.css" />
- <style type="text/css">
- form.otherlibs{
- margin: 20px 0 0 30px;
- }
- form.otherlibs label{
- display:block;
- margin: 5px 0 5px 30px;
- }
- form.otherlibs input.submit{
- margin:30px 0 0 0;
- }
- </style>
-</head>
-
-<body id="body">
- <h1 id="header">jQuery Test Suite</h1>
- <h2 id="banner" class="fail"></h2>
- <h2 id="userAgent">Choose other libraries to include</h2>
-
- <form class="otherlibs" action="" method="post">
- <?php
- $libs = scandir('otherlibs');
- foreach( $libs as $lib ){
- if( $lib[0] == '.' )
- continue;
- echo "<h3>$lib</h3>";
- $vers = scandir( "otherlibs/$lib");
- foreach( $vers as $ver ){
- if( $ver[0] != '.' )
- echo "<label><input type='checkbox' name='$lib' value='$ver'>$ver</label>";
- }
- }
- ?>
- <input type="submit" value="Run" class="submit" />
- </form>
-</body>
-</html>
+<?php
+ if( count($_POST) ){ // second call
+ $includes = array();
+ foreach( $_POST as $lib=>$ver ){
+ if( !$ver )
+ continue;
+ $include = "<script type='text/javascript' src='otherlibs/$lib/$ver/$lib.js'></script>\n";
+ if( $lib == 'prototype' ) // prototype must be included first
+ array_unshift( $includes, $include );
+ else
+ array_push( $includes, $include );
+ }
+
+ $includes = implode( "\n", $includes );
+ $suite = file_get_contents('index.html');
+ echo str_replace( '<!-- Includes -->', $includes, $suite );
+ exit;
+ }
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>jQuery Test Suite</title>
+ <link rel="Stylesheet" media="screen" href="qunit/testsuite.css" />
+ <link rel="Stylesheet" media="screen" href="data/otherlibs.css" />
+ <style type="text/css">
+ form.otherlibs{
+ margin: 20px 0 0 30px;
+ }
+ form.otherlibs label{
+ display:block;
+ margin: 5px 0 5px 30px;
+ }
+ form.otherlibs input.submit{
+ margin:30px 0 0 0;
+ }
+ </style>
+</head>
+
+<body id="body">
+ <h1 id="header">jQuery Test Suite</h1>
+ <h2 id="banner" class="fail"></h2>
+ <h2 id="userAgent">Choose other libraries to include</h2>
+
+ <form class="otherlibs" action="" method="post">
+ <?php
+ $libs = scandir('otherlibs');
+ foreach( $libs as $lib ){
+ if( $lib[0] == '.' )
+ continue;
+ echo "<h3>$lib</h3>";
+ $vers = scandir( "otherlibs/$lib");
+ foreach( $vers as $ver ){
+ if( $ver[0] != '.' )
+ echo "<label><input type='checkbox' name='$lib' value='$ver'>$ver</label>";
+ }
+ }
+ ?>
+ <input type="submit" value="Run" class="submit" />
+ </form>
+</body>
+</html>
diff --git a/test/unit/data.js b/test/unit/data.js
index d21ec329f..d3241c9ea 100644
--- a/test/unit/data.js
+++ b/test/unit/data.js
@@ -1,296 +1,296 @@
-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();
-});
+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();
+});