Make sure that .width()/.height() don't return NaN also standardize on returning...
[jquery.git] / test / unit / css.js
index cfffb78..9c262af 100644 (file)
@@ -1,9 +1,9 @@
 module("css");
 
 test("css(String|Hash)", function() {
-       expect(29);
+       expect(41);
 
-       equals( jQuery('#main').css("display"), 'none', 'Check for css property "display"');
+       equals( jQuery('#main').css("display"), 'block', 'Check for css property "display"');
 
        ok( jQuery('#nothiddendiv').is(':visible'), 'Modifying CSS display: Assert element is visible');
        jQuery('#nothiddendiv').css({display: 'none'});
@@ -11,6 +11,24 @@ test("css(String|Hash)", function() {
        jQuery('#nothiddendiv').css({display: 'block'});
        ok( jQuery('#nothiddendiv').is(':visible'), 'Modified CSS display: Assert element is visible');
 
+       var div = jQuery( "<div>" );
+
+       equals( div.css("width"), "", "Width on disconnected node." );
+       equals( div.css("height"), "", "Height on disconnected node." );
+
+       div.css({ width: 4, height: 4 });
+
+       equals( div.css("width"), "4px", "Width on disconnected node." );
+       equals( div.css("height"), "4px", "Height on disconnected node." );
+
+       var div2 = jQuery( "<div style='display:none;'><input type='text' style='height:20px;'/><textarea style='height:20px;'/><div style='height:20px;'></div></div>").appendTo("body");
+
+       equals( div2.find("input").css("height"), "20px", "Height on hidden input." );
+       equals( div2.find("textarea").css("height"), "20px", "Height on hidden textarea." );
+       equals( div2.find("div").css("height"), "20px", "Height on hidden textarea." );
+
+       div2.remove();
+
        // handle negative numbers by ignoring #1599, #4216
        jQuery('#nothiddendiv').css({ 'width': 1, 'height': 1 });
 
@@ -19,6 +37,8 @@ test("css(String|Hash)", function() {
        equals( parseFloat(jQuery('#nothiddendiv').css('width')), width, 'Test negative width ignored')
        equals( parseFloat(jQuery('#nothiddendiv').css('height')), height, 'Test negative height ignored')
 
+       equals( jQuery('<div style="display: none;">').css('display'), 'none', 'Styles on disconnected nodes');
+
        jQuery('#floatTest').css({'float': 'right'});
        equals( jQuery('#floatTest').css('float'), 'right', 'Modified CSS float using "float": Assert float is right');
        jQuery('#floatTest').css({'font-size': '30px'});
@@ -61,10 +81,30 @@ test("css(String|Hash)", function() {
        equals( prctval, checkval, "Verify fontSize % set." );
 
        equals( typeof child.css("width"), "string", "Make sure that a string width is returned from css('width')." );
+
+       var old = child[0].style.height;
+
+       // Test NaN
+       child.css("height", parseFloat("zoo"));
+       equals( child[0].style.height, old, "Make sure height isn't changed on NaN." );
+
+       // Test null
+       child.css("height", null);
+       equals( child[0].style.height, old, "Make sure height isn't changed on null." );
+
+       old = child[0].style.fontSize;
+
+       // Test NaN
+       child.css("font-size", parseFloat("zoo"));
+       equals( child[0].style.fontSize, old, "Make sure font-size isn't changed on NaN." );
+
+       // Test null
+       child.css("font-size", null);
+       equals( child[0].style.fontSize, old, "Make sure font-size isn't changed on null." );
 });
 
 test("css(String, Object)", function() {
-       expect(21);
+       expect(22);
 
        ok( jQuery('#nothiddendiv').is(':visible'), 'Modifying CSS display: Assert element is visible');
        jQuery('#nothiddendiv').css("display", 'none');
@@ -91,9 +131,8 @@ test("css(String, Object)", function() {
 
        // using contents will get comments regular, text, and comment nodes
        var j = jQuery("#nonnodes").contents();
-       j.css("padding-left", "1px");
-       equals( j.css("padding-left"), "1px", "Check node,textnode,comment css works" );
-
+       j.css("overflow", "visible");
+       equals( j.css("overflow"), "visible", "Check node,textnode,comment css works" );
        // opera sometimes doesn't update 'display' correctly, see #2037
        jQuery("#t2037")[0].innerHTML = jQuery("#t2037")[0].innerHTML
        equals( jQuery("#t2037 .hidden").css("display"), "none", "Make sure browser thinks it is hidden" );
@@ -104,9 +143,19 @@ test("css(String, Object)", function() {
 
        equals( ret, div, "Make sure setting undefined returns the original set." );
        equals( div.css("display"), display, "Make sure that the display wasn't changed." );
+
+       // Test for Bug #5509
+       var success = true;
+       try {
+               jQuery('#foo').css("backgroundColor", "rgba(0, 0, 0, 0.1)");
+       }
+       catch (e) {
+               success = false;
+       }
+       ok( success, "Setting RGBA values does not throw Error" );
 });
 
-if(jQuery.browser.msie) {
+if ( !jQuery.support.opacity ) {
   test("css(String, Object) for MSIE", function() {
     // for #1438, IE throws JS error when filter exists but doesn't have opacity in it
                jQuery('#foo').css("filter", "progid:DXImageTransform.Microsoft.Chroma(color='red');");
@@ -268,4 +317,4 @@ test(":visible selector works properly on children with a hidden parent (bug #45
        expect(1);
        jQuery('#table').css('display', 'none').html('<tr><td>cell</td><td>cell</td></tr>');
        equals(jQuery('#table td:visible').length, 0, "hidden cell children not perceived as visible");
-});
\ No newline at end of file
+});