Fixing endlines.
authorMark Gibson <jollytoad@gmail.com>
Wed, 25 Nov 2009 17:09:53 +0000 (12:09 -0500)
committerJohn Resig <jeresig@Archimedes.local>
Wed, 25 Nov 2009 17:09:53 +0000 (12:09 -0500)
src/data.js
test/data/json.php
test/data/jsonp.php
test/data/name.php
test/data/params_html.php
test/data/test.js
test/polluted.php
test/unit/data.js

index 500f7ea..8fa62dc 100644 (file)
-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", [] );
+       }
+});
index 08e3f9e..d19a417 100644 (file)
@@ -1,9 +1,9 @@
-<?php\r
-error_reporting(0);\r
-$json = $_REQUEST['json'];\r
-if($json) {\r
-       echo '[ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ]';\r
-} else {\r
-       echo '{ "data": {"lang": "en", "length": 25} }';\r
-}\r
+<?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
index 7500025..9ae1d84 100644 (file)
@@ -1,10 +1,10 @@
-<?php\r
-error_reporting(0);\r
-$callback = $_REQUEST['callback'];\r
-$json = $_REQUEST['json'];\r
-if($json) {\r
-       echo $callback . '([ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ])';\r
-} else {\r
-       echo $callback . '({ "data": {"lang": "en", "length": 25} })';\r
-}\r
-?>\r
+<?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} })';
+}
+?>
index a4b990e..ee22e45 100644 (file)
@@ -1,29 +1,29 @@
-<?php\r
-error_reporting(0);\r
-$wait = $_REQUEST['wait'];\r
-if($wait) {\r
-       sleep($wait);\r
-}\r
-$xml = $_REQUEST['xml'];\r
-if($xml) {\r
-       header("Content-type: text/xml");\r
-       $result = ($xml == "5-2") ? "3" : "?";\r
-       echo "<math><calculation>$xml</calculation><result>$result</result></math>";\r
-       die();\r
-}\r
-$name = $_REQUEST['name'];\r
-if($name == 'foo') {\r
-       echo "bar";\r
-       die();\r
-} else if($name == 'peter') {\r
-       echo "pan";\r
-       die();\r
-}\r
-$request = apache_request_headers();\r
-$request = $request['X-Custom-Header'];\r
-if(strlen($request) > 0) {\r
-       echo $request;\r
-       die();\r
-}\r
-echo 'ERROR <script type="text/javascript">ok( true, "name.php executed" );</script>';\r
+<?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
index e170e8a..0bab00f 100644 (file)
@@ -1,12 +1,12 @@
-<div id="post">\r
-<?php \r
-       foreach( $_POST as $key=>$value )\r
-               echo "<b id='$key'>$value</b>";\r
-?> \r
-</div>\r
-<div id="get">\r
-<?php\r
-       foreach( $_GET as $key=>$value )\r
-               echo "<b id='$key'>$value</b>";\r
-?> \r
+<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
index a41cb23..69f492d 100644 (file)
@@ -1,3 +1,3 @@
-var foobar = "bar";\r
-jQuery('#ap').html('bar');\r
-ok( true, "test.js executed");\r
+var foobar = "bar";
+jQuery('#ap').html('bar');
+ok( true, "test.js executed");
index ebe4509..3ddb7ac 100644 (file)
@@ -1,64 +1,64 @@
-<?php\r
-       if( count($_POST) ){ // second call\r
-               $includes = array();\r
-               foreach( $_POST as $lib=>$ver ){\r
-                       if( !$ver )\r
-                               continue;\r
-                       $include = "<script type='text/javascript' src='otherlibs/$lib/$ver/$lib.js'></script>\n";\r
-                       if( $lib == 'prototype' ) // prototype must be included first\r
-                               array_unshift( $includes, $include );\r
-                       else\r
-                               array_push( $includes, $include );\r
-               }\r
-\r
-               $includes = implode( "\n", $includes );\r
-               $suite = file_get_contents('index.html');\r
-               echo str_replace( '<!-- Includes -->', $includes, $suite );\r
-               exit;\r
-       }       \r
-?>\r
-\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">\r
-<head>\r
-       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
-       <title>jQuery Test Suite</title>\r
-       <link rel="Stylesheet" media="screen" href="qunit/testsuite.css" />\r
-       <link rel="Stylesheet" media="screen" href="data/otherlibs.css" />\r
-       <style type="text/css">\r
-               form.otherlibs{\r
-                       margin: 20px 0 0 30px;\r
-               }\r
-               form.otherlibs label{\r
-                       display:block;\r
-                       margin: 5px 0 5px 30px;\r
-               }\r
-               form.otherlibs input.submit{\r
-                       margin:30px 0 0 0;\r
-               }\r
-       </style>\r
-</head>\r
-\r
-<body id="body">\r
-       <h1 id="header">jQuery Test Suite</h1>\r
-       <h2 id="banner" class="fail"></h2>\r
-       <h2 id="userAgent">Choose other libraries to include</h2>\r
-       \r
-       <form class="otherlibs" action="" method="post">\r
-               <?php\r
-                       $libs = scandir('otherlibs');\r
-                       foreach( $libs as $lib ){\r
-                               if( $lib[0] == '.' )\r
-                                       continue;\r
-                               echo "<h3>$lib</h3>";\r
-                               $vers = scandir( "otherlibs/$lib");\r
-                               foreach( $vers as $ver ){\r
-                                       if( $ver[0] != '.' )\r
-                                               echo "<label><input type='checkbox' name='$lib' value='$ver'>$ver</label>";\r
-                               }\r
-                       }\r
-               ?>\r
-               <input type="submit" value="Run" class="submit" />\r
-       </form>\r
-</body>\r
-</html>\r
+<?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>
index d21ec32..d3241c9 100644 (file)
-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();
+});