2011-01-09 22:58:47 +01:00
module ( "attributes" , { teardown : moduleTeardown } ) ;
2009-04-20 19:05:18 +02:00
2009-12-10 05:57:19 +01:00
var bareObj = function ( value ) { return value ; } ;
var functionReturningObj = function ( value ) { return ( function ( ) { return value ; } ) ; } ;
2011-03-14 02:27:45 +01:00
2011-03-25 06:46:29 +01:00
test ( "jQuery.attrFix integrity test" , function ( ) {
expect ( 1 ) ;
// This must be maintained and equal jQuery.attrFix when appropriate
// Ensure that accidental or erroneous property
// overwrites don't occur
// This is simply for better code coverage and future proofing.
var propsShouldBe ;
if ( ! jQuery . support . getSetAttribute ) {
propsShouldBe = {
tabindex : "tabIndex" ,
2011-04-04 00:18:32 +02:00
readonly : "readOnly" ,
2011-03-14 02:27:45 +01:00
"for" : "htmlFor" ,
"class" : "className" ,
maxlength : "maxLength" ,
cellspacing : "cellSpacing" ,
rowspan : "rowSpan" ,
colspan : "colSpan" ,
usemap : "useMap" ,
frameborder : "frameBorder"
} ;
2011-03-25 06:46:29 +01:00
} else {
propsShouldBe = {
2011-04-04 00:18:32 +02:00
tabindex : "tabIndex" ,
readonly : "readOnly"
2011-03-25 06:46:29 +01:00
} ;
}
2011-03-14 02:27:45 +01:00
2011-03-25 06:46:29 +01:00
same ( propsShouldBe , jQuery . attrFix , "jQuery.attrFix passes integrity check" ) ;
} ) ;
2011-03-14 02:27:45 +01:00
2011-03-16 03:47:20 +01:00
test ( "prop(String, Object)" , function ( ) {
2011-03-14 03:24:45 +01:00
expect ( 19 ) ;
2011-03-08 18:07:05 +01:00
equals ( jQuery ( '#text1' ) . prop ( 'value' ) , "Test" , 'Check for value attribute' ) ;
equals ( jQuery ( '#text1' ) . prop ( 'value' , "Test2" ) . prop ( 'defaultValue' ) , "Test" , 'Check for defaultValue attribute' ) ;
equals ( jQuery ( '#select2' ) . prop ( 'selectedIndex' ) , 3 , 'Check for selectedIndex attribute' ) ;
equals ( jQuery ( '#foo' ) . prop ( 'nodeName' ) . toUpperCase ( ) , 'DIV' , 'Check for nodeName attribute' ) ;
equals ( jQuery ( '#foo' ) . prop ( 'tagName' ) . toUpperCase ( ) , 'DIV' , 'Check for tagName attribute' ) ;
equals ( jQuery ( "<option/>" ) . prop ( "selected" ) , false , "Check selected attribute on disconnected element." ) ;
var body = document . body , $body = jQuery ( body ) ;
ok ( $body . prop ( 'nextSibling' ) === null , 'Make sure a null expando returns null' ) ;
body . foo = 'bar' ;
equals ( $body . prop ( 'foo' ) , 'bar' , 'Make sure the expando is preferred over the dom attribute' ) ;
body . foo = undefined ;
2011-03-10 02:20:53 +01:00
ok ( $body . prop ( 'foo' ) === undefined , 'Make sure the expando is preferred over the dom attribute, even if undefined' ) ;
2011-03-08 18:07:05 +01:00
var select = document . createElement ( "select" ) , optgroup = document . createElement ( "optgroup" ) , option = document . createElement ( "option" ) ;
optgroup . appendChild ( option ) ;
select . appendChild ( optgroup ) ;
2011-03-10 02:20:53 +01:00
2011-03-08 18:07:05 +01:00
equals ( jQuery ( option ) . prop ( "selected" ) , true , "Make sure that a single option is selected, even when in an optgroup." ) ;
equals ( jQuery ( document ) . prop ( "nodeName" ) , "#document" , "prop 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 ) . prop ( "nonexisting" ) , undefined , "prop works correctly for non existing attributes (bug #7500)." ) ;
} ) ;
2011-03-14 03:24:45 +01:00
var obj = { } ;
jQuery . each ( [ document , obj ] , function ( i , ele ) {
var $ele = jQuery ( ele ) ;
$ele . prop ( "nonexisting" , "foo" ) ;
equal ( $ele . prop ( "nonexisting" ) , "foo" , "prop(name, value) works correctly for non existing attributes (bug #7500)." ) ;
} ) ;
jQuery ( document ) . removeProp ( "nonexisting" ) ;
2010-11-09 22:31:52 +01:00
} ) ;
2009-03-18 22:15:38 +01:00
test ( "attr(String)" , function ( ) {
2011-04-09 23:25:06 +02:00
expect ( 32 ) ;
2010-12-30 07:34:48 +01:00
2009-03-18 22:15:38 +01:00
equals ( jQuery ( '#text1' ) . attr ( 'type' ) , "text" , 'Check for type attribute' ) ;
equals ( jQuery ( '#radio1' ) . attr ( 'type' ) , "radio" , 'Check for type attribute' ) ;
equals ( jQuery ( '#check1' ) . attr ( 'type' ) , "checkbox" , 'Check for type attribute' ) ;
equals ( jQuery ( '#simon1' ) . attr ( 'rel' ) , "bookmark" , 'Check for rel attribute' ) ;
equals ( jQuery ( '#google' ) . attr ( 'title' ) , "Google!" , 'Check for title attribute' ) ;
equals ( jQuery ( '#mark' ) . attr ( 'hreflang' ) , "en" , 'Check for hreflang attribute' ) ;
equals ( jQuery ( '#en' ) . attr ( 'lang' ) , "en" , 'Check for lang attribute' ) ;
equals ( jQuery ( '#simon' ) . attr ( 'class' ) , "blog link" , 'Check for class attribute' ) ;
equals ( jQuery ( '#name' ) . attr ( 'name' ) , "name" , 'Check for name attribute' ) ;
equals ( jQuery ( '#text1' ) . attr ( 'name' ) , "action" , 'Check for name attribute' ) ;
ok ( jQuery ( '#form' ) . attr ( 'action' ) . indexOf ( "formaction" ) >= 0 , 'Check for action attribute' ) ;
2011-03-26 02:13:25 +01:00
equals ( jQuery ( '#form' ) . attr ( 'blah' , 'blah' ) . attr ( 'blah' ) , 'blah' , 'Set non-existant attribute on a form' ) ;
2011-04-09 23:25:06 +02:00
equals ( jQuery ( '#foo' ) . attr ( 'height' ) , undefined , 'Non existent height attribute should return undefined' ) ;
2011-03-25 07:07:15 +01:00
2011-03-25 05:35:50 +01:00
// [7472] & [3113] (form contains an input with name="action" or name="id")
2011-03-25 07:07:15 +01:00
var extras = jQuery ( '<input name="id" name="name" /><input id="target" name="target" />' ) . appendTo ( '#testForm' ) ;
2011-03-25 05:35:50 +01:00
equals ( jQuery ( '#form' ) . attr ( 'action' , 'newformaction' ) . attr ( 'action' ) , 'newformaction' , 'Check that action attribute was changed' ) ;
2011-03-25 06:46:29 +01:00
equals ( jQuery ( '#testForm' ) . attr ( 'target' ) , undefined , 'Retrieving target does not equal the input with name=target' ) ;
equals ( jQuery ( '#testForm' ) . attr ( 'target' , 'newTarget' ) . attr ( 'target' ) , 'newTarget' , 'Set target successfully on a form' ) ;
equals ( jQuery ( '#testForm' ) . removeAttr ( 'id' ) . attr ( 'id' ) , undefined , 'Retrieving id does not equal the input with name=id after id is removed [#7472]' ) ;
2011-03-25 07:07:15 +01:00
// Bug #3685 (form contains input with name="name")
equals ( jQuery ( '#testForm' ) . attr ( 'name' ) , undefined , 'Retrieving name does not retrieve input with name=name' ) ;
extras . remove ( ) ;
2011-03-25 05:35:50 +01:00
2009-03-18 22:15:38 +01:00
equals ( jQuery ( '#text1' ) . attr ( 'maxlength' ) , '30' , 'Check for maxlength attribute' ) ;
equals ( jQuery ( '#text1' ) . attr ( 'maxLength' ) , '30' , 'Check for maxLength attribute' ) ;
equals ( jQuery ( '#area1' ) . attr ( 'maxLength' ) , '30' , 'Check for maxLength attribute' ) ;
2010-08-26 18:36:50 +02:00
// using innerHTML in IE causes href attribute to be serialized to the full path
jQuery ( '<a/>' ) . attr ( { 'id' : 'tAnchor5' , 'href' : '#5' } ) . appendTo ( '#main' ) ;
2009-03-18 22:15:38 +01:00
equals ( jQuery ( '#tAnchor5' ) . attr ( 'href' ) , "#5" , 'Check for non-absolute href (an anchor)' ) ;
2011-04-02 03:38:54 +02:00
// list attribute is readonly by default in browsers that support it
2011-04-09 21:56:35 +02:00
jQuery ( '#list-test' ) . attr ( 'list' , 'datalist' ) ;
equals ( jQuery ( '#list-test' ) . attr ( 'list' ) , 'datalist' , 'Check setting list attribute' ) ;
2011-04-02 03:38:54 +02:00
2009-03-18 22:15:38 +01:00
// Related to [5574] and [5683]
var body = document . body , $body = jQuery ( body ) ;
2011-03-10 02:20:53 +01:00
strictEqual ( $body . attr ( 'foo' ) , undefined , 'Make sure that a non existent attribute returns undefined' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
body . setAttribute ( 'foo' , 'baz' ) ;
equals ( $body . attr ( 'foo' ) , 'baz' , 'Make sure the dom attribute is retrieved when no expando is found' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
$body . attr ( 'foo' , 'cool' ) ;
equals ( $body . attr ( 'foo' ) , 'cool' , 'Make sure that setting works well when both expando and dom attribute are available' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
body . removeAttribute ( 'foo' ) ; // Cleanup
2009-12-22 21:02:52 +01:00
2011-04-02 03:13:01 +02:00
var $img = jQuery ( '<img style="display:none" width="215" height="53" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif"/>' ) . appendTo ( 'body' ) ;
equals ( $img . attr ( 'width' ) , "215" , "Retrieve width attribute an an element with display:none." ) ;
equals ( $img . attr ( 'height' ) , "53" , "Retrieve height attribute an an element with display:none." ) ;
2011-03-30 03:49:37 +02:00
// Check for style support
2011-04-04 00:47:44 +02:00
ok ( ! ! ~ jQuery ( '#dl' ) . attr ( 'style' ) . indexOf ( 'position' ) , 'Check style attribute getter, also normalize css props to lowercase' ) ;
ok ( ! ! ~ jQuery ( '#foo' ) . attr ( 'style' , 'position:absolute;' ) . attr ( 'style' ) . indexOf ( 'position' ) , 'Check style setter' ) ;
2011-04-02 03:13:01 +02:00
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." ) ;
2009-03-18 22:15:38 +01:00
} ) ;
if ( ! isLocal ) {
test ( "attr(String) in XML Files" , function ( ) {
expect ( 2 ) ;
stop ( ) ;
jQuery . get ( "data/dashboard.xml" , function ( xml ) {
equals ( jQuery ( "locations" , xml ) . attr ( "class" ) , "foo" , "Check class attribute in XML document" ) ;
equals ( jQuery ( "location" , xml ) . attr ( "for" ) , "bar" , "Check for attribute in XML document" ) ;
start ( ) ;
} ) ;
} ) ;
}
test ( "attr(String, Function)" , function ( ) {
expect ( 2 ) ;
2011-03-10 02:20:53 +01:00
equals ( jQuery ( '#text1' ) . attr ( 'value' , function ( ) { return this . id ; } ) [ 0 ] . value , "text1" , "Set value from id" ) ;
equals ( jQuery ( '#text1' ) . attr ( 'title' , function ( i ) { return i ; } ) . attr ( 'title' ) , "0" , "Set value with an index" ) ;
2009-03-18 22:15:38 +01:00
} ) ;
test ( "attr(Hash)" , function ( ) {
2009-07-11 15:57:38 +02:00
expect ( 3 ) ;
2009-03-18 22:15:38 +01:00
var pass = true ;
jQuery ( "div" ) . attr ( { foo : 'baz' , zoo : 'ping' } ) . each ( function ( ) {
if ( this . getAttribute ( 'foo' ) != "baz" && this . getAttribute ( 'zoo' ) != "ping" ) pass = false ;
} ) ;
ok ( pass , "Set Multiple Attributes" ) ;
2009-12-10 06:15:49 +01:00
equals ( jQuery ( '#text1' ) . attr ( { 'value' : function ( ) { return this . id ; } } ) [ 0 ] . value , "text1" , "Set attribute to computed value #1" ) ;
equals ( jQuery ( '#text1' ) . attr ( { 'title' : function ( i ) { return i ; } } ) . attr ( 'title' ) , "0" , "Set attribute to computed value #2" ) ;
2009-07-11 15:57:38 +02:00
2009-03-18 22:15:38 +01:00
} ) ;
test ( "attr(String, Object)" , function ( ) {
2011-04-09 23:25:06 +02:00
expect ( 29 ) ;
2010-09-28 17:12:13 +02:00
2009-03-18 22:15:38 +01:00
var div = jQuery ( "div" ) . attr ( "foo" , "bar" ) ,
fail = false ;
2010-09-28 17:12:13 +02:00
2009-03-18 22:15:38 +01:00
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
if ( div . get ( i ) . getAttribute ( 'foo' ) != "bar" ) {
fail = i ;
break ;
}
}
2010-09-28 17:12:13 +02:00
2009-03-18 22:15:38 +01:00
equals ( fail , false , "Set Attribute, the #" + fail + " element didn't get the attribute 'foo'" ) ;
2009-09-15 19:23:26 +02:00
// Fails on IE since recent changes to .attr()
// ok( jQuery("#foo").attr({"width": null}), "Try to set an attribute to nothing" );
2009-03-18 22:15:38 +01:00
jQuery ( "#name" ) . attr ( 'name' , 'something' ) ;
equals ( jQuery ( "#name" ) . attr ( 'name' ) , 'something' , 'Set name attribute' ) ;
2010-09-28 17:12:13 +02:00
jQuery ( "#name" ) . attr ( 'name' , null ) ;
2011-03-08 18:07:05 +01:00
equals ( jQuery ( "#name" ) . attr ( 'name' ) , undefined , 'Remove name attribute' ) ;
2009-03-18 22:15:38 +01:00
jQuery ( "#check2" ) . attr ( 'checked' , true ) ;
equals ( document . getElementById ( 'check2' ) . checked , true , 'Set checked attribute' ) ;
jQuery ( "#check2" ) . attr ( 'checked' , false ) ;
equals ( document . getElementById ( 'check2' ) . checked , false , 'Set checked attribute' ) ;
jQuery ( "#text1" ) . attr ( 'readonly' , true ) ;
equals ( document . getElementById ( 'text1' ) . readOnly , true , 'Set readonly attribute' ) ;
jQuery ( "#text1" ) . attr ( 'readonly' , false ) ;
equals ( document . getElementById ( 'text1' ) . readOnly , false , 'Set readonly attribute' ) ;
jQuery ( "#name" ) . attr ( 'maxlength' , '5' ) ;
2011-03-08 18:07:05 +01:00
equals ( document . getElementById ( 'name' ) . maxLength , 5 , 'Set maxlength attribute' ) ;
2009-03-18 22:15:38 +01:00
jQuery ( "#name" ) . attr ( 'maxLength' , '10' ) ;
2011-03-08 18:07:05 +01:00
equals ( document . getElementById ( 'name' ) . maxLength , 10 , 'Set maxlength attribute' ) ;
2011-03-14 03:24:45 +01:00
var $p = jQuery ( '#firstp' ) . attr ( 'nonexisting' , 'foo' ) ;
equals ( $p . attr ( 'nonexisting' ) , 'foo' , "attr(name, value) works correctly for non existing attributes (bug #7500)." ) ;
$p . removeAttr ( 'nonexisting' ) ;
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ;
jQuery . each ( [ commentNode , textNode , attributeNode ] , 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)." ) ;
} ) ;
2010-11-13 14:39:28 +01:00
2009-05-16 17:10:24 +02:00
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" ) ;
equals ( td [ 0 ] . rowSpan , 2 , "Check rowspan is correctly set" ) ;
td . attr ( "colspan" , "2" ) ;
equals ( td [ 0 ] . colSpan , 2 , "Check colspan is correctly set" ) ;
table . attr ( "cellspacing" , "2" ) ;
2011-03-26 02:13:25 +01:00
equals ( table [ 0 ] . cellSpacing , "2" , "Check cellspacing is correctly set" ) ;
2009-05-16 17:10:24 +02:00
2009-03-18 22:15:38 +01:00
// for #1070
jQuery ( "#name" ) . attr ( 'someAttr' , '0' ) ;
equals ( jQuery ( "#name" ) . attr ( 'someAttr' ) , '0' , 'Set attribute to a string of "0"' ) ;
jQuery ( "#name" ) . attr ( 'someAttr' , 0 ) ;
2011-03-25 15:40:46 +01:00
equals ( jQuery ( "#name" ) . attr ( 'someAttr' ) , '0' , 'Set attribute to the number 0' ) ;
2009-03-18 22:15:38 +01:00
jQuery ( "#name" ) . attr ( 'someAttr' , 1 ) ;
2011-03-25 15:40:46 +01:00
equals ( jQuery ( "#name" ) . attr ( 'someAttr' ) , '1' , 'Set attribute to the number 1' ) ;
2009-03-18 22:15:38 +01:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . attr ( "name" , "attrvalue" ) ;
equals ( j . attr ( "name" ) , "attrvalue" , "Check node,textnode,comment for attr" ) ;
j . removeAttr ( "name" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2011-03-25 15:40:46 +01:00
// Type
2009-03-18 22:15:38 +01:00
var type = jQuery ( "#check2" ) . attr ( 'type' ) ;
var thrown = false ;
try {
jQuery ( "#check2" ) . attr ( 'type' , 'hidden' ) ;
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
equals ( type , jQuery ( "#check2" ) . attr ( 'type' ) , "Verify that you can't change the type of an input element" ) ;
var check = document . createElement ( "input" ) ;
var thrown = true ;
try {
jQuery ( check ) . attr ( 'type' , 'checkbox' ) ;
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
equals ( "checkbox" , jQuery ( check ) . attr ( 'type' ) , "Verify that you can change the type of an input element that isn't in the DOM" ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var check = jQuery ( "<input />" ) ;
var thrown = true ;
try {
check . attr ( 'type' , 'checkbox' ) ;
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
equals ( "checkbox" , check . attr ( 'type' ) , "Verify that you can change the type of an input element that isn't in the DOM" ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var button = jQuery ( "#button" ) ;
var thrown = false ;
try {
button . attr ( 'type' , 'submit' ) ;
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
equals ( "button" , button . attr ( 'type' ) , "Verify that you can't change the type of a button element" ) ;
2011-03-25 15:40:46 +01:00
// Setting attributes on svg elements (bug #3116)
var $svg = jQuery ( '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" width="3000" height="3000">'
+ '<circle cx="200" cy="200" r="150" />'
+ '</svg>' ) . appendTo ( 'body' ) ;
equals ( $svg . attr ( 'cx' , 100 ) . attr ( 'cx' ) , "100" , "Set attribute on svg element" ) ;
$svg . remove ( ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-09-15 19:23:26 +02:00
test ( "attr(jquery_method)" , function ( ) {
2009-12-17 20:18:15 +01:00
expect ( 7 ) ;
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
var $elem = jQuery ( "<div />" ) ,
elem = $elem [ 0 ] ;
2010-12-30 07:34:48 +01:00
// one at a time
2009-12-18 18:41:53 +01:00
$elem . attr ( { 'html' : 'foo' } , true ) ;
2009-09-15 19:23:26 +02:00
equals ( elem . innerHTML , 'foo' , 'attr(html)' ) ;
2010-12-30 07:34:48 +01:00
2009-12-18 18:41:53 +01:00
$elem . attr ( { 'text' : 'bar' } , true ) ;
2009-09-15 19:23:26 +02:00
equals ( elem . innerHTML , 'bar' , 'attr(text)' ) ;
2010-12-30 07:34:48 +01:00
2009-12-18 18:41:53 +01:00
$elem . attr ( { 'css' : { color : 'red' } } , true ) ;
2009-11-30 20:31:32 +01:00
ok ( /^(#ff0000|red)$/i . test ( elem . style . color ) , 'attr(css)' ) ;
2010-12-30 07:34:48 +01:00
2009-12-18 18:41:53 +01:00
$elem . attr ( { 'height' : 10 } , true ) ;
2009-09-15 19:23:26 +02:00
equals ( elem . style . height , '10px' , 'attr(height)' ) ;
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
// Multiple attributes
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
$elem . attr ( {
width : 10 ,
css : { paddingLeft : 1 , paddingRight : 1 }
2009-12-18 18:41:53 +01:00
} , true ) ;
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
equals ( elem . style . width , '10px' , 'attr({...})' ) ;
equals ( elem . style . paddingLeft , '1px' , 'attr({...})' ) ;
equals ( elem . style . paddingRight , '1px' , 'attr({...})' ) ;
} ) ;
2009-03-18 22:15:38 +01:00
if ( ! isLocal ) {
test ( "attr(String, Object) - Loaded via XML document" , function ( ) {
expect ( 2 ) ;
stop ( ) ;
jQuery . get ( 'data/dashboard.xml' , function ( xml ) {
var titles = [ ] ;
jQuery ( 'tab' , xml ) . each ( function ( ) {
titles . push ( jQuery ( this ) . attr ( 'title' ) ) ;
} ) ;
equals ( titles [ 0 ] , 'Location' , 'attr() in XML context: Check first title' ) ;
equals ( titles [ 1 ] , 'Users' , 'attr() in XML context: Check second title' ) ;
start ( ) ;
} ) ;
} ) ;
}
test ( "attr('tabindex')" , function ( ) {
expect ( 8 ) ;
// elements not natively tabbable
equals ( jQuery ( '#listWithTabIndex' ) . attr ( 'tabindex' ) , 5 , 'not natively tabbable, with tabindex set to 0' ) ;
equals ( jQuery ( '#divWithNoTabIndex' ) . attr ( 'tabindex' ) , undefined , 'not natively tabbable, no tabindex set' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
// anchor with href
equals ( jQuery ( '#linkWithNoTabIndex' ) . attr ( 'tabindex' ) , 0 , 'anchor with href, no tabindex set' ) ;
equals ( jQuery ( '#linkWithTabIndex' ) . attr ( 'tabindex' ) , 2 , 'anchor with href, tabindex set to 2' ) ;
equals ( jQuery ( '#linkWithNegativeTabIndex' ) . attr ( 'tabindex' ) , - 1 , 'anchor with href, tabindex set to -1' ) ;
// anchor without href
equals ( jQuery ( '#linkWithNoHrefWithNoTabIndex' ) . attr ( 'tabindex' ) , undefined , 'anchor without href, no tabindex set' ) ;
equals ( jQuery ( '#linkWithNoHrefWithTabIndex' ) . attr ( 'tabindex' ) , 1 , 'anchor without href, tabindex set to 2' ) ;
equals ( jQuery ( '#linkWithNoHrefWithNegativeTabIndex' ) . attr ( 'tabindex' ) , - 1 , 'anchor without href, no tabindex set' ) ;
} ) ;
test ( "attr('tabindex', value)" , function ( ) {
expect ( 9 ) ;
var element = jQuery ( '#divWithNoTabIndex' ) ;
equals ( element . attr ( 'tabindex' ) , undefined , 'start with no tabindex' ) ;
// set a positive string
element . attr ( 'tabindex' , '1' ) ;
equals ( element . attr ( 'tabindex' ) , 1 , 'set tabindex to 1 (string)' ) ;
// set a zero string
element . attr ( 'tabindex' , '0' ) ;
equals ( element . attr ( 'tabindex' ) , 0 , 'set tabindex to 0 (string)' ) ;
// set a negative string
element . attr ( 'tabindex' , '-1' ) ;
equals ( element . attr ( 'tabindex' ) , - 1 , 'set tabindex to -1 (string)' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
// set a positive number
element . attr ( 'tabindex' , 1 ) ;
equals ( element . attr ( 'tabindex' ) , 1 , 'set tabindex to 1 (number)' ) ;
// set a zero number
element . attr ( 'tabindex' , 0 ) ;
equals ( element . attr ( 'tabindex' ) , 0 , 'set tabindex to 0 (number)' ) ;
// set a negative number
element . attr ( 'tabindex' , - 1 ) ;
equals ( element . attr ( 'tabindex' ) , - 1 , 'set tabindex to -1 (number)' ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
element = jQuery ( '#linkWithTabIndex' ) ;
equals ( element . attr ( 'tabindex' ) , 2 , 'start with tabindex 2' ) ;
element . attr ( 'tabindex' , - 1 ) ;
equals ( element . attr ( 'tabindex' ) , - 1 , 'set negative tabindex' ) ;
} ) ;
2010-01-07 17:15:40 +01:00
test ( "removeAttr(String)" , function ( ) {
2011-04-09 23:25:06 +02:00
expect ( 5 ) ;
2010-01-07 17:15:40 +01:00
equals ( jQuery ( '#mark' ) . removeAttr ( "class" ) [ 0 ] . className , "" , "remove class" ) ;
2011-03-26 02:13:25 +01:00
equals ( jQuery ( '#form' ) . removeAttr ( 'id' ) . attr ( 'id' ) , undefined , 'Remove id' ) ;
2011-04-04 00:18:32 +02:00
equals ( jQuery ( '#foo' ) . attr ( 'style' , 'position:absolute;' ) . removeAttr ( 'style' ) . attr ( 'style' ) , undefined , 'Check removing style attribute' ) ;
equals ( jQuery ( '#form' ) . attr ( 'style' , 'position:absolute;' ) . removeAttr ( 'style' ) . attr ( 'style' ) , undefined , 'Check removing style attribute on a form' ) ;
2011-04-09 23:25:06 +02:00
equals ( jQuery ( '#fx-test-group' ) . attr ( 'height' , '3px' ) . removeAttr ( 'height' ) . css ( 'height' ) , "1px" , 'Removing height attribute has no effect on height set with style attribute' ) ;
2011-03-08 18:07:05 +01:00
} ) ;
test ( "removeProp(String)" , function ( ) {
expect ( 6 ) ;
2010-11-13 14:39:28 +01:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ,
obj = { } ;
2011-03-08 18:07:05 +01:00
strictEqual ( jQuery ( "#firstp" ) . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) [ 0 ] . nonexisting , undefined , "removeprop works correctly on DOM element nodes" ) ;
2010-11-13 14:39:28 +01:00
2010-12-07 03:17:42 +01:00
jQuery . each ( [ document , obj ] , function ( i , ele ) {
2010-11-13 14:39:28 +01:00
var $ele = jQuery ( ele ) ;
2011-03-08 18:07:05 +01:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 14:39:28 +01:00
} ) ;
2010-12-07 03:17:42 +01:00
jQuery . each ( [ commentNode , textNode , attributeNode ] , function ( i , ele ) {
2010-11-13 14:39:28 +01:00
$ele = jQuery ( ele ) ;
2011-03-08 18:07:05 +01:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 14:39:28 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
} ) ;
2010-01-07 15:55:15 +01:00
test ( "val()" , function ( ) {
2010-09-28 17:36:28 +02:00
expect ( 23 ) ;
2010-01-07 15:55:15 +01:00
document . getElementById ( 'text1' ) . value = "bla" ;
equals ( jQuery ( "#text1" ) . val ( ) , "bla" , "Check for modified value of input element" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2010-01-07 15:55:15 +01:00
equals ( jQuery ( "#text1" ) . val ( ) , "Test" , "Check for value of input element" ) ;
// ticket #1714 this caused a JS error in IE
equals ( jQuery ( "#first" ) . val ( ) , "" , "Check a paragraph element to see if it has a value" ) ;
ok ( jQuery ( [ ] ) . val ( ) === undefined , "Check an empty jQuery object will return undefined from val" ) ;
equals ( jQuery ( '#select2' ) . val ( ) , '3' , 'Call val() on a single="single" select' ) ;
same ( jQuery ( '#select3' ) . val ( ) , [ '1' , '2' ] , 'Call val() on a multiple="multiple" select' ) ;
equals ( jQuery ( '#option3c' ) . val ( ) , '2' , 'Call val() on a option element with value' ) ;
equals ( jQuery ( '#option3a' ) . val ( ) , '' , 'Call val() on a option element with empty value' ) ;
equals ( jQuery ( '#option3e' ) . val ( ) , 'no value' , 'Call val() on a option element with no value attribute' ) ;
equals ( jQuery ( '#option3a' ) . val ( ) , '' , 'Call val() on a option element with no value attribute' ) ;
jQuery ( '#select3' ) . val ( "" ) ;
same ( jQuery ( '#select3' ) . val ( ) , [ '' ] , 'Call val() on a multiple="multiple" select' ) ;
2010-09-24 23:26:22 +02:00
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' ) ;
2010-09-28 17:36:28 +02:00
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." ) ;
2010-08-23 23:23:13 +02:00
var checks = jQuery ( "<input type='checkbox' name='test' value='1'/><input type='checkbox' name='test' value='2'/><input type='checkbox' name='test' value=''/><input type='checkbox' name='test'/>" ) . appendTo ( "#form" ) ;
2010-01-07 15:55:15 +01:00
same ( checks . serialize ( ) , "" , "Get unchecked values." ) ;
equals ( checks . eq ( 3 ) . val ( ) , "on" , "Make sure a value of 'on' is provided if none is specified." ) ;
checks . val ( [ "2" ] ) ;
same ( checks . serialize ( ) , "test=2" , "Get a single checked value." ) ;
checks . val ( [ "1" , "" ] ) ;
same ( checks . serialize ( ) , "test=1&test=" , "Get multiple checked values." ) ;
checks . val ( [ "" , "2" ] ) ;
same ( checks . serialize ( ) , "test=2&test=" , "Get multiple checked values." ) ;
checks . val ( [ "1" , "on" ] ) ;
same ( checks . serialize ( ) , "test=1&test=on" , "Get multiple checked values." ) ;
checks . remove ( ) ;
} ) ;
var testVal = function ( valueObj ) {
2010-08-21 04:32:34 +02:00
expect ( 8 ) ;
2010-01-07 15:55:15 +01:00
jQuery ( "#text1" ) . val ( valueObj ( 'test' ) ) ;
equals ( document . getElementById ( 'text1' ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
2010-08-21 04:32:34 +02:00
jQuery ( "#text1" ) . val ( valueObj ( undefined ) ) ;
equals ( document . getElementById ( 'text1' ) . value , "" , "Check for modified (via val(undefined)) value of input element" ) ;
2010-01-07 15:55:15 +01:00
jQuery ( "#text1" ) . val ( valueObj ( 67 ) ) ;
equals ( document . getElementById ( 'text1' ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
2010-08-21 04:32:34 +02:00
jQuery ( "#text1" ) . val ( valueObj ( null ) ) ;
equals ( document . getElementById ( 'text1' ) . value , "" , "Check for modified (via val(null)) value of input element" ) ;
2010-01-07 15:55:15 +01:00
jQuery ( "#select1" ) . val ( valueObj ( "3" ) ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
jQuery ( "#select1" ) . val ( valueObj ( 2 ) ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
jQuery ( "#select1" ) . append ( "<option value='4'>four</option>" ) ;
jQuery ( "#select1" ) . val ( valueObj ( 4 ) ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . val ( valueObj ( "asdf" ) ) ;
equals ( j . val ( ) , "asdf" , "Check node,textnode,comment with val()" ) ;
j . removeAttr ( "value" ) ;
}
test ( "val(String/Number)" , function ( ) {
testVal ( bareObj ) ;
} ) ;
test ( "val(Function)" , function ( ) {
testVal ( functionReturningObj ) ;
2010-10-09 05:48:06 +02:00
} ) ;
test ( "val(Array of Numbers) (Bug #7123)" , function ( ) {
expect ( 4 ) ;
jQuery ( '#form' ) . append ( '<input type="checkbox" name="arrayTest" value="1" /><input type="checkbox" name="arrayTest" value="2" /><input type="checkbox" name="arrayTest" value="3" checked="checked" /><input type="checkbox" name="arrayTest" value="4" />' ) ;
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" ) ;
2010-12-30 07:34:48 +01:00
2010-10-09 05:48:06 +02:00
elements . remove ( ) ;
} ) ;
2010-01-07 15:55:15 +01:00
2010-01-07 17:15:40 +01:00
test ( "val(Function) with incoming value" , function ( ) {
expect ( 10 ) ;
var oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
equals ( document . getElementById ( 'text1' ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 67 ;
} ) ;
equals ( document . getElementById ( 'text1' ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return "3" ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 2 ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
jQuery ( "#select1" ) . append ( "<option value='4'>four</option>" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 4 ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
} ) ;
2011-02-10 23:50:02 +01:00
// testing if a form.reset() breaks a subsequent call to a select element's .val() (in IE only)
test ( "val(select) after form.reset() (Bug #2551)" , function ( ) {
expect ( 3 ) ;
jQuery ( '<form id="kk" name="kk"><select id="kkk"><option value="cf">cf</option><option value="gf">gf</option></select></form>' ) . appendTo ( "#main" ) ;
jQuery ( "#kkk" ) . val ( "gf" ) ;
document . kk . reset ( ) ;
equal ( jQuery ( "#kkk" ) [ 0 ] . value , "cf" , "Check value of select after form reset." ) ;
equal ( jQuery ( "#kkk" ) . val ( ) , "cf" , "Check value of select after form reset." ) ;
// re-verify the multi-select is not broken (after form.reset) by our fix for single-select
same ( jQuery ( '#select3' ) . val ( ) , [ '1' , '2' ] , 'Call val() on a multiple="multiple" select' ) ;
jQuery ( "#kk" ) . remove ( ) ;
} ) ;
2009-12-10 05:57:19 +01:00
var testAddClass = function ( valueObj ) {
2010-02-13 20:30:27 +01:00
expect ( 5 ) ;
2009-03-18 22:15:38 +01:00
var div = jQuery ( "div" ) ;
2009-12-10 05:57:19 +01:00
div . addClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
var pass = true ;
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
if ( div . get ( i ) . className . indexOf ( "test" ) == - 1 ) pass = false ;
}
ok ( pass , "Add Class" ) ;
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 05:57:19 +01:00
j . addClass ( valueObj ( "asdf" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( j . hasClass ( "asdf" ) , "Check node,textnode,comment for addClass" ) ;
2010-02-13 08:18:38 +01:00
div = jQuery ( "<div/>" ) ;
div . addClass ( valueObj ( "test" ) ) ;
equals ( div . attr ( "class" ) , "test" , "Make sure there's no extra whitespace." ) ;
div . attr ( "class" , " foo" ) ;
div . addClass ( valueObj ( "test" ) ) ;
equals ( div . attr ( "class" ) , "foo test" , "Make sure there's no extra whitespace." ) ;
2010-02-13 20:30:27 +01:00
div . attr ( "class" , "foo" ) ;
div . addClass ( valueObj ( "bar baz" ) ) ;
equals ( div . attr ( "class" ) , "foo bar baz" , "Make sure there isn't too much trimming." ) ;
2009-12-14 16:56:01 +01:00
} ;
2009-12-10 05:57:19 +01:00
test ( "addClass(String)" , function ( ) {
2009-12-10 06:15:49 +01:00
testAddClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "addClass(Function)" , function ( ) {
2009-12-10 06:15:49 +01:00
testAddClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "addClass(Function) with incoming value" , function ( ) {
2010-10-19 11:14:07 +02:00
expect ( 45 ) ;
2010-01-07 17:15:40 +01:00
var div = jQuery ( "div" ) , old = div . map ( function ( ) {
2011-03-08 18:07:05 +01:00
return jQuery ( this ) . attr ( "class" ) || "" ;
2010-01-07 17:15:40 +01:00
} ) ;
2011-03-08 18:07:05 +01:00
2010-01-07 17:15:40 +01:00
div . addClass ( function ( i , val ) {
2011-03-08 18:07:05 +01:00
if ( this . id !== "_firebugConsole" ) {
2010-03-23 17:12:16 +01:00
equals ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
return "test" ;
}
2010-01-07 17:15:40 +01:00
} ) ;
var pass = true ;
2011-03-08 18:07:05 +01:00
for ( var i = 0 ; i < div . length ; i ++ ) {
if ( div . get ( i ) . className . indexOf ( "test" ) == - 1 ) pass = false ;
2010-01-07 17:15:40 +01:00
}
ok ( pass , "Add Class" ) ;
} ) ;
2009-12-10 05:57:19 +01:00
var testRemoveClass = function ( valueObj ) {
2010-02-02 03:33:58 +01:00
expect ( 7 ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var $divs = jQuery ( 'div' ) ;
2009-05-02 23:14:38 +02:00
2009-12-10 05:57:19 +01:00
$divs . addClass ( "test" ) . removeClass ( valueObj ( "test" ) ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
ok ( ! $divs . is ( '.test' ) , "Remove Class" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2009-09-08 03:07:50 +02:00
$divs = jQuery ( 'div' ) ;
2009-03-18 22:15:38 +01:00
$divs . addClass ( "test" ) . addClass ( "foo" ) . addClass ( "bar" ) ;
2009-12-10 05:57:19 +01:00
$divs . removeClass ( valueObj ( "test" ) ) . removeClass ( valueObj ( "bar" ) ) . removeClass ( valueObj ( "foo" ) ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
ok ( ! $divs . is ( '.test,.bar,.foo' ) , "Remove multiple classes" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2009-09-08 03:07:50 +02:00
$divs = jQuery ( 'div' ) ;
2009-03-18 22:15:38 +01:00
// Make sure that a null value doesn't cause problems
2009-12-10 05:57:19 +01:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( null ) ) ;
2009-03-18 22:15:38 +01:00
ok ( $divs . eq ( 0 ) . is ( '.test' ) , "Null value passed to removeClass" ) ;
2009-05-02 23:14:38 +02:00
2009-12-10 05:57:19 +01:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( "" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( $divs . eq ( 0 ) . is ( '.test' ) , "Empty string passed to removeClass" ) ;
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 05:57:19 +01:00
j . removeClass ( valueObj ( "asdf" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( ! j . hasClass ( "asdf" ) , "Check node,textnode,comment for removeClass" ) ;
2010-02-02 03:33:58 +01:00
var div = document . createElement ( "div" ) ;
div . className = " test foo " ;
jQuery ( div ) . removeClass ( valueObj ( "foo" ) ) ;
equals ( div . className , "test" , "Make sure remaining className is trimmed." ) ;
div . className = " test " ;
jQuery ( div ) . removeClass ( valueObj ( "test" ) ) ;
equals ( div . className , "" , "Make sure there is nothing left after everything is removed." ) ;
2009-12-10 05:57:19 +01:00
} ;
test ( "removeClass(String) - simple" , function ( ) {
2009-12-10 06:15:49 +01:00
testRemoveClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "removeClass(Function) - simple" , function ( ) {
2009-12-10 06:15:49 +01:00
testRemoveClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "removeClass(Function) with incoming value" , function ( ) {
2010-10-19 11:14:07 +02:00
expect ( 45 ) ;
2010-01-07 17:15:40 +01:00
var $divs = jQuery ( 'div' ) . addClass ( "test" ) , old = $divs . map ( function ( ) {
return jQuery ( this ) . attr ( "class" ) ;
} ) ;
$divs . removeClass ( function ( i , val ) {
2010-03-23 17:12:16 +01:00
if ( this . id !== "_firebugConsole" ) {
equals ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
return "test" ;
}
2010-01-07 17:15:40 +01:00
} ) ;
ok ( ! $divs . is ( '.test' ) , "Remove Class" ) ;
2010-12-30 07:34:48 +01:00
QUnit . reset ( ) ;
2010-01-07 17:15:40 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
var testToggleClass = function ( valueObj ) {
2009-05-03 00:35:39 +02:00
expect ( 17 ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var e = jQuery ( "#firstp" ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
// class name with a boolean
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , true ) ;
2009-03-18 22:15:38 +01:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
// multiple class names
e . addClass ( "testA testB" ) ;
ok ( ( e . is ( ".testA.testB" ) ) , "Assert 2 different classes present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "testB testC" ) ) ;
2009-05-02 23:14:38 +02:00
ok ( ( e . is ( ".testA.testC" ) && ! e . is ( ".testB" ) ) , "Assert 1 class added, 1 class removed, and 1 class kept" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "testA testC" ) ) ;
2009-05-02 23:14:38 +02:00
ok ( ( ! e . is ( ".testA" ) && ! e . is ( ".testB" ) && ! e . is ( ".testC" ) ) , "Assert no class present" ) ;
// toggleClass storage
e . toggleClass ( true ) ;
2011-01-09 22:52:33 +01:00
ok ( e [ 0 ] . className === "" , "Assert class is empty (data was empty)" ) ;
2009-05-03 00:35:39 +02:00
e . addClass ( "testD testE" ) ;
ok ( e . is ( ".testD.testE" ) , "Assert class present" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( ) ;
2009-05-03 00:35:39 +02:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2011-01-09 22:52:33 +01:00
ok ( jQuery . _data ( e [ 0 ] , '__className__' ) === 'testD testE' , "Assert data was stored" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( ) ;
2009-05-03 00:35:39 +02:00
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( false ) ;
2009-05-03 00:35:39 +02:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( true ) ;
2009-05-03 00:35:39 +02:00
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
e . toggleClass ( ) ;
e . toggleClass ( false ) ;
e . toggleClass ( ) ;
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
2009-07-11 15:57:38 +02:00
2009-05-02 23:14:38 +02:00
// Cleanup
e . removeClass ( "testD" ) ;
2011-01-09 22:52:33 +01:00
jQuery . removeData ( e [ 0 ] , '__className__' , true ) ;
2009-12-10 05:57:19 +01:00
} ;
test ( "toggleClass(String|boolean|undefined[, boolean])" , function ( ) {
2009-12-10 06:15:49 +01:00
testToggleClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "toggleClass(Function[, boolean])" , function ( ) {
2009-12-10 06:15:49 +01:00
testToggleClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "toggleClass(Fucntion[, boolean]) with incoming value" , function ( ) {
expect ( 14 ) ;
2009-12-10 05:57:19 +01:00
2010-01-07 17:15:40 +01:00
var e = jQuery ( "#firstp" ) , old = e . attr ( "class" ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2009-12-10 05:57:19 +01:00
2010-01-07 17:15:40 +01:00
// class name with a boolean
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , false , "Make sure that the state is passed in." ) ;
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , true , "Make sure that the state is passed in." ) ;
return "test" ;
} , true ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , false , "Make sure that the state is passed in." ) ;
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
// Cleanup
e . removeClass ( "test" ) ;
2011-01-09 22:52:33 +01:00
jQuery . removeData ( e [ 0 ] , '__className__' , true ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-09-08 03:07:50 +02:00
test ( "addClass, removeClass, hasClass" , function ( ) {
2010-12-01 21:31:22 +01:00
expect ( 17 ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
var jq = jQuery ( "<p>Hi</p>" ) , x = jq [ 0 ] ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "hi" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi" , "Check single added class" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "foo bar" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi foo bar" , "Check more added classes" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . removeClass ( ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "" , "Remove all classes" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "hi foo bar" ) ;
jq . removeClass ( "foo" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi bar" , "Check removal of one class" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
ok ( jq . hasClass ( "hi" ) , "Check has1" ) ;
ok ( jq . hasClass ( "bar" ) , "Check has2" ) ;
2010-12-30 07:34:48 +01:00
2010-12-01 21:31:22 +01:00
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" ) ;
2009-12-14 22:24:28 +01:00
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" ) ;
2010-12-01 21:31:22 +01:00
ok ( jq . hasClass ( "class4" ) , "Check hasClass with carriage return" ) ;
ok ( jq . is ( ".class4" ) , "Check is with carriage return" ) ;
2010-12-30 07:34:48 +01:00
2009-12-14 22:24:28 +01:00
jq . removeClass ( "class2" ) ;
ok ( jq . hasClass ( "class2" ) == false , "Check the class has been properly removed" ) ;
jq . removeClass ( "cla" ) ;
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" ) ;
2010-12-01 21:31:22 +01:00
jq . removeClass ( "class4" ) ;
ok ( jq . hasClass ( "class4" ) == false , "Check the class has been properly removed" ) ;
2011-03-12 03:28:42 +01:00
} ) ;