X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=sidebyside;f=test%2Funit%2Fattributes.js;h=7314b3a88167e7cf8727f0c1f0505301eb8d9f1e;hb=b50f41a2e3ba9ab9a7bcf69a9633b0a8258015d6;hp=3adb018dfb9f9f24f96a2df8ed833431c8c38712;hpb=dc060f08cd898a12e16b817f46bb49861fbfed36;p=jquery.git
diff --git a/test/unit/attributes.js b/test/unit/attributes.js
index 3adb018..7314b3a 100644
--- a/test/unit/attributes.js
+++ b/test/unit/attributes.js
@@ -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("
").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,15 +108,18 @@ test("attr(Hash)", function() {
});
test("attr(String, Object)", function() {
- expect(23);
+ expect(30);
+
var div = jQuery("div").attr("foo", "bar"),
fail = false;
+
for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).getAttribute('foo') != "bar" ){
fail = i;
break;
}
}
+
equals( fail, false, "Set Attribute, the #"+fail+" element didn't get the attribute 'foo'" );
// Fails on IE since recent changes to .attr()
@@ -114,6 +127,8 @@ test("attr(String, Object)", function() {
jQuery("#name").attr('name', 'something');
equals( jQuery("#name").attr('name'), 'something', 'Set name attribute' );
+ jQuery("#name").attr('name', null);
+ equals( jQuery("#name").attr('title'), '', 'Remove name attribute' );
jQuery("#check2").attr('checked', true);
equals( document.getElementById('check2').checked, true, 'Set checked attribute' );
jQuery("#check2").attr('checked', false);
@@ -127,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("cell |
cell | cell |
cell | cell |
"),
td = table.find('td:first');
td.attr("rowspan", "2");
@@ -297,12 +331,30 @@ 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() {
- expect(17);
+ expect(23);
document.getElementById('text1').value = "bla";
equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
@@ -329,6 +381,22 @@ test("val()", function() {
jQuery('#select3').val("");
same( jQuery('#select3').val(), [''], 'Call val() on a multiple="multiple" select' );
+ same( jQuery('#select4').val(), [], 'Call val() on multiple="multiple" select with all disabled options' );
+
+ jQuery('#select4 optgroup').add('#select4 > [disabled]').attr('disabled', false);
+ same( jQuery('#select4').val(), ['2', '3'], 'Call val() on multiple="multiple" select with some disabled options' );
+
+ jQuery('#select4').attr('disabled', true);
+ same( jQuery('#select4').val(), ['2', '3'], 'Call val() on disabled multiple="multiple" select' );
+
+ equals( jQuery('#select5').val(), "3", "Check value on ambiguous select." );
+
+ jQuery('#select5').val(1);
+ equals( jQuery('#select5').val(), "1", "Check value on ambiguous select." );
+
+ jQuery('#select5').val(3);
+ equals( jQuery('#select5').val(), "3", "Check value on ambiguous select." );
+
var checks = jQuery("").appendTo("#form");
same( checks.serialize(), "", "Get unchecked values." );
@@ -351,14 +419,20 @@ test("val()", function() {
});
var testVal = function(valueObj) {
- expect(6);
+ expect(8);
jQuery("#text1").val(valueObj( 'test' ));
equals( document.getElementById('text1').value, "test", "Check for modified (via val(String)) value of input element" );
+ jQuery("#text1").val(valueObj( undefined ));
+ equals( document.getElementById('text1').value, "", "Check for modified (via val(undefined)) value of input element" );
+
jQuery("#text1").val(valueObj( 67 ));
equals( document.getElementById('text1').value, "67", "Check for modified (via val(Number)) value of input element" );
+ jQuery("#text1").val(valueObj( null ));
+ equals( document.getElementById('text1').value, "", "Check for modified (via val(null)) value of input element" );
+
jQuery("#select1").val(valueObj( "3" ));
equals( jQuery("#select1").val(), "3", "Check for modified (via val(String)) value of select element" );
@@ -382,7 +456,19 @@ test("val(String/Number)", function() {
test("val(Function)", function() {
testVal(functionReturningObj);
-})
+});
+
+test( "val(Array of Numbers) (Bug #7123)", function() {
+ expect(4);
+ jQuery('#form').append('');
+ var elements = jQuery('input[name=arrayTest]').val([ 1, 2 ]);
+ ok( elements[0].checked, "First element was checked" );
+ ok( elements[1].checked, "Second element was checked" );
+ ok( !elements[2].checked, "Third element was unchecked" );
+ ok( !elements[3].checked, "Fourth element remained unchecked" );
+
+ elements.remove();
+});
test("val(Function) with incoming value", function() {
expect(10);
@@ -473,7 +559,7 @@ test("addClass(Function)", function() {
});
test("addClass(Function) with incoming value", function() {
- expect(39);
+ expect(45);
var div = jQuery("div"), old = div.map(function(){
return jQuery(this).attr("class");
@@ -546,7 +632,7 @@ test("removeClass(Function) - simple", function() {
});
test("removeClass(Function) with incoming value", function() {
- expect(39);
+ expect(45);
var $divs = jQuery('div').addClass("test"), old = $divs.map(function(){
return jQuery(this).attr("class");