Reworked the .clone() function in IE. Fixes jQuery bugs #3500 (jQuery expandos were...
[jquery.git] / test / unit / core.js
index 7942548..6da62be 100644 (file)
@@ -53,7 +53,7 @@ test("jQuery()", function() {
 });
 
 test("selector state", function() {
-       expect(28);
+       expect(30);
 
        var test;
        
@@ -72,6 +72,10 @@ test("selector state", function() {
        test = jQuery("#main");
        equals( test.selector, "#main", "#main Selector" );
        equals( test.context, document, "#main Context" );
+
+       test = jQuery("#notfoundnono");
+       equals( test.selector, "#notfoundnono", "#notfoundnono Selector" );
+       equals( test.context, document, "#notfoundnono Context" );
        
        test = jQuery("#main", document);
        equals( test.selector, "#main", "#main Selector" );
@@ -401,8 +405,8 @@ test("attr(String)", function() {
        equals( jQuery('#text1').attr('maxLength'), '30', 'Check for maxLength attribute' );
        equals( jQuery('#area1').attr('maxLength'), '30', 'Check for maxLength attribute' );
        equals( jQuery('#select2').attr('selectedIndex'), 3, 'Check for selectedIndex attribute' );
-       equals( jQuery('#foo').attr('nodeName'), 'DIV', 'Check for nodeName attribute' );
-       equals( jQuery('#foo').attr('tagName'), 'DIV', 'Check for tagName attribute' );
+       equals( jQuery('#foo').attr('nodeName').toUpperCase(), 'DIV', 'Check for nodeName attribute' );
+       equals( jQuery('#foo').attr('tagName').toUpperCase(), 'DIV', 'Check for tagName attribute' );
 
        jQuery('<a id="tAnchor5"></a>').attr('href', '#5').appendTo('#main'); // using innerHTML in IE causes href attribute to be serialized to the full path
        equals( jQuery('#tAnchor5').attr('href'), "#5", 'Check for non-absolute href (an anchor)' );
@@ -778,8 +782,8 @@ test("wrap(String|Element)", function() {
 
        // Try wrapping a disconnected node
        j = jQuery("<label/>").wrap("<li/>");
-       equals( j[0].nodeName, "LABEL", "Element is a label" );
-       equals( j[0].parentNode.nodeName, "LI", "Element has been wrapped" );
+       equals( j[0].nodeName.toUpperCase(), "LABEL", "Element is a label" );
+       equals( j[0].parentNode.nodeName.toUpperCase(), "LI", "Element has been wrapped" );
 });
 
 test("wrapAll(String|Element)", function() {
@@ -1152,7 +1156,7 @@ test("find(String)", function() {
 });
 
 test("clone()", function() {
-       expect(20);
+       expect(28);
        equals( 'This is a normal link: Yahoo', jQuery('#en').text(), 'Assert text for #en' );
        var clone = jQuery('#yahoo').clone();
        equals( 'Try them out:Yahoo', jQuery('#first').append(clone).text(), 'Check for clone' );
@@ -1172,6 +1176,31 @@ test("clone()", function() {
        // using contents will get comments regular, text, and comment nodes
        var cl = jQuery("#nonnodes").contents().clone();
        ok( cl.length >= 2, "Check node,textnode,comment clone works (some browsers delete comments on clone)" );
+
+       var div = jQuery("<div><ul><li>test</li></ul></div>").click(function(){
+               ok( true, "Bound event still exists." );
+       });
+
+       div = div.clone(true).clone(true);
+       equals( div.length, 1, "One element cloned" );
+       equals( div[0].nodeName.toUpperCase(), "DIV", "DIV element cloned" );
+       div.trigger("click");
+
+       div = jQuery("<div/>").append([ document.createElement("table"), document.createElement("table") ]);
+       div.find("table").click(function(){
+               ok( true, "Bound event still exists." );
+       });
+
+       div = div.clone(true);
+       equals( div.length, 1, "One element cloned" );
+       equals( div[0].nodeName.toUpperCase(), "DIV", "DIV element cloned" );
+       div.find("table:last").trigger("click");
+
+       div = jQuery("<div/>").html('<object height="355" width="425">  <param name="movie" value="http://www.youtube.com/v/JikaHBDoV3k&amp;hl=en">  <param name="wmode" value="transparent"> </object>');
+
+       div = div.clone(true);
+       equals( div.length, 1, "One element cloned" );
+       equals( div[0].nodeName.toUpperCase(), "DIV", "DIV element cloned" );
 });
 
 if (!isLocal) {
@@ -1377,7 +1406,7 @@ test("html(String)", function() {
 
        // this is needed, or the expando added by jQuery unique will yield a different html
        j.find('b').removeData();
-       equals( j.html().toLowerCase(), "<b>bold</b>", "Check node,textnode,comment with html()" );
+       equals( j.html().replace(/ xmlns="[^"]+"/g, "").toLowerCase(), "<b>bold</b>", "Check node,textnode,comment with html()" );
 
        jQuery("#main").html("<select/>");
        jQuery("#main select").html("<option>O1</option><option selected='selected'>O2</option><option>O3</option>");
@@ -1553,7 +1582,7 @@ test("addClass(String)", function() {
 });
 
 test("removeClass(String) - simple", function() {
-       expect(4);
+       expect(5);
        
        var $divs = jQuery('div');
        
@@ -1562,13 +1591,17 @@ test("removeClass(String) - simple", function() {
        ok( !$divs.is('.test'), "Remove Class" );
 
        reset();
-       
+
        $divs.addClass("test").addClass("foo").addClass("bar");
        $divs.removeClass("test").removeClass("bar").removeClass("foo");
        
        ok( !$divs.is('.test,.bar,.foo'), "Remove multiple classes" );
 
        reset();
+
+       // Make sure that a null value doesn't cause problems
+       $divs.eq(0).addClass("test").removeClass(null);
+       ok( $divs.eq(0).is('.test'), "Null value passed to removeClass" );
        
        $divs.eq(0).addClass("test").removeClass("");
        ok( $divs.eq(0).is('.test'), "Empty string passed to removeClass" );
@@ -1791,7 +1824,7 @@ test("contents()", function() {
 test("jQuery.makeArray", function(){
        expect(15);
 
-       equals( jQuery.makeArray(jQuery('html>*'))[0].nodeName, "HEAD", "Pass makeArray a jQuery object" );
+       equals( jQuery.makeArray(jQuery('html>*'))[0].nodeName.toUpperCase(), "HEAD", "Pass makeArray a jQuery object" );
 
        equals( jQuery.makeArray(document.getElementsByName("PWD")).slice(0,1)[0].name, "PWD", "Pass makeArray a nodelist" );
 
@@ -1807,7 +1840,7 @@ test("jQuery.makeArray", function(){
 
        equals( jQuery.makeArray( true )[0].constructor, Boolean, "Pass makeArray a boolean" );
 
-       equals( jQuery.makeArray( document.createElement("div") )[0].nodeName, "DIV", "Pass makeArray a single node" );
+       equals( jQuery.makeArray( document.createElement("div") )[0].nodeName.toUpperCase(), "DIV", "Pass makeArray a single node" );
 
        equals( jQuery.makeArray( {length:2, 0:"a", 1:"b"} ).join(""), "ab", "Pass makeArray an array like map (with length)" );