jquery data: Closes #3539. Exposed jQuery.queue. Moved all the data and queue functio...
[jquery.git] / test / unit / core.js
index ce0d055..1f0850c 100644 (file)
@@ -451,7 +451,7 @@ test("attr(Hash)", function() {
 });
 
 test("attr(String, Object)", function() {
-       expect(17);
+       expect(19);
        var div = jQuery("div").attr("foo", "bar");
                fail = false;
        for ( var i = 0; i < div.size(); i++ ) {
@@ -515,6 +515,16 @@ test("attr(String, Object)", function() {
        }
        ok( thrown, "Exception thrown when trying to change type property" );
        equals( "checkbox", jQuery(check).attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" );
+       
+       var check = jQuery("<input />");
+       var thrown = true;
+       try {
+               check.attr('type','checkbox');
+       } catch(e) {
+               thrown = false;
+       }
+       ok( thrown, "Exception thrown when trying to change type property" );
+       equals( "checkbox", check.attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" );
 });
 
 if ( !isLocal ) {
@@ -704,9 +714,9 @@ test("wrap(String|Element)", function() {
 
 test("wrapAll(String|Element)", function() {
        expect(8);
-       var prev = jQuery("#first")[0].previousSibling;
-       var p = jQuery("#first")[0].parentNode;
-       var result = jQuery('#first,#firstp').wrapAll('<div class="red"><div id="tmp"></div></div>');
+       var prev = jQuery("#firstp")[0].previousSibling;
+       var p = jQuery("#firstp,#first")[0].parentNode;
+       var result = jQuery('#firstp,#first').wrapAll('<div class="red"><div id="tmp"></div></div>');
        equals( result.parent().length, 1, 'Check for wrapping of on-the-fly html' );
        ok( jQuery('#first').parent().parent().is('.red'), 'Check if wrapper has class "red"' );
        ok( jQuery('#firstp').parent().parent().is('.red'), 'Check if wrapper has class "red"' );
@@ -714,9 +724,9 @@ test("wrapAll(String|Element)", function() {
        equals( jQuery("#first").parent().parent()[0].parentNode, p, "Correct Parent" );
 
        reset();
-       var prev = jQuery("#first")[0].previousSibling;
+       var prev = jQuery("#firstp")[0].previousSibling;
        var p = jQuery("#first")[0].parentNode;
-       var result = jQuery('#first,#firstp').wrapAll(document.getElementById('empty'));
+       var result = jQuery('#firstp,#first').wrapAll(document.getElementById('empty'));
        equals( jQuery("#first").parent()[0], jQuery("#firstp").parent()[0], "Same Parent" );
        equals( jQuery("#first").parent()[0].previousSibling, prev, "Correct Previous Sibling" );
        equals( jQuery("#first").parent()[0].parentNode, p, "Correct Parent" );
@@ -756,7 +766,9 @@ test("append(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#sap').text(), "Check for appending of array of elements" );
 
        reset();
-       expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
+       expected = document.querySelectorAll ?
+               "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:" :
+               "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
        jQuery('#sap').append(jQuery("#first, #yahoo"));
        equals( expected, jQuery('#sap').text(), "Check for appending of jQuery object" );
 
@@ -840,7 +852,9 @@ test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#sap').text(), "Check for appending of array of elements" );
 
        reset();
-       expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
+       expected = document.querySelectorAll ?
+               "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:" :
+               "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
        jQuery("#first, #yahoo").appendTo('#sap');
        equals( expected, jQuery('#sap').text(), "Check for appending of jQuery object" );
 
@@ -867,7 +881,9 @@ test("prepend(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#sap').text(), "Check for prepending of array of elements" );
 
        reset();
-       expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
+       expected = document.querySelectorAll ?
+               "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog" :
+               "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
        jQuery('#sap').prepend(jQuery("#first, #yahoo"));
        equals( expected, jQuery('#sap').text(), "Check for prepending of jQuery object" );
 });
@@ -898,7 +914,7 @@ test("prependTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        jQuery('<select id="prependSelect1"></select>').prependTo('form:last');
        jQuery('<select id="prependSelect2"><option>Test</option></select>').prependTo('form:last');
 
-       t( "Prepend Select", "#prependSelect1, #prependSelect2", ["prependSelect1", "prependSelect2"] );
+       t( "Prepend Select", "#prependSelect2, #prependSelect1", ["prependSelect2", "prependSelect1"] );
 });
 
 test("before(String|Element|Array&lt;Element&gt;|jQuery)", function() {
@@ -918,7 +934,9 @@ test("before(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#en').text(), "Insert array of elements before" );
 
        reset();
-       expected = "This is a normal link: Try them out:diveintomarkYahoo";
+       expected = document.querySelectorAll ?
+               "This is a normal link: diveintomarkTry them out:Yahoo" :
+               "This is a normal link: Try them out:diveintomarkYahoo";
        jQuery('#yahoo').before(jQuery("#first, #mark"));
        equals( expected, jQuery('#en').text(), "Insert jQuery before" );
 });
@@ -940,7 +958,9 @@ test("insertBefore(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#en').text(), "Insert array of elements before" );
 
        reset();
-       expected = "This is a normal link: Try them out:diveintomarkYahoo";
+       expected = document.querySelectorAll ?
+               "This is a normal link: diveintomarkTry them out:Yahoo" :
+               "This is a normal link: Try them out:diveintomarkYahoo";
        jQuery("#first, #mark").insertBefore('#yahoo');
        equals( expected, jQuery('#en').text(), "Insert jQuery before" );
 });
@@ -962,7 +982,9 @@ test("after(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        equals( expected, jQuery('#en').text(), "Insert array of elements after" );
 
        reset();
-       expected = "This is a normal link: YahooTry them out:diveintomark";
+       expected = document.querySelectorAll ?
+               "This is a normal link: YahoodiveintomarkTry them out:" :
+               "This is a normal link: YahooTry them out:diveintomark";
        jQuery('#yahoo').after(jQuery("#first, #mark"));
        equals( expected, jQuery('#en').text(), "Insert jQuery after" );
 });
@@ -1126,6 +1148,23 @@ test("is(String)", function() {
        ok( jQuery('#en').is('[lang="de"] , [lang="en"]'), 'Comma-seperated; Check for lang attribute: Expect en or de' );
 });
 
+test("jQuery.merge()", function() {
+       expect(6);
+               
+       var parse = jQuery.merge;
+       
+       same( parse([],[]), [], "Empty arrays" );
+       
+       same( parse([1],[2]), [1,2], "Basic" );
+       same( parse([1,2],[3,4]), [1,2,3,4], "Basic" );
+       
+       same( parse([1,2],[]), [1,2], "Second empty" );
+       same( parse([],[1,2]), [1,2], "First empty" );  
+       
+       // Fixed at [5998], #3641
+       same( parse([-2,-1], [0,1,2]), [-2,-1,0,1,2], "Second array including a zero (falsy)");
+});
+
 test("jQuery.extend(Object, Object)", function() {
        expect(20);
 
@@ -1297,6 +1336,14 @@ test("filter()", function() {
        equals( j.filter("[name]").length, 0, "Check node,textnode,comment to filter the one span" );
 });
 
+test("closest()", function() {
+       expect(4);
+       isSet( jQuery("body").closest("body").get(), q("body"), "closest(body)" );
+       isSet( jQuery("body").closest("html").get(), q("html"), "closest(html)" );
+       isSet( jQuery("body").closest("div").get(), [], "closest(div)" );
+       isSet( jQuery("#main").closest("span,#html").get(), q("html"), "closest(span,#html)" );
+});
+
 test("not()", function() {
        expect(8);
        equals( jQuery("#main > p#ap > a").not("#google").length, 2, "not('selector')" );
@@ -1315,7 +1362,7 @@ test("andSelf()", function() {
        expect(4);
        isSet( jQuery("#en").siblings().andSelf().get(), q("sndp", "sap","en"), "Check for siblings and self" );
        isSet( jQuery("#foo").children().andSelf().get(), q("sndp", "en", "sap", "foo"), "Check for children and self" );
-       isSet( jQuery("#en, #sndp").parent().andSelf().get(), q("foo","en","sndp"), "Check for parent and self" );
+       isSet( jQuery("#sndp, #en").parent().andSelf().get(), q("foo","sndp","en"), "Check for parent and self" );
        isSet( jQuery("#groups").parents("p, div").andSelf().get(), q("ap", "main", "groups"), "Check for parents and self" );
 });
 
@@ -1325,7 +1372,8 @@ test("siblings([String])", function() {
        isSet( jQuery("#sndp").siblings(":has(code)").get(), q("sap"), "Check for filtered siblings (has code child element)" );
        isSet( jQuery("#sndp").siblings(":has(a)").get(), q("en", "sap"), "Check for filtered siblings (has anchor child element)" );
        isSet( jQuery("#foo").siblings("form, b").get(), q("form", "lengthtest", "testForm", "floatTest"), "Check for multiple filters" );
-       isSet( jQuery("#en, #sndp").siblings().get(), q("sndp", "sap", "en"), "Check for unique results from siblings" );
+       var set = document.querySelectorAll ? q("en", "sap", "sndp") : q("sndp", "sap", "en");
+       isSet( jQuery("#en, #sndp").siblings().get(), set, "Check for unique results from siblings" );
 });
 
 test("children([String])", function() {
@@ -1445,13 +1493,20 @@ test("removeClass(String) - simple", function() {
 });
 
 test("toggleClass(String)", function() {
-       expect(3);
+       expect(6);\r
        var e = jQuery("#firstp");
        ok( !e.is(".test"), "Assert class not present" );
        e.toggleClass("test");
        ok( e.is(".test"), "Assert class present" );
        e.toggleClass("test");
        ok( !e.is(".test"), "Assert class not present" );
+
+       e.toggleClass("test", false);\r
+       ok( !e.is(".test"), "Assert class not present" );\r
+       e.toggleClass("test", true);\r
+       ok( e.is(".test"), "Assert class present" );\r
+       e.toggleClass("test", false);\r
+       ok( !e.is(".test"), "Assert class not present" );\r
 });
 
 test("removeAttr(String", function() {
@@ -1523,100 +1578,6 @@ test("jQuery.className", function() {
        ok( c.has(x, "bar"), "Check has2" );
 });
 
-test("jQuery.data", function() {
-       expect(5);
-       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" );
-       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(18);
-       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" );
-});
-
-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("remove()", function() {
        expect(6);
        jQuery("#ap").children().remove();