From: jeresig Date: Thu, 9 Dec 2010 17:33:26 +0000 (-0500) Subject: Merge branch 'support_6897' of https://github.com/rwldrn/jquery into rwldrn-support_6897 X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=b67154fd10c6226963dbbc4b3fe70d9f529b9d50;hp=-c;p=jquery.git Merge branch 'support_6897' of https://github.com/rwldrn/jquery into rwldrn-support_6897 --- b67154fd10c6226963dbbc4b3fe70d9f529b9d50 diff --combined test/unit/attributes.js index d17653d,3eb2474..f30779d --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@@ -3,8 -3,33 +3,33 @@@ module("attributes") var bareObj = function(value) { return value; }; var functionReturningObj = function(value) { return (function() { return value; }); }; + test("jQuery.props: itegrity test", function() { + + expect(1); + + // This must be maintained and equal jQuery.props + // Ensure that accidental or erroneous property + // overwrites don't occur + // This is simply for better code coverage and future proofing. + var propsShouldBe = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" + }; + + same(propsShouldBe, jQuery.props, "jQuery.props passes integrity check"); + + }); + test("attr(String)", function() { - expect(31); + expect(37); // This one sometimes fails randomly ?! equals( jQuery('#text1').attr('value'), "Test", 'Check for value attribute' ); @@@ -67,14 -92,6 +92,14 @@@ ok( jQuery().attr("doesntexist") === undefined, "Make sure undefined is returned when no element is there." ); equals( jQuery(document).attr("nodeName"), "#document", "attr works correctly on document nodes (bug #7451)." ); + + var attributeNode = document.createAttribute("irrelevant"), + commentNode = document.createComment("some comment"), + textNode = document.createTextNode("some text"), + obj = {}; + jQuery.each( [document, attributeNode, commentNode, textNode, obj, "#firstp"], function( i, ele ) { + strictEqual( jQuery(ele).attr("nonexisting"), undefined, "attr works correctly for non existing attributes (bug #7500)." ); + }); }); if ( !isLocal ) { @@@ -108,7 -125,7 +133,7 @@@ test("attr(Hash)", function() }); test("attr(String, Object)", function() { - expect(24); + expect(30); var div = jQuery("div").attr("foo", "bar"), fail = false; @@@ -142,25 -159,6 +167,25 @@@ jQuery("#name").attr('maxLength', '10'); equals( document.getElementById('name').maxLength, '10', 'Set maxlength attribute' ); + var attributeNode = document.createAttribute("irrelevant"), + commentNode = document.createComment("some comment"), + textNode = document.createTextNode("some text"), + obj = {}; + jQuery.each( [document, attributeNode, obj, "#firstp"], function( i, ele ) { + var $ele = jQuery( ele ); + $ele.attr( "nonexisting", "foo" ); + equal( $ele.attr("nonexisting"), "foo", "attr(name, value) works correctly for non existing attributes (bug #7500)." ); + }); + jQuery.each( [commentNode, textNode], function( i, ele ) { + var $ele = jQuery( ele ); + $ele.attr( "nonexisting", "foo" ); + strictEqual( $ele.attr("nonexisting"), undefined, "attr(name, value) works correctly on comment and text nodes (bug #7500)." ); + }); + //cleanup + jQuery.each( [document, "#firstp"], function( i, ele ) { + jQuery( ele ).removeAttr("nonexisting"); + }); + var table = jQuery('#table').append("cellcellcellcellcell"), td = table.find('td:first'); td.attr("rowspan", "2"); @@@ -331,26 -329,8 +356,26 @@@ test("attr('tabindex', value)", functio }); test("removeAttr(String)", function() { - expect(1); + expect(7); equals( jQuery('#mark').removeAttr( "class" )[0].className, "", "remove class" ); + + var attributeNode = document.createAttribute("irrelevant"), + commentNode = document.createComment("some comment"), + textNode = document.createTextNode("some text"), + obj = {}; + //removeAttr only really removes on DOM element nodes handle all other seperatyl + strictEqual( jQuery( "#firstp" ).attr( "nonexisting", "foo" ).removeAttr( "nonexisting" )[0].nonexisting, undefined, "removeAttr works correctly on DOM element nodes" ); + + jQuery.each( [document, attributeNode, obj], function( i, ele ) { + var $ele = jQuery( ele ); + $ele.attr( "nonexisting", "foo" ).removeAttr( "nonexisting" ); + strictEqual( ele.nonexisting, "", "removeAttr works correctly on non DOM element nodes (bug #7500)." ); + }); + jQuery.each( [commentNode, textNode], function( i, ele ) { + $ele = jQuery( ele ); + $ele.attr( "nonexisting", "foo" ).removeAttr( "nonexisting" ); + strictEqual( ele.nonexisting, undefined, "removeAttr works correctly on non DOM element nodes (bug #7500)." ); + }); }); test("val()", function() { @@@ -764,7 -744,7 +789,7 @@@ test("toggleClass(Fucntion[, boolean]) }); test("addClass, removeClass, hasClass", function() { - expect(14); + expect(17); var jq = jQuery("

Hi

"), x = jq[0]; @@@ -784,14 -764,12 +809,14 @@@ ok( jq.hasClass("hi"), "Check has1" ); ok( jq.hasClass("bar"), "Check has2" ); - var jq = jQuery("

"); - ok( jq.hasClass("class1"), "Check hasClass with carriage return" ); - ok( jq.is(".class1"), "Check is with carriage return" ); + var jq = jQuery("

"); + ok( jq.hasClass("class1"), "Check hasClass with line feed" ); + ok( jq.is(".class1"), "Check is with line feed" ); ok( jq.hasClass("class2"), "Check hasClass with tab" ); ok( jq.is(".class2"), "Check is with tab" ); ok( jq.hasClass("cla.ss3"), "Check hasClass with dot" ); + ok( jq.hasClass("class4"), "Check hasClass with carriage return" ); + ok( jq.is(".class4"), "Check is with carriage return" ); jq.removeClass("class2"); ok( jq.hasClass("class2")==false, "Check the class has been properly removed" ); @@@ -799,6 -777,4 +824,6 @@@ ok( jq.hasClass("cla.ss3"), "Check the dotted class has not been removed" ); jq.removeClass("cla.ss3"); ok( jq.hasClass("cla.ss3")==false, "Check the dotted class has been removed" ); + jq.removeClass("class4"); + ok( jq.hasClass("class4")==false, "Check the class has been properly removed" ); });