Clean trailing whitespace from all files.
[jquery.git] / test / unit / effects.js
index 3c4015a..e96f6b6 100644 (file)
@@ -6,7 +6,32 @@ test("sanity check", function() {
 });
 
 test("show()", function() {
-       expect(23);
+       expect(28);
+
+       var hiddendiv = jQuery("div.hidden");
+
+       hiddendiv.hide().show();
+
+       equals( hiddendiv.css("display"), "block", "Make sure a pre-hidden div is visible." );
+
+       var div = jQuery("<div>").hide().appendTo("body").show();
+
+       equal( div.css("display"), "block", "Make sure pre-hidden divs show" );
+
+       QUnit.reset();
+
+       hiddendiv = jQuery("div.hidden");
+
+       equal(jQuery.css( hiddendiv[0], "display"), "none", "hiddendiv is display: none");
+
+       hiddendiv.css("display", "block");
+       equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+
+       hiddendiv.show();
+       equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+
+       hiddendiv.css("display","");
+
        var pass = true, div = jQuery("#main div");
        div.show().each(function(){
                if ( this.style.display == "none" ) pass = false;
@@ -39,7 +64,7 @@ test("show()", function() {
 
        // #show-tests * is set display: none in CSS
        jQuery("#main").append('<div id="show-tests"><div><p><a href="#"></a></p><code></code><pre></pre><span></span></div><table><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table><ul><li></li></ul></div><table id="test-table"></table>');
-       
+
        var old = jQuery("#test-table").show().css("display") !== "table";
        jQuery("#test-table").remove();
 
@@ -105,6 +130,45 @@ test("show(Number) - other displays", function() {
        });
 });
 
+
+
+//  Supports #7397
+test("Persist correct display value", function() {
+  expect(3);
+       QUnit.reset();
+       stop();
+
+       // #show-tests * is set display: none in CSS
+       jQuery("#main").append('<div id="show-tests"><span style="position:absolute;">foo</span></div>');
+
+       var $span = jQuery("#show-tests span"),
+         displayNone = $span.css("display"),
+         display = '', num = 0;
+
+  $span.show();
+
+  display = $span.css("display");
+
+  $span.hide();
+
+  $span.fadeIn(100, function() {
+
+    equals($span.css("display"), display, "Expecting display: " + display);
+
+    $span.fadeOut(100, function () {
+
+      equals($span.css("display"), displayNone, "Expecting display: " + displayNone);
+
+      $span.fadeIn(100, function() {
+
+        equals($span.css("display"), display, "Expecting display: " + display);
+
+        start();
+      });
+    });
+  });
+});
+
 test("animate(Hash, Object, Function)", function() {
        expect(1);
        stop();
@@ -127,27 +191,56 @@ test("animate negative height", function() {
 
 test("animate block as inline width/height", function() {
        expect(3);
-       stop();
-       jQuery("#foo").css({ display: "inline", width: '', height: '' }).animate({ width: 42, height: 42 }, 100, function() {
-               equals( jQuery(this).css("display"), jQuery.support.inlineBlockNeedsLayout ? "inline" : "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
-               equals( this.offsetWidth, 42, "width was animated" );
-               equals( this.offsetHeight, 42, "height was animated" );
-               start();
-       });
+
+       var span = jQuery("<span>").css("display", "inline-block").appendTo("body"),
+               expected = span.css("display");
+
+       span.remove();
+
+       if ( jQuery.support.inlineBlockNeedsLayout || expected === "inline-block" ) {
+               stop();
+
+               jQuery("#foo").css({ display: "inline", width: '', height: '' }).animate({ width: 42, height: 42 }, 100, function() {
+                       equals( jQuery(this).css("display"), jQuery.support.inlineBlockNeedsLayout ? "inline" : "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
+                       equals( this.offsetWidth, 42, "width was animated" );
+                       equals( this.offsetHeight, 42, "height was animated" );
+                       start();
+               });
+
+       // Browser doesn't support inline-block
+       } else {
+               ok( true, "Browser doesn't support inline-block" );
+               ok( true, "Browser doesn't support inline-block" );
+               ok( true, "Browser doesn't support inline-block" );
+       }
 });
 
 test("animate native inline width/height", function() {
        expect(3);
-       stop();
-       jQuery("#foo").css({ display: "", width: '', height: '' })
-               .append('<span>text</span>')
-               .children('span')
-                       .animate({ width: 42, height: 42 }, 100, function() {
-                               equals( jQuery(this).css("display"), "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
-                               equals( this.offsetWidth, 42, "width was animated" );
-                               equals( this.offsetHeight, 42, "height was animated" );
-                               start();
-                       });
+
+       var span = jQuery("<span>").css("display", "inline-block").appendTo("body"),
+               expected = span.css("display");
+
+       span.remove();
+
+       if ( jQuery.support.inlineBlockNeedsLayout || expected === "inline-block" ) {
+               stop();
+               jQuery("#foo").css({ display: "", width: '', height: '' })
+                       .append('<span>text</span>')
+                       .children('span')
+                               .animate({ width: 42, height: 42 }, 100, function() {
+                                       equals( jQuery(this).css("display"), "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
+                                       equals( this.offsetWidth, 42, "width was animated" );
+                                       equals( this.offsetHeight, 42, "height was animated" );
+                                       start();
+                               });
+
+       // Browser doesn't support inline-block
+       } else {
+               ok( true, "Browser doesn't support inline-block" );
+               ok( true, "Browser doesn't support inline-block" );
+               ok( true, "Browser doesn't support inline-block" );
+       }
 });
 
 test("animate block width/height", function() {
@@ -700,6 +793,13 @@ test("Chain slideToggle out", function() {
        jQuery('#slidetoggleout div').saveState(jQuery.support.shrinkWrapBlocks).slideToggle('fast').slideToggle('fast',jQuery.checkState);
 });
 
+test("Chain fadeToggle in", function() {
+       jQuery('#fadetogglein div').saveState().fadeToggle('fast').fadeToggle('fast',jQuery.checkState);
+});
+test("Chain fadeToggle out", function() {
+       jQuery('#fadetoggleout div').saveState().fadeToggle('fast').fadeToggle('fast',jQuery.checkState);
+});
+
 test("Chain fadeTo 0.5 1.0 with easing and callback)", function() {
        jQuery('#fadeto div').saveState().fadeTo('fast',0.5).fadeTo('fast',1.0,'linear',jQuery.checkState);
 });
@@ -770,3 +870,33 @@ test("animate with per-property easing", function(){
        });
 
 });
+
+test("hide hidden elements (bug #7141)", function() {
+       expect(3);
+       QUnit.reset();
+
+       var div = jQuery("<div style='display:none'></div>").appendTo("#main");
+       equals( div.css("display"), "none", "Element is hidden by default" );
+       div.hide();
+       ok( !div.data("olddisplay"), "olddisplay is undefined after hiding an already-hidden element" );
+       div.show();
+       equals( div.css("display"), "block", "Show a double-hidden element" );
+
+       div.remove();
+});
+
+test("hide hidden elements, with animation (bug #7141)", function() {
+       expect(3);
+       QUnit.reset();
+       stop();
+
+       var div = jQuery("<div style='display:none'></div>").appendTo("#main");
+       equals( div.css("display"), "none", "Element is hidden by default" );
+       div.hide(1, function () {
+               ok( !div.data("olddisplay"), "olddisplay is undefined after hiding an already-hidden element" );
+               div.show(1, function () {
+                       equals( div.css("display"), "block", "Show a double-hidden element" );
+                       start();
+               });
+       });
+});