Reworked the .clone() function in IE. Fixes jQuery bugs #3500 (jQuery expandos were...
[jquery.git] / test / unit / core.js
index e35c083..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)' );
@@ -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) {
@@ -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" );