Merge branch 'restrictAttr' of https://github.com/jitter/jquery into jitter-restrictAttr
[jquery.git] / test / unit / attributes.js
index 10f7b19..d17653d 100644 (file)
@@ -4,7 +4,7 @@ var bareObj = function(value) { return value; };
 var functionReturningObj = function(value) { return (function() { return value; }); };
 
 test("attr(String)", function() {
-       expect(30);
+       expect(37);
 
        // This one sometimes fails randomly ?!
        equals( jQuery('#text1').attr('value'), "Test", 'Check for value attribute' );
@@ -65,6 +65,16 @@ test("attr(String)", function() {
 
        ok( jQuery("<div/>").attr("doesntexist") === undefined, "Make sure undefined is returned when no attribute is found." );
        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 ) {
@@ -98,7 +108,7 @@ test("attr(Hash)", function() {
 });
 
 test("attr(String, Object)", function() {
-       expect(24);
+       expect(30);
 
        var div = jQuery("div").attr("foo", "bar"),
                fail = false;
@@ -132,6 +142,25 @@ test("attr(String, Object)", function() {
        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("<tr><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr>"),
                td = table.find('td:first');
        td.attr("rowspan", "2");
@@ -302,8 +331,26 @@ test("attr('tabindex', value)", function() {
 });
 
 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() {
@@ -717,7 +764,7 @@ test("toggleClass(Fucntion[, boolean]) with incoming value", function() {
 });
 
 test("addClass, removeClass, hasClass", function() {
-       expect(14);
+       expect(17);
  
        var jq = jQuery("<p>Hi</p>"), x = jq[0];
  
@@ -737,12 +784,14 @@ test("addClass, removeClass, hasClass", function() {
        ok( jq.hasClass("hi"), "Check has1" );
        ok( jq.hasClass("bar"), "Check has2" );
  
-       var jq = jQuery("<p class='class1\nclass2\tcla.ss3\n'></p>");
-       ok( jq.hasClass("class1"), "Check hasClass with carriage return" );
-       ok( jq.is(".class1"), "Check is with carriage return" );
+       var jq = jQuery("<p class='class1\nclass2\tcla.ss3\n\rclass4'></p>");
+       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" );
@@ -750,4 +799,6 @@ test("addClass, removeClass, hasClass", function() {
        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" );
 });