2016-06-29 12:19:04 +00:00
QUnit . module ( "core" , {
2019-02-18 18:02:38 +00:00
beforeEach : function ( ) {
2019-04-04 14:53:38 +00:00
this . sandbox = sinon . createSandbox ( ) ;
2016-06-29 12:19:04 +00:00
} ,
2019-02-18 18:02:38 +00:00
afterEach : function ( ) {
2016-06-29 12:19:04 +00:00
this . sandbox . restore ( ) ;
return moduleTeardown . apply ( this , arguments ) ;
}
} ) ;
2015-08-16 03:45:28 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "Basic requirements" , function ( assert ) {
assert . expect ( 7 ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( Array . prototype . push , "Array.push()" ) ;
assert . ok ( Function . prototype . apply , "Function.apply()" ) ;
assert . ok ( document . getElementById , "getElementById" ) ;
assert . ok ( document . getElementsByTagName , "getElementsByTagName" ) ;
assert . ok ( RegExp , "RegExp" ) ;
assert . ok ( jQuery , "jQuery" ) ;
assert . ok ( $ , "$" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery()" , function ( assert ) {
2008-12-19 05:43:37 +00:00
2012-06-07 15:24:35 +00:00
var elem , i ,
2015-08-16 06:59:58 +00:00
obj = jQuery ( "div" ) ,
2020-03-16 20:49:29 +00:00
code = jQuery ( "<code></code>" ) ,
2015-08-16 06:59:58 +00:00
img = jQuery ( "<img/>" ) ,
2020-03-16 20:49:29 +00:00
div = jQuery ( "<div></div><hr/><code></code><b/>" ) ,
2012-06-07 15:24:35 +00:00
exec = false ,
2015-04-10 19:57:18 +00:00
expected = 23 ,
2012-06-07 15:24:35 +00:00
attrObj = {
2012-07-05 19:52:13 +00:00
"text" : "test" ,
2012-06-07 15:24:35 +00:00
"class" : "test2" ,
2012-07-05 19:52:13 +00:00
"id" : "test3"
2012-06-07 15:24:35 +00:00
} ;
2009-07-16 07:31:47 +00:00
2012-07-05 21:21:58 +00:00
// The $(html, props) signature can stealth-call any $.fn method, check for a
// few here but beware of modular builds where these methods may be excluded.
2022-06-28 10:39:01 +00:00
if ( includesModule ( "deprecated" ) ) {
2013-01-27 04:48:59 +00:00
expected ++ ;
2023-09-18 16:39:00 +00:00
attrObj . click = function ( ) {
assert . ok ( exec , "Click executed." ) ;
} ;
2013-01-27 04:48:59 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "dimensions" ) ) {
2012-06-07 15:24:35 +00:00
expected ++ ;
2023-09-18 16:39:00 +00:00
attrObj . width = 10 ;
2012-06-07 15:24:35 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "offset" ) ) {
2015-06-15 14:56:29 +00:00
expected ++ ;
2023-09-18 16:39:00 +00:00
attrObj . offset = { "top" : 1 , "left" : 1 } ;
2015-06-15 14:56:29 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "css" ) ) {
2012-06-11 01:54:16 +00:00
expected += 2 ;
2023-09-18 16:39:00 +00:00
attrObj . css = { "paddingLeft" : 1 , "paddingRight" : 1 } ;
2012-06-11 01:54:16 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "attributes" ) ) {
2012-07-05 21:21:58 +00:00
expected ++ ;
attrObj . attr = { "desired" : "very" } ;
}
2012-06-11 01:54:16 +00:00
2015-08-16 03:45:28 +00:00
assert . expect ( expected ) ;
2012-06-07 15:24:35 +00:00
// Basic constructor's behavior
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery ( ) . length , 0 , "jQuery() === jQuery([])" ) ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( undefined ) . length , 0 , "jQuery(undefined) === jQuery([])" ) ;
assert . equal ( jQuery ( null ) . length , 0 , "jQuery(null) === jQuery([])" ) ;
assert . equal ( jQuery ( "" ) . length , 0 , "jQuery('') === jQuery([])" ) ;
assert . deepEqual ( jQuery ( obj ) . get ( ) , obj . get ( ) , "jQuery(jQueryObj) == jQueryObj" ) ;
2009-07-17 17:33:44 +00:00
2019-07-29 19:14:46 +00:00
// Invalid #id will throw an error (gh-1682)
2014-12-03 19:51:24 +00:00
try {
jQuery ( "#" ) ;
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . ok ( true , "Threw an error on #id with no id" ) ;
2014-12-03 19:51:24 +00:00
}
2012-06-07 15:24:35 +00:00
// can actually yield more than one, when iframes are included, the window is an array as well
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( window ) . length , 1 , "Correct number of elements generated for jQuery(window)" ) ;
2009-07-16 07:31:47 +00:00
2008-12-19 05:43:37 +00:00
/ *
// disabled since this test was doing nothing. i tried to fix it but i'm not sure
// what the expected behavior should even be. FF returns "\n" for the text node
// make sure this is handled
var crlfContainer = jQuery ( '<p>\r\n</p>' ) ;
var x = crlfContainer . contents ( ) . get ( 0 ) . nodeValue ;
2015-08-16 03:45:28 +00:00
assert . equal ( x , what ? ? ? , "Check for \\r and \\n in jQuery()" ) ;
2008-12-19 05:43:37 +00:00
* /
/* / / Disabled until we add this functionality in
var pass = true ;
try {
jQuery ( "<div>Testing</div>" ) . appendTo ( document . getElementById ( "iframe" ) . contentDocument . body ) ;
} catch ( e ) {
pass = false ;
}
2022-01-04 15:27:18 +00:00
assert . ok ( pass , "jQuery('<tag>') needs optional document parameter to ease cross-frame DOM wrangling, see trac-968" ) ; * /
2008-12-19 05:43:37 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( code . length , 1 , "Correct number of elements generated for code" ) ;
assert . equal ( code . parent ( ) . length , 0 , "Make sure that the generated HTML has no parent." ) ;
2012-06-07 15:24:35 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( img . length , 1 , "Correct number of elements generated for img" ) ;
assert . equal ( img . parent ( ) . length , 0 , "Make sure that the generated HTML has no parent." ) ;
2012-06-07 15:24:35 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( div . length , 4 , "Correct number of elements generated for div hr code b" ) ;
assert . equal ( div . parent ( ) . length , 0 , "Make sure that the generated HTML has no parent." ) ;
2008-12-19 05:43:37 +00:00
2016-05-10 09:12:28 +00:00
assert . equal ( jQuery ( [ 1 , 2 , 3 ] ) . get ( 1 ) , 2 , "Test passing an array to the factory" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( document . body ) . get ( 0 ) , jQuery ( "body" ) . get ( 0 ) , "Test passing an html node to the factory" ) ;
2009-12-18 17:41:53 +00:00
2015-08-16 06:59:58 +00:00
elem = jQuery ( " <em>hello</em>" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . equal ( elem . nodeName . toLowerCase ( ) , "em" , "leading space" ) ;
2013-05-09 01:07:41 +00:00
2015-08-16 06:59:58 +00:00
elem = jQuery ( "\n\n<em>world</em>" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . equal ( elem . nodeName . toLowerCase ( ) , "em" , "leading newlines" ) ;
2013-05-09 01:07:41 +00:00
2020-03-16 20:49:29 +00:00
elem = jQuery ( "<div></div>" , attrObj ) ;
2012-06-05 20:38:18 +00:00
2022-06-28 10:39:01 +00:00
if ( includesModule ( "dimensions" ) ) {
2015-08-16 06:59:58 +00:00
assert . equal ( elem [ 0 ] . style . width , "10px" , "jQuery() quick setter width" ) ;
2012-06-07 15:24:35 +00:00
}
2012-06-05 20:38:18 +00:00
2022-06-28 10:39:01 +00:00
if ( includesModule ( "offset" ) ) {
2015-08-16 06:59:58 +00:00
assert . equal ( elem [ 0 ] . style . top , "1px" , "jQuery() quick setter offset" ) ;
2015-06-15 14:56:29 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "css" ) ) {
2015-08-16 06:59:58 +00:00
assert . equal ( elem [ 0 ] . style . paddingLeft , "1px" , "jQuery quick setter css" ) ;
assert . equal ( elem [ 0 ] . style . paddingRight , "1px" , "jQuery quick setter css" ) ;
2012-06-11 01:54:16 +00:00
}
2022-06-28 10:39:01 +00:00
if ( includesModule ( "attributes" ) ) {
2015-08-16 06:59:58 +00:00
assert . equal ( elem [ 0 ] . getAttribute ( "desired" ) , "very" , "jQuery quick setter attr" ) ;
2012-07-05 21:21:58 +00:00
}
2015-08-16 06:59:58 +00:00
assert . equal ( elem [ 0 ] . childNodes . length , 1 , "jQuery quick setter text" ) ;
assert . equal ( elem [ 0 ] . firstChild . nodeValue , "test" , "jQuery quick setter text" ) ;
assert . equal ( elem [ 0 ] . className , "test2" , "jQuery() quick setter class" ) ;
assert . equal ( elem [ 0 ] . id , "test3" , "jQuery() quick setter id" ) ;
2010-01-13 02:54:06 +00:00
exec = true ;
2015-08-16 06:59:58 +00:00
elem . trigger ( "click" ) ;
2011-01-10 00:38:44 +00:00
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
elem . remove ( ) ;
2011-01-17 21:31:43 +00:00
2012-06-07 15:24:35 +00:00
for ( i = 0 ; i < 3 ; ++ i ) {
2015-08-16 06:59:58 +00:00
elem = jQuery ( "<input type='text' value='TEST' />" ) ;
2011-01-10 00:38:44 +00:00
}
2022-01-04 15:27:18 +00:00
assert . equal ( elem [ 0 ] . defaultValue , "TEST" , "Ensure cached nodes are cloned properly (Bug trac-6655)" ) ;
2011-01-17 21:31:43 +00:00
2015-04-10 19:57:18 +00:00
elem = jQuery ( "<input type='hidden'>" , { } ) ;
2015-08-16 03:45:28 +00:00
assert . strictEqual ( elem [ 0 ] . ownerDocument , document ,
2015-04-10 19:57:18 +00:00
"Empty attributes object is not interpreted as a document (trac-8950)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 04:37:10 +00:00
2023-02-13 17:34:41 +00:00
QUnit . test ( "jQuery(selector, context)" , function ( assert ) {
2015-08-16 06:59:58 +00:00
assert . expect ( 3 ) ;
assert . deepEqual ( jQuery ( "div p" , "#qunit-fixture" ) . get ( ) , q ( "sndp" , "en" , "sap" ) , "Basic selector with string as context" ) ;
assert . deepEqual ( jQuery ( "div p" , q ( "qunit-fixture" ) [ 0 ] ) . get ( ) , q ( "sndp" , "en" , "sap" ) , "Basic selector with element as context" ) ;
assert . deepEqual ( jQuery ( "div p" , jQuery ( "#qunit-fixture" ) ) . get ( ) , q ( "sndp" , "en" , "sap" ) , "Basic selector with jQuery object as context" ) ;
} ) ;
2013-02-19 04:52:29 +00:00
2015-08-16 03:45:28 +00:00
QUnit . test ( "globalEval" , function ( assert ) {
assert . expect ( 3 ) ;
2015-08-16 06:59:58 +00:00
Globals . register ( "globalEvalTest" ) ;
2011-04-07 04:47:15 +00:00
2015-08-16 06:59:58 +00:00
jQuery . globalEval ( "globalEvalTest = 1;" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( window . globalEvalTest , 1 , "Test variable assignments are global" ) ;
2011-04-07 04:47:15 +00:00
2015-08-16 06:59:58 +00:00
jQuery . globalEval ( "var globalEvalTest = 2;" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( window . globalEvalTest , 2 , "Test variable declarations are global" ) ;
2011-04-07 04:47:15 +00:00
2015-08-16 06:59:58 +00:00
jQuery . globalEval ( "this.globalEvalTest = 3;" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( window . globalEvalTest , 3 , "Test context (this) is the window object" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2011-04-07 04:47:15 +00:00
2015-08-16 03:45:28 +00:00
QUnit . test ( "globalEval with 'use strict'" , function ( assert ) {
assert . expect ( 1 ) ;
2015-08-16 06:59:58 +00:00
Globals . register ( "strictEvalTest" ) ;
2013-04-03 15:26:07 +00:00
2015-08-16 06:59:58 +00:00
jQuery . globalEval ( "'use strict'; var strictEvalTest = 1;" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( window . strictEvalTest , 1 , "Test variable declarations are global (strict mode)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2013-04-03 15:26:07 +00:00
2022-01-04 15:27:18 +00:00
QUnit . test ( "globalEval execution after script injection (trac-7862)" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 1 ) ;
2015-07-29 15:10:04 +00:00
2013-11-29 08:15:05 +00:00
var now ,
script = document . createElement ( "script" ) ;
2017-08-01 16:52:45 +00:00
script . src = baseURL + "mock.php?action=wait&wait=2&script=1" ;
2013-11-29 08:15:05 +00:00
2017-12-11 17:39:11 +00:00
now = Date . now ( ) ;
2013-11-29 08:15:05 +00:00
document . body . appendChild ( script ) ;
2017-12-11 17:39:11 +00:00
jQuery . globalEval ( "var strictEvalTest = " + Date . now ( ) + ";" ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( window . strictEvalTest - now < 500 , "Code executed synchronously" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2013-11-29 08:15:05 +00:00
2020-02-10 18:17:22 +00:00
testIframe (
"globalEval with custom document context" ,
"core/globaleval-context.html" ,
function ( assert , framejQuery , frameWindow , frameDocument ) {
assert . expect ( 2 ) ;
jQuery . globalEval ( "window.scriptTest = true;" , { } , frameDocument ) ;
assert . ok ( ! window . scriptTest , "script executed in iframe context" ) ;
assert . ok ( frameWindow . scriptTest , "script executed in iframe context" ) ;
}
) ;
2016-08-15 15:41:11 +00:00
QUnit . test ( "noConflict" , function ( assert ) {
assert . expect ( 7 ) ;
2008-12-19 05:43:37 +00:00
2016-08-15 15:41:11 +00:00
var $$ = jQuery ;
2008-12-19 05:43:37 +00:00
2016-08-15 15:41:11 +00:00
assert . strictEqual ( jQuery , jQuery . noConflict ( ) , "noConflict returned the jQuery object" ) ;
2023-09-18 16:39:00 +00:00
assert . strictEqual ( window . jQuery , $$ , "Make sure jQuery wasn't touched." ) ;
assert . strictEqual ( window . $ , original$ , "Make sure $ was reverted." ) ;
2008-12-19 05:43:37 +00:00
2016-08-15 15:41:11 +00:00
jQuery = $ = $$ ;
2008-12-19 05:43:37 +00:00
2016-08-15 15:41:11 +00:00
assert . strictEqual ( jQuery . noConflict ( true ) , $$ , "noConflict returned the jQuery object" ) ;
2023-09-18 16:39:00 +00:00
assert . strictEqual ( window . jQuery , originaljQuery , "Make sure jQuery was reverted." ) ;
assert . strictEqual ( window . $ , original$ , "Make sure $ was reverted." ) ;
2016-08-15 15:41:11 +00:00
assert . ok ( $$ ( ) . pushStack ( [ ] ) , "Make sure that jQuery still works." ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
window . jQuery = jQuery = $$ ;
2016-08-15 15:41:11 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2019-02-18 18:02:38 +00:00
QUnit . test ( "isPlainObject" , function ( assert ) {
var done = assert . async ( ) ;
2016-03-11 15:48:00 +00:00
2016-03-14 20:46:51 +00:00
assert . expect ( 23 ) ;
2009-12-02 19:57:13 +00:00
2016-03-03 23:29:45 +00:00
var pass , iframe , doc , parentObj , childObj , deep ,
2012-11-03 04:06:50 +00:00
fn = function ( ) { } ;
2009-12-02 19:57:13 +00:00
// The use case that we want to match
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery . isPlainObject ( { } ) , "{}" ) ;
2016-03-03 23:29:45 +00:00
assert . ok ( jQuery . isPlainObject ( new window . Object ( ) ) , "new Object" ) ;
2016-03-11 15:48:00 +00:00
assert . ok ( jQuery . isPlainObject ( { constructor : fn } ) ,
"plain object with constructor property" ) ;
assert . ok ( jQuery . isPlainObject ( { constructor : "foo" } ) ,
"plain object with primitive constructor property" ) ;
2016-03-03 23:29:45 +00:00
2016-03-14 20:46:51 +00:00
parentObj = { } ;
2016-03-03 23:29:45 +00:00
childObj = Object . create ( parentObj ) ;
2016-03-14 20:46:51 +00:00
assert . ok ( ! jQuery . isPlainObject ( childObj ) , "Object.create({})" ) ;
parentObj . foo = "bar" ;
assert . ok ( ! jQuery . isPlainObject ( childObj ) , "Object.create({...})" ) ;
2016-03-03 23:29:45 +00:00
childObj . bar = "foo" ;
2016-03-14 20:46:51 +00:00
assert . ok ( ! jQuery . isPlainObject ( childObj ) , "extend(Object.create({...}), ...)" ) ;
2011-01-05 21:41:23 +00:00
2009-12-18 16:34:20 +00:00
// Not objects shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( "" ) , "string" ) ;
assert . ok ( ! jQuery . isPlainObject ( 0 ) && ! jQuery . isPlainObject ( 1 ) , "number" ) ;
assert . ok ( ! jQuery . isPlainObject ( true ) && ! jQuery . isPlainObject ( false ) , "boolean" ) ;
assert . ok ( ! jQuery . isPlainObject ( null ) , "null" ) ;
assert . ok ( ! jQuery . isPlainObject ( undefined ) , "undefined" ) ;
2011-01-05 21:41:23 +00:00
2009-12-18 16:34:20 +00:00
// Arrays shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( [ ] ) , "array" ) ;
2011-01-05 21:41:23 +00:00
2009-12-02 19:57:13 +00:00
// Instantiated objects shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( new Date ( ) ) , "new Date" ) ;
2011-01-05 21:41:23 +00:00
2009-12-02 19:57:13 +00:00
// Functions shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( fn ) , "fn" ) ;
2011-01-05 21:41:23 +00:00
2009-12-02 19:57:13 +00:00
// Again, instantiated objects shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( new fn ( ) ) , "new fn (no methods)" ) ;
2011-01-05 21:41:23 +00:00
2009-12-02 19:57:13 +00:00
// Makes the function a little more realistic
// (and harder to detect, incidentally)
2023-09-18 16:39:00 +00:00
fn . prototype . someMethod = function ( ) { } ;
2011-01-05 21:41:23 +00:00
2009-12-02 19:57:13 +00:00
// Again, instantiated objects shouldn't be matched
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( new fn ( ) ) , "new fn" ) ;
2009-12-02 19:57:13 +00:00
2016-03-11 15:48:00 +00:00
// Instantiated objects with primitive constructors shouldn't be matched
fn . prototype . constructor = "foo" ;
assert . ok ( ! jQuery . isPlainObject ( new fn ( ) ) , "new fn with primitive constructor" ) ;
2016-03-03 23:29:45 +00:00
// Deep object
deep = { "foo" : { "baz" : true } , "foo2" : document } ;
assert . ok ( jQuery . isPlainObject ( deep ) , "Object with objects is still plain" ) ;
2009-12-02 19:57:13 +00:00
// DOM Element
2015-08-16 06:59:58 +00:00
assert . ok ( ! jQuery . isPlainObject ( document . createElement ( "div" ) ) , "DOM Element" ) ;
2011-01-05 21:41:23 +00:00
2009-12-18 16:34:20 +00:00
// Window
2015-08-16 03:45:28 +00:00
assert . ok ( ! jQuery . isPlainObject ( window ) , "window" ) ;
2009-12-02 19:57:13 +00:00
2012-11-03 04:06:50 +00:00
pass = false ;
2011-07-25 21:06:38 +00:00
try {
jQuery . isPlainObject ( window . location ) ;
2012-11-03 04:06:50 +00:00
pass = true ;
} catch ( e ) { }
2015-08-16 03:45:28 +00:00
assert . ok ( pass , "Does not throw exceptions on host objects" ) ;
2012-11-03 04:06:50 +00:00
// Objects from other windows should be matched
2015-08-16 06:59:58 +00:00
Globals . register ( "iframeDone" ) ;
2013-09-03 13:55:32 +00:00
window . iframeDone = function ( otherObject , detail ) {
window . iframeDone = undefined ;
2012-11-03 04:06:50 +00:00
iframe . parentNode . removeChild ( iframe ) ;
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery . isPlainObject ( new otherObject ( ) ) , "new otherObject" + ( detail ? " - " + detail : "" ) ) ;
2019-02-18 18:02:38 +00:00
done ( ) ;
2012-11-03 04:06:50 +00:00
} ;
2011-07-25 21:06:38 +00:00
2010-08-23 19:38:55 +00:00
try {
2015-08-16 06:59:58 +00:00
iframe = jQuery ( "#qunit-fixture" ) [ 0 ] . appendChild ( document . createElement ( "iframe" ) ) ;
2012-11-03 04:06:50 +00:00
doc = iframe . contentDocument || iframe . contentWindow . document ;
2010-08-23 19:38:55 +00:00
doc . open ( ) ;
2015-08-16 06:59:58 +00:00
doc . write ( "<body onload='window.parent.iframeDone(Object);'>" ) ;
2010-08-23 19:38:55 +00:00
doc . close ( ) ;
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2012-11-03 04:06:50 +00:00
window . iframeDone ( Object , "iframes not supported" ) ;
2010-08-23 19:38:55 +00:00
}
2015-08-16 06:59:58 +00:00
} ) ;
2009-12-02 19:57:13 +00:00
2019-05-13 19:39:56 +00:00
QUnit . testUnlessIE ( "isPlainObject(Symbol)" , function ( assert ) {
2015-10-18 19:00:38 +00:00
assert . expect ( 2 ) ;
assert . equal ( jQuery . isPlainObject ( Symbol ( ) ) , false , "Symbol" ) ;
assert . equal ( jQuery . isPlainObject ( Object ( Symbol ( ) ) ) , false , "Symbol inside an object" ) ;
} ) ;
2016-04-08 10:51:32 +00:00
QUnit . test ( "isPlainObject(localStorage)" , function ( assert ) {
assert . expect ( 1 ) ;
assert . equal ( jQuery . isPlainObject ( localStorage ) , false ) ;
} ) ;
2019-05-13 19:39:56 +00:00
QUnit . testUnlessIE ( "isPlainObject(Object.assign(...))" ,
2016-03-12 13:40:41 +00:00
function ( assert ) {
assert . expect ( 1 ) ;
var parentObj = { foo : "bar" } ;
var childObj = Object . assign ( Object . create ( parentObj ) , { bar : "foo" } ) ;
assert . ok ( ! jQuery . isPlainObject ( childObj ) , "isPlainObject(Object.assign(...))" ) ;
}
) ;
2017-04-24 16:39:25 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "isXMLDoc - HTML" , function ( assert ) {
assert . expect ( 4 ) ;
2009-07-27 13:02:41 +00:00
2015-08-16 03:45:28 +00:00
assert . ok ( ! jQuery . isXMLDoc ( document ) , "HTML document" ) ;
assert . ok ( ! jQuery . isXMLDoc ( document . documentElement ) , "HTML documentElement" ) ;
assert . ok ( ! jQuery . isXMLDoc ( document . body ) , "HTML Body Element" ) ;
2009-07-27 13:02:41 +00:00
2013-04-09 15:45:09 +00:00
var body ,
2015-08-16 06:59:58 +00:00
iframe = document . createElement ( "iframe" ) ;
2009-07-27 13:02:41 +00:00
document . body . appendChild ( iframe ) ;
try {
2015-08-16 06:59:58 +00:00
body = jQuery ( iframe ) . contents ( ) [ 0 ] ;
2010-08-23 19:38:55 +00:00
try {
2015-08-16 03:45:28 +00:00
assert . ok ( ! jQuery . isXMLDoc ( body ) , "Iframe body element" ) ;
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . ok ( false , "Iframe body element exception" ) ;
2010-08-23 19:38:55 +00:00
}
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . ok ( true , "Iframe body element - iframe not working correctly" ) ;
2009-07-27 13:02:41 +00:00
}
document . body . removeChild ( iframe ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2009-07-27 13:02:41 +00:00
2019-06-26 19:39:10 +00:00
QUnit . test ( "isXMLDoc - embedded SVG" , function ( assert ) {
assert . expect ( 6 ) ;
var htmlTree = jQuery ( "<div>" +
"<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'>" +
"<desc></desc>" +
"</svg>" +
"</div>"
) [ 0 ] ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree ) , false , "disconnected div element" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree . firstChild ) , true ,
"disconnected HTML-embedded SVG root element" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree . firstChild . firstChild ) , true ,
"disconnected HTML-embedded SVG child element" ) ;
document . getElementById ( "qunit-fixture" ) . appendChild ( htmlTree ) ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree ) , false , "connected div element" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree . firstChild ) , true ,
"connected HTML-embedded SVG root element" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( htmlTree . firstChild . firstChild ) , true ,
"disconnected HTML-embedded SVG child element" ) ;
} ) ;
QUnit . test ( "isXMLDoc - XML" , function ( assert ) {
assert . expect ( 8 ) ;
var xml = createDashboardXML ( ) ;
var svg = jQuery . parseXML (
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" " +
"\"http://www.w3.org/Gaphics/SVG/1.1/DTD/svg11.dtd\">" +
"<svg version='1.1' xmlns='http://www.w3.org/2000/svg'><desc/></svg>"
) ;
assert . ok ( jQuery . isXMLDoc ( xml ) , "XML document" ) ;
assert . ok ( jQuery . isXMLDoc ( xml . documentElement ) , "XML documentElement" ) ;
assert . ok ( jQuery . isXMLDoc ( xml . documentElement . firstChild ) , "XML child element" ) ;
assert . ok ( jQuery . isXMLDoc ( jQuery ( "tab" , xml ) [ 0 ] ) , "XML tab Element" ) ;
assert . ok ( jQuery . isXMLDoc ( svg ) , "SVG document" ) ;
assert . ok ( jQuery . isXMLDoc ( svg . documentElement ) , "SVG documentElement" ) ;
assert . ok ( jQuery . isXMLDoc ( svg . documentElement . firstChild ) , "SVG child element" ) ;
assert . ok ( jQuery . isXMLDoc ( jQuery ( "desc" , svg ) [ 0 ] ) , "XML desc Element" ) ;
} ) ;
2020-12-07 20:09:15 +00:00
QUnit . test ( "isXMLDoc - falsy" , function ( assert ) {
assert . expect ( 5 ) ;
assert . strictEqual ( jQuery . isXMLDoc ( undefined ) , false , "undefined" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( null ) , false , "null" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( false ) , false , "false" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( 0 ) , false , "0" ) ;
assert . strictEqual ( jQuery . isXMLDoc ( "" ) , false , "\"\"" ) ;
} ) ;
2015-08-16 06:59:58 +00:00
QUnit . test ( "XSS via location.hash" , function ( assert ) {
2019-02-18 18:02:38 +00:00
var done = assert . async ( ) ;
2015-08-16 06:59:58 +00:00
assert . expect ( 1 ) ;
2011-11-14 17:13:25 +00:00
2023-09-18 16:39:00 +00:00
jQuery . _check9521 = function ( x ) {
2015-08-16 03:45:28 +00:00
assert . ok ( x , "script called from #id-like selector with inline handler" ) ;
2015-08-16 06:59:58 +00:00
jQuery ( "#check9521" ) . remove ( ) ;
2023-09-18 16:39:00 +00:00
delete jQuery . _check9521 ;
2019-02-18 18:02:38 +00:00
done ( ) ;
2011-08-23 12:25:11 +00:00
} ;
try {
2015-08-16 06:59:58 +00:00
2011-08-23 12:25:11 +00:00
// This throws an error because it's processed like an id
2015-08-16 06:59:58 +00:00
jQuery ( "#<img id='check9521' src='no-such-.gif' onerror='jQuery._check9521(false)'>" ) . appendTo ( "#qunit-fixture" ) ;
} catch ( err ) {
2023-09-18 16:39:00 +00:00
jQuery . _check9521 ( true ) ;
2012-04-15 21:41:54 +00:00
}
2015-08-16 06:59:58 +00:00
} ) ;
2011-08-23 12:25:11 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery('html')" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 18 ) ;
2008-12-19 05:43:37 +00:00
2013-04-09 15:45:09 +00:00
var s , div , j ;
2023-09-18 16:39:00 +00:00
jQuery . foo = false ;
2015-08-16 06:59:58 +00:00
s = jQuery ( "<script>jQuery.foo='test';</script>" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . ok ( s , "Creating a script" ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( ! jQuery . foo , "Make sure the script wasn't executed prematurely" ) ;
2015-08-16 06:59:58 +00:00
jQuery ( "body" ) . append ( "<script>jQuery.foo='test';</script>" ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( jQuery . foo , "Executing a script's contents in the right context" ) ;
2008-12-19 05:43:37 +00:00
2009-07-27 20:47:32 +00:00
// Test multi-line HTML
2015-08-16 06:59:58 +00:00
div = jQuery ( "<div>\r\nsome text\n<p>some p</p>\nmore text\r\n</div>" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . equal ( div . nodeName . toUpperCase ( ) , "DIV" , "Make sure we're getting a div." ) ;
assert . equal ( div . firstChild . nodeType , 3 , "Text node." ) ;
assert . equal ( div . lastChild . nodeType , 3 , "Text node." ) ;
2015-08-16 06:59:58 +00:00
assert . equal ( div . childNodes [ 1 ] . nodeType , 1 , "Paragraph." ) ;
assert . equal ( div . childNodes [ 1 ] . firstChild . nodeType , 3 , "Paragraph text." ) ;
2009-07-27 20:47:32 +00:00
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery ( "<link rel='stylesheet'/>" ) [ 0 ] , "Creating a link" ) ;
2008-12-19 05:43:37 +00:00
2020-03-16 20:49:29 +00:00
assert . ok ( ! jQuery ( "<script></script>" ) [ 0 ] . parentNode , "Create a script" ) ;
2009-01-03 00:51:07 +00:00
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery ( "<input/>" ) . attr ( "type" , "hidden" ) , "Create an input and set the type." ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
j = jQuery ( "<span>hi</span> there <!-- mon ami -->" ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( j . length >= 2 , "Check node,textnode,comment creation (some browsers delete comments)" ) ;
2008-12-19 05:43:37 +00:00
2022-01-04 15:27:18 +00:00
assert . ok ( ! jQuery ( "<option>test</option>" ) [ 0 ] . selected , "Make sure that options are auto-selected trac-2050" ) ;
2009-11-11 18:49:29 +00:00
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery ( "<div></div>" ) [ 0 ] , "Create a div with closing tag." ) ;
assert . ok ( jQuery ( "<table></table>" ) [ 0 ] , "Create a table with closing tag." ) ;
2011-01-19 23:37:31 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery ( "element[attribute='<div></div>']" ) . length , 0 ,
2013-09-07 00:46:55 +00:00
"When html is within brackets, do not recognize as html." ) ;
2015-08-16 06:59:58 +00:00
2013-09-07 00:46:55 +00:00
//equal( jQuery( "element[attribute=<div></div>]" ).length, 0,
// "When html is within brackets, do not recognize as html." );
2019-07-29 19:14:46 +00:00
if ( QUnit . jQuerySelectors ) {
2015-11-10 18:26:15 +00:00
assert . equal ( jQuery ( "element:not(<div></div>)" ) . length , 0 ,
"When html is within parens, do not recognize as html." ) ;
} else {
assert . ok ( "skip" , "Complex :not not supported in selector-native" ) ;
}
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery ( "\\<div\\>" ) . length , 0 , "Ignore escaped html characters" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2012-10-10 00:06:02 +00:00
2016-12-24 10:33:27 +00:00
QUnit . test ( "jQuery(element with non-alphanumeric name)" , function ( assert ) {
assert . expect ( 36 ) ;
jQuery . each ( [ "-" , ":" ] , function ( i , symbol ) {
jQuery . each ( [ "thead" , "tbody" , "tfoot" , "colgroup" , "caption" , "tr" , "th" , "td" ] ,
function ( j , tag ) {
var tagName = tag + symbol + "test" ;
var el = jQuery ( "<" + tagName + "></" + tagName + ">" ) ;
assert . ok ( el [ 0 ] , "Create a " + tagName + " element" ) ;
2017-01-17 16:52:50 +00:00
assert . ok ( el [ 0 ] . nodeName === tagName . toUpperCase ( ) ,
2016-12-24 10:33:27 +00:00
tagName + " element has expected node name" ) ;
}
) ;
var tagName = [ "tr" , "multiple" , "symbol" ] . join ( symbol ) ;
var el = jQuery ( "<" + tagName + "></" + tagName + ">" ) ;
assert . ok ( el [ 0 ] , "Create a " + tagName + " element" ) ;
2017-01-17 16:52:50 +00:00
assert . ok ( el [ 0 ] . nodeName === tagName . toUpperCase ( ) ,
2016-12-24 10:33:27 +00:00
tagName + " element has expected node name" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
} ) ;
2015-01-04 22:48:35 +00:00
2022-01-04 15:27:18 +00:00
QUnit . test ( "jQuery('massive html trac-7990')" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 3 ) ;
2012-06-19 15:35:45 +00:00
2013-04-09 15:45:09 +00:00
var i ,
li = "<li>very very very very large html string</li>" ,
2015-08-16 06:59:58 +00:00
html = [ "<ul>" ] ;
2013-04-09 15:45:09 +00:00
2012-10-10 00:06:02 +00:00
for ( i = 0 ; i < 30000 ; i += 1 ) {
2015-08-16 06:59:58 +00:00
html [ html . length ] = li ;
2011-01-19 23:37:31 +00:00
}
2015-08-16 06:59:58 +00:00
html [ html . length ] = "</ul>" ;
html = jQuery ( html . join ( "" ) ) [ 0 ] ;
assert . equal ( html . nodeName . toLowerCase ( ) , "ul" ) ;
assert . equal ( html . firstChild . nodeName . toLowerCase ( ) , "li" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( html . childNodes . length , 30000 ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery('html', context)" , function ( assert ) {
assert . expect ( 1 ) ;
2008-12-19 05:43:37 +00:00
2020-03-16 20:49:29 +00:00
var $div = jQuery ( "<div></div>" ) [ 0 ] ,
$span = jQuery ( "<span></span>" , $div ) ;
2022-01-04 15:27:18 +00:00
assert . equal ( $span . length , 1 , "verify a span created with a div context works, trac-1763" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery(selector, xml).text(str) - loaded via xml document" , function ( assert ) {
assert . expect ( 2 ) ;
2012-04-15 21:41:54 +00:00
2013-04-09 15:45:09 +00:00
var xml = createDashboardXML ( ) ,
2015-08-16 06:59:58 +00:00
2022-01-04 15:27:18 +00:00
// tests for trac-1419 where ie was a problem
2015-08-16 06:59:58 +00:00
tab = jQuery ( "tab" , xml ) . eq ( 0 ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( tab . text ( ) , "blabla" , "verify initial text correct" ) ;
2015-08-16 06:59:58 +00:00
tab . text ( "newtext" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( tab . text ( ) , "newtext" , "verify new text correct" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "end()" , function ( assert ) {
assert . expect ( 3 ) ;
assert . equal ( "Yahoo" , jQuery ( "#yahoo" ) . parent ( ) . end ( ) . text ( ) , "check for end" ) ;
assert . ok ( jQuery ( "#yahoo" ) . end ( ) , "check for end with nothing to end" ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 06:59:58 +00:00
var x = jQuery ( "#yahoo" ) ;
2009-12-10 17:25:25 +00:00
x . parent ( ) ;
2017-05-19 20:28:54 +00:00
assert . equal ( "Yahoo" , jQuery ( "#yahoo" ) . text ( ) , "check for non-destructive behavior" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
QUnit . test ( "length" , function ( assert ) {
assert . expect ( 1 ) ;
assert . equal ( jQuery ( "#qunit-fixture p" ) . length , 6 , "Get Number of Elements Found" ) ;
} ) ;
QUnit . test ( "get()" , function ( assert ) {
assert . expect ( 1 ) ;
assert . deepEqual ( jQuery ( "#qunit-fixture p" ) . get ( ) , q ( "firstp" , "ap" , "sndp" , "en" , "sap" , "first" ) , "Get All Elements" ) ;
} ) ;
QUnit . test ( "toArray()" , function ( assert ) {
assert . expect ( 1 ) ;
assert . deepEqual ( jQuery ( "#qunit-fixture p" ) . toArray ( ) ,
q ( "firstp" , "ap" , "sndp" , "en" , "sap" , "first" ) ,
2012-06-21 19:30:24 +00:00
"Convert jQuery object to an Array" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2009-07-16 07:31:32 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "inArray()" , function ( assert ) {
assert . expect ( 19 ) ;
2011-05-28 16:00:28 +00:00
var selections = {
2023-09-18 16:39:00 +00:00
p : q ( "firstp" , "sap" , "ap" , "first" ) ,
em : q ( "siblingnext" , "siblingfirst" ) ,
2015-08-16 06:59:58 +00:00
div : q ( "qunit-testrunner-toolbar" , "nothiddendiv" , "nothiddendivchild" , "foo" ) ,
2024-08-12 18:01:19 +00:00
a : q ( "mozilla" , "groups" , "google" , "john1" ) ,
2011-05-28 16:00:28 +00:00
empty : [ ]
} ,
tests = {
2023-09-18 16:39:00 +00:00
p : { elem : jQuery ( "#ap" ) [ 0 ] , index : 2 } ,
em : { elem : jQuery ( "#siblingfirst" ) [ 0 ] , index : 1 } ,
div : { elem : jQuery ( "#nothiddendiv" ) [ 0 ] , index : 1 } ,
2024-08-12 18:01:19 +00:00
a : { elem : jQuery ( "#john1" ) [ 0 ] , index : 3 }
2011-05-28 16:00:28 +00:00
} ,
falseTests = {
2023-09-18 16:39:00 +00:00
p : jQuery ( "#liveSpan1" ) [ 0 ] ,
2015-08-16 06:59:58 +00:00
em : jQuery ( "#nothiddendiv" ) [ 0 ] ,
2011-05-28 16:00:28 +00:00
empty : ""
} ;
jQuery . each ( tests , function ( key , obj ) {
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery . inArray ( obj . elem , selections [ key ] ) , obj . index , "elem is in the array of selections of its tag" ) ;
2015-08-16 06:59:58 +00:00
2011-05-28 16:00:28 +00:00
// Third argument (fromIndex)
2015-08-16 03:45:28 +00:00
assert . equal ( ! ! ~ jQuery . inArray ( obj . elem , selections [ key ] , 5 ) , false , "elem is NOT in the array of selections given a starting index greater than its position" ) ;
assert . equal ( ! ! ~ jQuery . inArray ( obj . elem , selections [ key ] , 1 ) , true , "elem is in the array of selections given a starting index less than or equal to its position" ) ;
assert . equal ( ! ! ~ jQuery . inArray ( obj . elem , selections [ key ] , - 3 ) , true , "elem is in the array of selections given a negative index" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2011-05-28 16:00:28 +00:00
jQuery . each ( falseTests , function ( key , elem ) {
2015-08-16 03:45:28 +00:00
assert . equal ( ! ! ~ jQuery . inArray ( elem , selections [ key ] ) , false , "elem is NOT in the array of selections" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2011-05-28 16:00:28 +00:00
2015-08-16 06:59:58 +00:00
} ) ;
2011-05-28 16:00:28 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "get(Number)" , function ( assert ) {
assert . expect ( 2 ) ;
assert . equal ( jQuery ( "#qunit-fixture p" ) . get ( 0 ) , document . getElementById ( "firstp" ) , "Get A Single Element" ) ;
assert . strictEqual ( jQuery ( "#firstp" ) . get ( 1 ) , undefined , "Try get with index larger elements count" ) ;
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "get(-Number)" , function ( assert ) {
assert . expect ( 2 ) ;
assert . equal ( jQuery ( "p" ) . get ( - 1 ) , document . getElementById ( "first" ) , "Get a single element with negative index" ) ;
assert . strictEqual ( jQuery ( "#firstp" ) . get ( - 2 ) , undefined , "Try get with index negative index larger then elements count" ) ;
} ) ;
2009-07-16 07:31:41 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "each(Function)" , function ( assert ) {
assert . expect ( 1 ) ;
2013-04-09 15:45:09 +00:00
var div , pass , i ;
2015-08-16 06:59:58 +00:00
div = jQuery ( "div" ) ;
2023-09-18 16:39:00 +00:00
div . each ( function ( ) {
this . foo = "zoo" ;
} ) ;
2013-04-09 15:45:09 +00:00
pass = true ;
for ( i = 0 ; i < div . length ; i ++ ) {
2015-08-16 06:59:58 +00:00
if ( div . get ( i ) . foo !== "zoo" ) {
2012-06-21 19:30:24 +00:00
pass = false ;
}
2008-12-19 05:43:37 +00:00
}
2015-08-16 03:45:28 +00:00
assert . ok ( pass , "Execute a function, Relative" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "slice()" , function ( assert ) {
assert . expect ( 7 ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 06:59:58 +00:00
var $links = jQuery ( "#ap a" ) ;
2009-07-16 07:32:17 +00:00
2015-08-16 06:59:58 +00:00
assert . deepEqual ( $links . slice ( 1 , 2 ) . get ( ) , q ( "groups" ) , "slice(1,2)" ) ;
2024-08-12 18:01:19 +00:00
assert . deepEqual ( $links . slice ( 1 ) . get ( ) , q ( "groups" , "anchor1" , "mozilla" ) , "slice(1)" ) ;
2015-08-16 06:59:58 +00:00
assert . deepEqual ( $links . slice ( 0 , 3 ) . get ( ) , q ( "google" , "groups" , "anchor1" ) , "slice(0,3)" ) ;
2024-08-12 18:01:19 +00:00
assert . deepEqual ( $links . slice ( - 1 ) . get ( ) , q ( "mozilla" ) , "slice(-1)" ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 06:59:58 +00:00
assert . deepEqual ( $links . eq ( 1 ) . get ( ) , q ( "groups" ) , "eq(1)" ) ;
assert . deepEqual ( $links . eq ( "2" ) . get ( ) , q ( "anchor1" ) , "eq('2')" ) ;
2024-08-12 18:01:19 +00:00
assert . deepEqual ( $links . eq ( - 1 ) . get ( ) , q ( "mozilla" ) , "eq(-1)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2009-07-16 07:32:17 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "first()/last()" , function ( assert ) {
assert . expect ( 4 ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 06:59:58 +00:00
var $links = jQuery ( "#ap a" ) , $none = jQuery ( "asdf" ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 06:59:58 +00:00
assert . deepEqual ( $links . first ( ) . get ( ) , q ( "google" ) , "first()" ) ;
2024-08-12 18:01:19 +00:00
assert . deepEqual ( $links . last ( ) . get ( ) , q ( "mozilla" ) , "last()" ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual ( $none . first ( ) . get ( ) , [ ] , "first() none" ) ;
assert . deepEqual ( $none . last ( ) . get ( ) , [ ] , "last() none" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2009-12-10 17:25:25 +00:00
2019-09-24 00:04:53 +00:00
QUnit . test ( "even()/odd()" , function ( assert ) {
assert . expect ( 4 ) ;
var $links = jQuery ( "#ap a" ) , $none = jQuery ( "asdf" ) ;
assert . deepEqual ( $links . even ( ) . get ( ) , q ( "google" , "anchor1" ) , "even()" ) ;
2024-08-12 18:01:19 +00:00
assert . deepEqual ( $links . odd ( ) . get ( ) , q ( "groups" , "mozilla" ) , "odd()" ) ;
2019-09-24 00:04:53 +00:00
assert . deepEqual ( $none . even ( ) . get ( ) , [ ] , "even() none" ) ;
assert . deepEqual ( $none . odd ( ) . get ( ) , [ ] , "odd() none" ) ;
} ) ;
2015-08-16 06:59:58 +00:00
QUnit . test ( "map()" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 2 ) ;
2009-12-10 17:25:25 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2015-08-16 06:59:58 +00:00
jQuery ( "#ap" ) . map ( function ( ) {
return jQuery ( this ) . find ( "a" ) . get ( ) ;
} ) . get ( ) ,
2024-08-12 18:01:19 +00:00
q ( "google" , "groups" , "anchor1" , "mozilla" ) ,
2009-12-10 17:25:25 +00:00
"Array Map"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2015-08-16 06:59:58 +00:00
jQuery ( "#ap > a" ) . map ( function ( ) {
2009-12-10 17:25:25 +00:00
return this . parentNode ;
2015-08-16 06:59:58 +00:00
} ) . get ( ) ,
q ( "ap" , "ap" , "ap" ) ,
2009-12-10 17:25:25 +00:00
"Single Map"
) ;
2015-08-16 06:59:58 +00:00
} ) ;
2012-12-10 18:52:02 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.map" , function ( assert ) {
2019-08-19 08:04:01 +00:00
assert . expect ( 28 ) ;
2009-12-10 17:25:25 +00:00
2012-12-10 18:52:02 +00:00
var i , label , result , callback ;
result = jQuery . map ( [ 3 , 4 , 5 ] , function ( v , k ) {
2009-12-10 17:25:25 +00:00
return k ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "012" , "Map the keys from an array" ) ;
2009-12-10 17:25:25 +00:00
2013-04-09 15:45:09 +00:00
result = jQuery . map ( [ 3 , 4 , 5 ] , function ( v ) {
2009-12-10 17:25:25 +00:00
return v ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "345" , "Map the values from an array" ) ;
2012-12-10 18:52:02 +00:00
result = jQuery . map ( { a : 1 , b : 2 } , function ( v , k ) {
return k ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "ab" , "Map the keys from an object" ) ;
2009-12-10 17:25:25 +00:00
2013-04-09 15:45:09 +00:00
result = jQuery . map ( { a : 1 , b : 2 } , function ( v ) {
2011-03-21 19:12:31 +00:00
return v ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "12" , "Map the values from an object" ) ;
2009-12-10 17:25:25 +00:00
2013-04-09 15:45:09 +00:00
result = jQuery . map ( [ "a" , undefined , null , "b" ] , function ( v ) {
2009-12-10 17:25:25 +00:00
return v ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "ab" , "Array iteration does not include undefined/null results" ) ;
2009-12-10 17:25:25 +00:00
2013-04-09 15:45:09 +00:00
result = jQuery . map ( { a : "a" , b : undefined , c : null , d : "b" } , function ( v ) {
2011-05-02 17:25:53 +00:00
return v ;
2015-08-16 06:59:58 +00:00
} ) ;
assert . equal ( result . join ( "" ) , "ab" , "Object iteration does not include undefined/null results" ) ;
2012-12-10 18:52:02 +00:00
result = {
Zero : function ( ) { } ,
2023-09-18 16:39:00 +00:00
One : function ( a ) {
a = a ;
} ,
Two : function ( a , b ) {
a = a ; b = b ;
}
2012-12-10 18:52:02 +00:00
} ;
callback = function ( v , k ) {
2015-08-16 03:45:28 +00:00
assert . equal ( k , "foo" , label + "-argument function treated like object" ) ;
2012-12-10 18:52:02 +00:00
} ;
for ( i in result ) {
label = i ;
result [ i ] . foo = "bar" ;
jQuery . map ( result [ i ] , callback ) ;
}
result = {
"undefined" : undefined ,
"null" : null ,
"false" : false ,
"true" : true ,
"empty string" : "" ,
"nonempty string" : "string" ,
"string \"0\"" : "0" ,
"negative" : - 1 ,
"excess" : 1
} ;
callback = function ( v , k ) {
2015-08-16 03:45:28 +00:00
assert . equal ( k , "length" , "Object with " + label + " length treated like object" ) ;
2012-12-10 18:52:02 +00:00
} ;
for ( i in result ) {
label = i ;
jQuery . map ( { length : result [ i ] } , callback ) ;
}
result = {
"sparse Array" : Array ( 4 ) ,
"length: 1 plain object" : { length : 1 , "0" : true } ,
"length: 2 plain object" : { length : 2 , "0" : true , "1" : true } ,
2015-08-16 06:59:58 +00:00
NodeList : document . getElementsByTagName ( "html" )
2012-12-10 18:52:02 +00:00
} ;
callback = function ( v , k ) {
if ( result [ label ] ) {
delete result [ label ] ;
2015-08-16 03:45:28 +00:00
assert . equal ( k , "0" , label + " treated like array" ) ;
2012-12-10 18:52:02 +00:00
}
} ;
for ( i in result ) {
label = i ;
jQuery . map ( result [ i ] , callback ) ;
}
result = false ;
2013-04-09 15:45:09 +00:00
jQuery . map ( { length : 0 } , function ( ) {
2012-12-10 18:52:02 +00:00
result = true ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! result , "length: 0 plain object treated like array" ) ;
2012-12-10 18:52:02 +00:00
result = false ;
2015-08-16 06:59:58 +00:00
jQuery . map ( document . getElementsByTagName ( "asdf" ) , function ( ) {
2012-12-10 18:52:02 +00:00
result = true ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! result , "empty NodeList treated like array" ) ;
2011-05-02 17:25:53 +00:00
2015-08-16 06:59:58 +00:00
result = jQuery . map ( Array ( 4 ) , function ( v , k ) {
2016-05-10 09:12:28 +00:00
return k % 2 ? k : [ k , k , k ] ;
2015-08-16 06:59:58 +00:00
} ) ;
2022-01-04 15:27:18 +00:00
assert . equal ( result . join ( "" ) , "00012223" , "Array results flattened (trac-2616)" ) ;
2019-08-19 08:04:01 +00:00
result = jQuery . map ( [ [ [ 1 , 2 ] , 3 ] , 4 ] , function ( v , k ) {
return v ;
} ) ;
assert . equal ( result . length , 3 , "Array flatten only one level down" ) ;
assert . ok ( Array . isArray ( result [ 0 ] ) , "Array flatten only one level down" ) ;
2020-09-22 15:49:28 +00:00
// Support: IE 11+
// IE doesn't have Array#flat so it'd fail the test.
if ( ! QUnit . isIE ) {
2019-08-19 08:04:01 +00:00
result = jQuery . map ( Array ( 300000 ) , function ( v , k ) {
return k ;
} ) ;
2022-01-12 22:23:42 +00:00
assert . equal ( result . length , 300000 , "Able to map 300000 records without any problems (gh-4320)" ) ;
2019-08-19 08:04:01 +00:00
} else {
2020-09-22 15:49:28 +00:00
assert . ok ( "skip" , "Array#flat isn't supported in IE" ) ;
2019-08-19 08:04:01 +00:00
}
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.merge()" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 10 ) ;
2009-05-02 19:22:55 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ ] , [ ] ) ,
[ ] ,
"Empty arrays"
) ;
2009-05-02 19:22:55 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ 1 ] , [ 2 ] ) ,
[ 1 , 2 ] ,
"Basic (single-element)"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ 1 , 2 ] , [ 3 , 4 ] ) ,
[ 1 , 2 , 3 , 4 ] ,
"Basic (multiple-element)"
) ;
2009-05-02 19:22:55 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ 1 , 2 ] , [ ] ) ,
[ 1 , 2 ] ,
"Second empty"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ ] , [ 1 , 2 ] ) ,
[ 1 , 2 ] ,
"First empty"
) ;
2009-05-02 19:22:55 +00:00
2022-01-04 15:27:18 +00:00
// Fixed at [5998], trac-3641
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ - 2 , - 1 ] , [ 0 , 1 , 2 ] ) ,
2015-08-16 06:59:58 +00:00
[ - 2 , - 1 , 0 , 1 , 2 ] ,
2013-09-03 05:24:01 +00:00
"Second array including a zero (falsy)"
) ;
2011-01-05 21:41:23 +00:00
2022-01-04 15:27:18 +00:00
// After fixing trac-5527
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ ] , [ null , undefined ] ) ,
[ null , undefined ] ,
"Second array including null and undefined values"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( { length : 0 } , [ 1 , 2 ] ) ,
{ length : 2 , 0 : 1 , 1 : 2 } ,
"First array like"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2013-09-03 05:24:01 +00:00
jQuery . merge ( [ 1 , 2 ] , { length : 1 , 0 : 3 } ) ,
[ 1 , 2 , 3 ] ,
"Second array like"
) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual (
2015-08-16 06:59:58 +00:00
jQuery . merge ( [ ] , document . getElementById ( "lengthtest" ) . getElementsByTagName ( "input" ) ) ,
[ document . getElementById ( "length" ) , document . getElementById ( "idTest" ) ] ,
2013-09-03 05:24:01 +00:00
"Second NodeList"
) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-25 19:25:30 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.grep()" , function ( assert ) {
assert . expect ( 8 ) ;
2013-09-12 16:18:36 +00:00
var searchCriterion = function ( value ) {
return value % 2 === 0 ;
} ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( jQuery . grep ( [ ] , searchCriterion ) , [ ] , "Empty array" ) ;
2015-08-16 06:59:58 +00:00
assert . deepEqual ( jQuery . grep ( new Array ( 4 ) , searchCriterion ) , [ ] , "Sparse array" ) ;
2013-09-12 16:18:36 +00:00
2015-09-20 23:05:50 +00:00
assert . deepEqual (
jQuery . grep ( [ 1 , 2 , 3 , 4 , 5 , 6 ] , searchCriterion ) ,
[ 2 , 4 , 6 ] ,
"Satisfying elements present"
) ;
assert . deepEqual (
jQuery . grep ( [ 1 , 3 , 5 , 7 ] , searchCriterion ) ,
[ ] ,
"Satisfying elements absent"
) ;
2013-09-12 16:18:36 +00:00
2015-09-20 23:05:50 +00:00
assert . deepEqual (
jQuery . grep ( [ 1 , 2 , 3 , 4 , 5 , 6 ] , searchCriterion , true ) ,
[ 1 , 3 , 5 ] ,
"Satisfying elements present and grep inverted"
) ;
assert . deepEqual (
jQuery . grep ( [ 1 , 3 , 5 , 7 ] , searchCriterion , true ) ,
[ 1 , 3 , 5 , 7 ] ,
"Satisfying elements absent and grep inverted"
) ;
2013-09-12 16:18:36 +00:00
2015-09-20 23:05:50 +00:00
assert . deepEqual (
jQuery . grep ( [ 1 , 2 , 3 , 4 , 5 , 6 ] , searchCriterion , false ) ,
[ 2 , 4 , 6 ] ,
"Satisfying elements present but grep explicitly uninverted"
) ;
assert . deepEqual (
jQuery . grep ( [ 1 , 3 , 5 , 7 ] , searchCriterion , false ) ,
[ ] ,
"Satisfying elements absent and grep explicitly uninverted"
) ;
2015-08-16 06:59:58 +00:00
} ) ;
2013-09-12 16:18:36 +00:00
2015-09-20 23:05:50 +00:00
QUnit . test ( "jQuery.grep(Array-like)" , function ( assert ) {
assert . expect ( 7 ) ;
var searchCriterion = function ( value ) {
return value % 2 === 0 ;
} ;
assert . deepEqual ( jQuery . grep ( { length : 0 } , searchCriterion ) , [ ] , "Empty array-like" ) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 2 , 2 : 3 , 3 : 4 , 4 : 5 , 5 : 6 , length : 6 } , searchCriterion ) ,
[ 2 , 4 , 6 ] ,
"Satisfying elements present and array-like object used"
) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 3 , 2 : 5 , 3 : 7 , length : 4 } , searchCriterion ) ,
[ ] ,
"Satisfying elements absent and Array-like object used"
) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 2 , 2 : 3 , 3 : 4 , 4 : 5 , 5 : 6 , length : 6 } , searchCriterion , true ) ,
[ 1 , 3 , 5 ] ,
"Satisfying elements present, array-like object used, and grep inverted"
) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 3 , 2 : 5 , 3 : 7 , length : 4 } , searchCriterion , true ) ,
[ 1 , 3 , 5 , 7 ] ,
"Satisfying elements absent, array-like object used, and grep inverted"
) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 2 , 2 : 3 , 3 : 4 , 4 : 5 , 5 : 6 , length : 6 } , searchCriterion , false ) ,
[ 2 , 4 , 6 ] ,
"Satisfying elements present, Array-like object used, but grep explicitly uninverted"
) ;
assert . deepEqual (
jQuery . grep ( { 0 : 1 , 1 : 3 , 2 : 5 , 3 : 7 , length : 4 } , searchCriterion , false ) ,
[ ] ,
"Satisfying elements absent, Array-like object used, and grep explicitly uninverted"
) ;
2016-05-10 09:12:28 +00:00
} ) ;
2015-09-20 23:05:50 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.extend(Object, Object)" , function ( assert ) {
assert . expect ( 28 ) ;
2008-12-19 05:43:37 +00:00
2013-04-09 15:45:09 +00:00
var empty , optionsWithLength , optionsWithDate , myKlass ,
customObject , optionsWithCustomObject , MyNumber , ret ,
nullUndef , target , recursive , obj ,
defaults , defaultsCopy , options1 , options1Copy , options2 , options2Copy , merged2 ,
settings = { "xnumber1" : 5 , "xnumber2" : 7 , "xstring1" : "peter" , "xstring2" : "pan" } ,
2012-07-05 19:52:13 +00:00
options = { "xnumber2" : 1 , "xstring2" : "x" , "xxx" : "newstring" } ,
optionsCopy = { "xnumber2" : 1 , "xstring2" : "x" , "xxx" : "newstring" } ,
merged = { "xnumber1" : 5 , "xnumber2" : 1 , "xstring1" : "peter" , "xstring2" : "x" , "xxx" : "newstring" } ,
deep1 = { "foo" : { "bar" : true } } ,
deep2 = { "foo" : { "baz" : true } , "foo2" : document } ,
deep2copy = { "foo" : { "baz" : true } , "foo2" : document } ,
deepmerged = { "foo" : { "bar" : true , "baz" : true } , "foo2" : document } ,
2015-08-16 06:59:58 +00:00
arr = [ 1 , 2 , 3 ] ,
2012-07-05 19:52:13 +00:00
nestedarray = { "arr" : arr } ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
jQuery . extend ( settings , options ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( settings , merged , "Check if extended: settings must be extended" ) ;
assert . deepEqual ( options , optionsCopy , "Check if not modified: options must not be modified" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
jQuery . extend ( settings , null , options ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( settings , merged , "Check if extended: settings must be extended" ) ;
assert . deepEqual ( options , optionsCopy , "Check if not modified: options must not be modified" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , deep1 , deep2 ) ;
2023-09-18 16:39:00 +00:00
assert . deepEqual ( deep1 . foo , deepmerged . foo , "Check if foo: settings must be extended" ) ;
assert . deepEqual ( deep2 . foo , deep2copy . foo , "Check if not deep2: options must not be modified" ) ;
assert . equal ( deep1 . foo2 , document , "Make sure that a deep clone was not attempted on the document" ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
assert . ok ( jQuery . extend ( true , { } , nestedarray ) . arr !== arr , "Deep extend of object must clone child array" ) ;
2011-01-05 21:41:23 +00:00
2022-01-04 15:27:18 +00:00
// trac-5991
2023-09-18 16:39:00 +00:00
assert . ok ( Array . isArray ( jQuery . extend ( true , { "arr" : { } } , nestedarray ) . arr ) , "Cloned array have to be an Array" ) ;
assert . ok ( jQuery . isPlainObject ( jQuery . extend ( true , { "arr" : arr } , { "arr" : { } } ) . arr ) , "Cloned object have to be an plain object" ) ;
2010-01-04 21:25:14 +00:00
2013-04-09 15:45:09 +00:00
empty = { } ;
optionsWithLength = { "foo" : { "length" : - 1 } } ;
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , empty , optionsWithLength ) ;
2023-09-18 16:39:00 +00:00
assert . deepEqual ( empty . foo , optionsWithLength . foo , "The length property must copy correctly" ) ;
2009-07-16 07:31:55 +00:00
2009-07-16 07:32:03 +00:00
empty = { } ;
2013-04-09 15:45:09 +00:00
optionsWithDate = { "foo" : { "date" : new Date ( ) } } ;
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , empty , optionsWithDate ) ;
2023-09-18 16:39:00 +00:00
assert . deepEqual ( empty . foo , optionsWithDate . foo , "Dates copy correctly" ) ;
2009-07-16 07:32:03 +00:00
2012-07-05 19:52:13 +00:00
/** @constructor */
2013-04-09 15:45:09 +00:00
myKlass = function ( ) { } ;
customObject = new myKlass ( ) ;
optionsWithCustomObject = { "foo" : { "date" : customObject } } ;
2009-11-12 04:50:40 +00:00
empty = { } ;
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , empty , optionsWithCustomObject ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( empty . foo && empty . foo . date === customObject , "Custom objects copy correctly (no methods)" ) ;
2011-01-05 21:41:23 +00:00
2009-11-09 10:55:25 +00:00
// Makes the class a little more realistic
2015-08-16 06:59:58 +00:00
myKlass . prototype = { "someMethod" : function ( ) { } } ;
2009-07-16 07:32:03 +00:00
empty = { } ;
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , empty , optionsWithCustomObject ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( empty . foo && empty . foo . date === customObject , "Custom objects copy correctly" ) ;
2011-01-05 21:41:23 +00:00
2013-04-09 15:45:09 +00:00
MyNumber = Number ;
2015-08-16 06:59:58 +00:00
ret = jQuery . extend ( true , { "foo" : 4 } , { "foo" : new MyNumber ( 5 ) } ) ;
assert . ok ( parseInt ( ret . foo , 10 ) === 5 , "Wrapped numbers copy correctly" ) ;
2009-07-16 07:32:03 +00:00
2015-08-16 06:59:58 +00:00
nullUndef = jQuery . extend ( { } , options , { "xnumber2" : null } ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( nullUndef . xnumber2 === null , "Check to make sure null values are copied" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
nullUndef = jQuery . extend ( { } , options , { "xnumber2" : undefined } ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( nullUndef . xnumber2 === options . xnumber2 , "Check to make sure undefined values are not copied" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
nullUndef = jQuery . extend ( { } , options , { "xnumber0" : null } ) ;
2023-09-18 16:39:00 +00:00
assert . ok ( nullUndef . xnumber0 === null , "Check to make sure null values are inserted" ) ;
2008-12-19 05:43:37 +00:00
2013-04-09 15:45:09 +00:00
target = { } ;
2023-09-18 16:39:00 +00:00
recursive = { foo : target , bar : 5 } ;
2015-08-16 06:59:58 +00:00
jQuery . extend ( true , target , recursive ) ;
2023-09-18 16:39:00 +00:00
assert . deepEqual ( target , { bar : 5 } , "Check to make sure a recursive obj doesn't go never-ending loop by not copying it over" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
ret = jQuery . extend ( true , { foo : [ ] } , { foo : [ 0 ] } ) ; // 1907
2022-01-04 15:27:18 +00:00
assert . equal ( ret . foo . length , 1 , "Check to make sure a value with coercion 'false' copies over when necessary to fix trac-1907" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
ret = jQuery . extend ( true , { foo : "1,2,3" } , { foo : [ 1 , 2 , 3 ] } ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( typeof ret . foo !== "string" , "Check to make sure values equal with coercion (but not actually equal) overwrite correctly" ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
ret = jQuery . extend ( true , { foo : "bar" } , { foo : null } ) ;
2022-01-04 15:27:18 +00:00
assert . ok ( typeof ret . foo !== "undefined" , "Make sure a null value doesn't crash with deep extend, for trac-1908" ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
obj = { foo : null } ;
jQuery . extend ( true , obj , { foo : "notnull" } ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( obj . foo , "notnull" , "Make sure a null value can be overwritten" ) ;
2008-12-19 05:43:37 +00:00
function func ( ) { }
2015-08-16 06:59:58 +00:00
jQuery . extend ( func , { key : "value" } ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( func . key , "value" , "Verify a function can be extended" ) ;
2008-12-19 05:43:37 +00:00
2013-04-09 15:45:09 +00:00
defaults = { xnumber1 : 5 , xnumber2 : 7 , xstring1 : "peter" , xstring2 : "pan" } ;
defaultsCopy = { xnumber1 : 5 , xnumber2 : 7 , xstring1 : "peter" , xstring2 : "pan" } ;
options1 = { xnumber2 : 1 , xstring2 : "x" } ;
options1Copy = { xnumber2 : 1 , xstring2 : "x" } ;
options2 = { xstring2 : "xx" , xxx : "newstringx" } ;
options2Copy = { xstring2 : "xx" , xxx : "newstringx" } ;
merged2 = { xnumber1 : 5 , xnumber2 : 1 , xstring1 : "peter" , xstring2 : "xx" , xxx : "newstringx" } ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
settings = jQuery . extend ( { } , defaults , options1 , options2 ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( settings , merged2 , "Check if extended: settings must be extended" ) ;
assert . deepEqual ( defaults , defaultsCopy , "Check if not modified: options1 must not be modified" ) ;
assert . deepEqual ( options1 , options1Copy , "Check if not modified: options1 must not be modified" ) ;
assert . deepEqual ( options2 , options2Copy , "Check if not modified: options2 must not be modified" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-09-25 19:02:53 +00:00
QUnit . test ( "jQuery.extend(Object, Object {created with \"defineProperties\"})" , function ( assert ) {
assert . expect ( 2 ) ;
2016-05-10 09:12:28 +00:00
var definedObj = Object . defineProperties ( { } , {
2015-09-25 19:02:53 +00:00
"enumerableProp" : {
2016-05-10 09:12:28 +00:00
get : function ( ) {
2015-09-25 19:02:53 +00:00
return true ;
} ,
enumerable : true
} ,
"nonenumerableProp" : {
2016-05-10 09:12:28 +00:00
get : function ( ) {
2015-09-25 19:02:53 +00:00
return true ;
}
}
2016-05-10 09:12:28 +00:00
} ) ,
2015-09-25 19:02:53 +00:00
accessorObj = { } ;
jQuery . extend ( accessorObj , definedObj ) ;
assert . equal ( accessorObj . enumerableProp , true , "Verify that getters are transferred" ) ;
assert . equal ( accessorObj . nonenumerableProp , undefined , "Verify that non-enumerable getters are ignored" ) ;
} ) ;
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.extend(true,{},{a:[], o:{}}); deep copy with array, followed by object" , function ( assert ) {
assert . expect ( 2 ) ;
2013-02-03 17:51:54 +00:00
var result , initial = {
2015-08-16 06:59:58 +00:00
2013-02-03 17:51:54 +00:00
// This will make "copyIsArray" true
array : [ 1 , 2 , 3 , 4 ] ,
2015-08-16 06:59:58 +00:00
2013-02-03 17:51:54 +00:00
// If "copyIsArray" doesn't get reset to false, the check
// will evaluate true and enter the array copy block
// instead of the object copy block. Since the ternary in the
2016-02-17 15:34:24 +00:00
// "copyIsArray" block will evaluate to false
2013-02-03 17:51:54 +00:00
// (check if operating on an array with ), this will be
// replaced by an empty array.
object : { }
} ;
result = jQuery . extend ( true , { } , initial ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( result , initial , "The [result] and [initial] have equal shape and values" ) ;
2016-08-14 10:54:16 +00:00
assert . ok ( ! Array . isArray ( result . object ) , "result.object wasn't paved with an empty array" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2013-02-03 17:51:54 +00:00
2019-03-25 16:57:30 +00:00
QUnit . test ( "jQuery.extend( true, ... ) Object.prototype pollution" , function ( assert ) {
assert . expect ( 1 ) ;
jQuery . extend ( true , { } , JSON . parse ( "{\"__proto__\": {\"devMode\": true}}" ) ) ;
assert . ok ( ! ( "devMode" in { } ) , "Object.prototype not polluted" ) ;
} ) ;
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.each(Object,Function)" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 23 ) ;
2012-12-10 18:52:02 +00:00
var i , label , seen , callback ;
2008-12-19 05:43:37 +00:00
2012-12-10 18:52:02 +00:00
seen = { } ;
jQuery . each ( [ 3 , 4 , 5 ] , function ( k , v ) {
seen [ k ] = v ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( seen , { "0" : 3 , "1" : 4 , "2" : 5 } , "Array iteration" ) ;
2008-12-19 05:43:37 +00:00
2012-12-10 18:52:02 +00:00
seen = { } ;
jQuery . each ( { name : "name" , lang : "lang" } , function ( k , v ) {
seen [ k ] = v ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( seen , { name : "name" , lang : "lang" } , "Object iteration" ) ;
2008-12-19 05:43:37 +00:00
2012-12-10 18:52:02 +00:00
seen = [ ] ;
jQuery . each ( [ 1 , 2 , 3 ] , function ( k , v ) {
seen . push ( v ) ;
if ( k === 1 ) {
2012-06-21 19:30:24 +00:00
return false ;
}
2015-08-16 06:59:58 +00:00
} ) ;
assert . deepEqual ( seen , [ 1 , 2 ] , "Broken array iteration" ) ;
2012-12-10 18:52:02 +00:00
seen = [ ] ;
2016-05-10 09:12:28 +00:00
jQuery . each ( { "a" : 1 , "b" : 2 , "c" : 3 } , function ( k , v ) {
2012-12-10 18:52:02 +00:00
seen . push ( v ) ;
return false ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . deepEqual ( seen , [ 1 ] , "Broken object iteration" ) ;
2012-12-10 18:52:02 +00:00
seen = {
Zero : function ( ) { } ,
2023-09-18 16:39:00 +00:00
One : function ( a ) {
a = a ;
} ,
Two : function ( a , b ) {
a = a ; b = b ;
}
2012-12-10 18:52:02 +00:00
} ;
2013-04-09 15:45:09 +00:00
callback = function ( k ) {
2015-08-16 03:45:28 +00:00
assert . equal ( k , "foo" , label + "-argument function treated like object" ) ;
2012-12-10 18:52:02 +00:00
} ;
for ( i in seen ) {
label = i ;
seen [ i ] . foo = "bar" ;
jQuery . each ( seen [ i ] , callback ) ;
}
seen = {
"undefined" : undefined ,
"null" : null ,
"false" : false ,
"true" : true ,
"empty string" : "" ,
"nonempty string" : "string" ,
"string \"0\"" : "0" ,
"negative" : - 1 ,
"excess" : 1
} ;
2013-04-09 15:45:09 +00:00
callback = function ( k ) {
2015-08-16 03:45:28 +00:00
assert . equal ( k , "length" , "Object with " + label + " length treated like object" ) ;
2012-12-10 18:52:02 +00:00
} ;
for ( i in seen ) {
label = i ;
jQuery . each ( { length : seen [ i ] } , callback ) ;
}
seen = {
"sparse Array" : Array ( 4 ) ,
"length: 1 plain object" : { length : 1 , "0" : true } ,
"length: 2 plain object" : { length : 2 , "0" : true , "1" : true } ,
2015-08-16 06:59:58 +00:00
NodeList : document . getElementsByTagName ( "html" )
2012-12-10 18:52:02 +00:00
} ;
2013-04-09 15:45:09 +00:00
callback = function ( k ) {
2012-12-10 18:52:02 +00:00
if ( seen [ label ] ) {
delete seen [ label ] ;
2015-08-16 03:45:28 +00:00
assert . equal ( k , "0" , label + " treated like array" ) ;
2012-12-10 18:52:02 +00:00
return false ;
}
} ;
for ( i in seen ) {
label = i ;
jQuery . each ( seen [ i ] , callback ) ;
}
seen = false ;
2013-04-09 15:45:09 +00:00
jQuery . each ( { length : 0 } , function ( ) {
2012-12-10 18:52:02 +00:00
seen = true ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! seen , "length: 0 plain object treated like array" ) ;
2011-07-23 01:26:36 +00:00
2012-12-10 18:52:02 +00:00
seen = false ;
2015-08-16 06:59:58 +00:00
jQuery . each ( document . getElementsByTagName ( "asdf" ) , function ( ) {
2012-12-10 18:52:02 +00:00
seen = true ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! seen , "empty NodeList treated like array" ) ;
2011-03-30 17:17:48 +00:00
2012-12-10 18:52:02 +00:00
i = 0 ;
jQuery . each ( document . styleSheets , function ( ) {
i ++ ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( i , document . styleSheets . length , "Iteration over document.styleSheets" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.each/map(undefined/null,Function)" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 1 ) ;
2015-07-29 15:10:04 +00:00
2015-06-25 04:18:04 +00:00
try {
jQuery . each ( undefined , jQuery . noop ) ;
jQuery . each ( null , jQuery . noop ) ;
jQuery . map ( undefined , jQuery . noop ) ;
jQuery . map ( null , jQuery . noop ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( true , "jQuery.each/map( undefined/null, function() {} );" ) ;
2015-06-25 04:18:04 +00:00
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . ok ( false , "each/map must accept null and undefined values" ) ;
2015-06-25 04:18:04 +00:00
}
2015-08-16 06:59:58 +00:00
} ) ;
2015-06-25 04:18:04 +00:00
2015-08-16 03:45:28 +00:00
QUnit . test ( "JIT compilation does not interfere with length retrieval (gh-2145)" , function ( assert ) {
assert . expect ( 4 ) ;
2015-04-04 19:34:07 +00:00
var i ;
// Trigger JIT compilation of jQuery.each – and therefore isArraylike – in iOS.
// Convince JSC to use one of its optimizing compilers
// by providing code which can be LICM'd into nothing.
for ( i = 0 ; i < 1000 ; i ++ ) {
jQuery . each ( [ ] ) ;
}
i = 0 ;
jQuery . each ( { 1 : "1" , 2 : "2" , 3 : "3" } , function ( index ) {
2015-08-16 03:45:28 +00:00
assert . equal ( ++ i , index , "Iteration over object with solely " +
2015-04-04 19:34:07 +00:00
"numeric indices (gh-2145 JIT iOS 8 bug)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( i , 3 , "Iteration over object with solely " +
2015-04-04 19:34:07 +00:00
"numeric indices (gh-2145 JIT iOS 8 bug)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2015-04-04 19:34:07 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.makeArray" , function ( assert ) {
assert . expect ( 15 ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( jQuery ( "html>*" ) ) [ 0 ] . nodeName . toUpperCase ( ) , "HEAD" , "Pass makeArray a jQuery object" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( document . getElementsByName ( "PWD" ) ) . slice ( 0 , 1 ) [ 0 ] . name , "PWD" , "Pass makeArray a nodelist" ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
assert . equal ( ( function ( ) {
return jQuery . makeArray ( arguments ) ;
} ) ( 1 , 2 ) . join ( "" ) , "12" , "Pass makeArray an arguments array" ) ;
2008-12-19 05:43:37 +00:00
2016-05-10 09:12:28 +00:00
assert . equal ( jQuery . makeArray ( [ 1 , 2 , 3 ] ) . join ( "" ) , "123" , "Pass makeArray a real array" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery . makeArray ( ) . length , 0 , "Pass nothing to makeArray and expect an empty array" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( 0 ) [ 0 ] , 0 , "Pass makeArray a number" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( "foo" ) [ 0 ] , "foo" , "Pass makeArray a string" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( true ) [ 0 ] . constructor , Boolean , "Pass makeArray a boolean" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( document . createElement ( "div" ) ) [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "Pass makeArray a single node" ) ;
2008-12-19 05:43:37 +00:00
2023-09-18 16:39:00 +00:00
assert . equal ( jQuery . makeArray ( { length : 2 , 0 : "a" , 1 : "b" } ) . join ( "" ) , "ab" , "Pass makeArray an array like map (with length)" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . ok ( ! ! jQuery . makeArray ( document . documentElement . childNodes ) . slice ( 0 , 1 ) [ 0 ] . nodeName , "Pass makeArray a childNodes array" ) ;
2008-12-19 05:43:37 +00:00
// function, is tricky as it has length
2023-09-18 16:39:00 +00:00
assert . equal ( jQuery . makeArray ( function ( ) {
return 1 ;
} ) [ 0 ] ( ) , 1 , "Pass makeArray a function" ) ;
2009-05-02 19:22:55 +00:00
2008-12-19 05:43:37 +00:00
//window, also has length
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( window ) [ 0 ] , window , "Pass makeArray the window" ) ;
2008-12-19 05:43:37 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . makeArray ( /a/ ) [ 0 ] . constructor , RegExp , "Pass makeArray a regex" ) ;
2008-12-19 05:43:37 +00:00
2012-12-11 01:19:26 +00:00
// Some nodes inherit traits of nodelists
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery . makeArray ( document . getElementById ( "form" ) ) . length >= 13 ,
2012-12-11 01:19:26 +00:00
"Pass makeArray a form (treat as elements)" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2009-07-16 15:16:44 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.inArray" , function ( assert ) {
assert . expect ( 3 ) ;
2011-08-17 14:56:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . inArray ( 0 , false ) , - 1 , "Search in 'false' as array returns -1 and doesn't throw exception" ) ;
2011-08-17 14:56:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . inArray ( 0 , null ) , - 1 , "Search in 'null' as array returns -1 and doesn't throw exception" ) ;
2011-08-17 14:56:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . inArray ( 0 , undefined ) , - 1 , "Search in 'undefined' as array returns -1 and doesn't throw exception" ) ;
} ) ;
2011-08-17 14:56:21 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.isEmptyObject" , function ( assert ) {
assert . expect ( 2 ) ;
2011-01-05 21:41:23 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( true , jQuery . isEmptyObject ( { } ) , "isEmptyObject on empty object literal" ) ;
2023-09-18 16:39:00 +00:00
assert . equal ( false , jQuery . isEmptyObject ( { a : 1 } ) , "isEmptyObject on non-empty object literal" ) ;
2011-01-05 21:41:23 +00:00
2010-12-09 18:07:44 +00:00
// What about this ?
2011-11-06 20:27:42 +00:00
// equal(true, jQuery.isEmptyObject(null), "isEmptyObject on null" );
2015-08-16 06:59:58 +00:00
} ) ;
2009-12-31 20:17:52 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.parseHTML" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 23 ) ;
2012-12-11 21:12:23 +00:00
var html , nodes ;
2012-06-21 19:28:57 +00:00
2015-08-16 03:45:28 +00:00
assert . deepEqual ( jQuery . parseHTML ( ) , [ ] , "Without arguments" ) ;
assert . deepEqual ( jQuery . parseHTML ( undefined ) , [ ] , "Undefined" ) ;
assert . deepEqual ( jQuery . parseHTML ( null ) , [ ] , "Null" ) ;
assert . deepEqual ( jQuery . parseHTML ( false ) , [ ] , "Boolean false" ) ;
assert . deepEqual ( jQuery . parseHTML ( 0 ) , [ ] , "Zero" ) ;
assert . deepEqual ( jQuery . parseHTML ( true ) , [ ] , "Boolean true" ) ;
assert . deepEqual ( jQuery . parseHTML ( 42 ) , [ ] , "Positive number" ) ;
assert . deepEqual ( jQuery . parseHTML ( "" ) , [ ] , "Empty string" ) ;
2015-08-16 06:59:58 +00:00
assert . throws ( function ( ) {
jQuery . parseHTML ( "<div></div>" , document . getElementById ( "form" ) ) ;
} , "Passing an element as the context raises an exception (context should be a document)" ) ;
2012-06-21 19:28:57 +00:00
2015-08-16 06:59:58 +00:00
nodes = jQuery . parseHTML ( jQuery ( "body" ) [ 0 ] . innerHTML ) ;
2015-08-16 03:45:28 +00:00
assert . ok ( nodes . length > 4 , "Parse a large html string" ) ;
2018-01-14 08:46:20 +00:00
assert . ok ( Array . isArray ( nodes ) , "parseHTML returns an array rather than a nodelist" ) ;
2012-06-21 19:28:57 +00:00
2012-12-11 21:12:23 +00:00
html = "<script>undefined()</script>" ;
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery . parseHTML ( html ) . length , 0 , "Ignore scripts by default" ) ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . parseHTML ( html , true ) [ 0 ] . nodeName . toLowerCase ( ) , "script" , "Preserve scripts when requested" ) ;
2012-06-21 19:28:57 +00:00
2012-12-11 21:12:23 +00:00
html += "<div></div>" ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . parseHTML ( html ) [ 0 ] . nodeName . toLowerCase ( ) , "div" , "Preserve non-script nodes" ) ;
assert . equal ( jQuery . parseHTML ( html , true ) [ 0 ] . nodeName . toLowerCase ( ) , "script" , "Preserve script position" ) ;
2012-06-21 19:28:57 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . parseHTML ( "text" ) [ 0 ] . nodeType , 3 , "Parsing text returns a text node" ) ;
assert . equal ( jQuery . parseHTML ( "\t<div></div>" ) [ 0 ] . nodeValue , "\t" , "Preserve leading whitespace" ) ;
2012-06-20 15:19:24 +00:00
2022-01-04 15:27:18 +00:00
assert . equal ( jQuery . parseHTML ( " <div></div> " ) [ 0 ] . nodeType , 3 , "Leading spaces are treated as text nodes (trac-11290)" ) ;
2013-01-07 14:38:21 +00:00
html = jQuery . parseHTML ( "<div>test div</div>" ) ;
2015-08-16 03:45:28 +00:00
assert . equal ( html [ 0 ] . parentNode . nodeType , 11 , "parentNode should be documentFragment" ) ;
assert . equal ( html [ 0 ] . innerHTML , "test div" , "Content should be preserved" ) ;
2013-01-07 14:38:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . parseHTML ( "<span><span>" ) . length , 1 , "Incorrect html-strings should not break anything" ) ;
assert . equal ( jQuery . parseHTML ( "<td><td>" ) [ 1 ] . parentNode . nodeType , 11 ,
2013-01-07 19:21:42 +00:00
"parentNode should be documentFragment for wrapMap (variable in manipulation module) elements too" ) ;
2015-08-16 06:59:58 +00:00
assert . ok ( jQuery . parseHTML ( "<#if><tr><p>This is a test.</p></tr><#/if>" ) || true , "Garbage input should not cause error" ) ;
} ) ;
2012-06-21 19:28:57 +00:00
2016-03-28 14:32:15 +00:00
QUnit . test ( "jQuery.parseHTML(<a href>) - gh-2965" , function ( assert ) {
assert . expect ( 1 ) ;
2017-08-01 16:52:45 +00:00
var html = "<a href='example.html'></a>" ,
2016-03-28 14:32:15 +00:00
href = jQuery . parseHTML ( html ) [ 0 ] . href ;
2017-08-01 16:52:45 +00:00
assert . ok ( /\/example\.html$/ . test ( href ) , "href is not lost after parsing anchor" ) ;
2016-03-28 14:32:15 +00:00
} ) ;
2023-09-19 22:54:40 +00:00
QUnit . test ( "jQuery.parseHTML error handling" , function ( assert ) {
2019-04-29 20:56:09 +00:00
var done = assert . async ( ) ;
assert . expect ( 1 ) ;
2014-12-10 14:48:55 +00:00
2019-04-29 20:56:09 +00:00
Globals . register ( "parseHTMLError" ) ;
2014-12-10 14:48:55 +00:00
2019-04-29 20:56:09 +00:00
jQuery . globalEval ( "parseHTMLError = false;" ) ;
jQuery . parseHTML ( "<img src=x onerror='parseHTMLError = true'>" ) ;
2014-12-10 14:48:55 +00:00
2019-04-29 20:56:09 +00:00
window . setTimeout ( function ( ) {
assert . equal ( window . parseHTMLError , false , "onerror eventhandler has not been called." ) ;
done ( ) ;
} , 2000 ) ;
} ) ;
2014-12-10 14:48:55 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.parseXML" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 8 ) ;
2015-07-29 15:10:04 +00:00
2011-07-23 01:26:36 +00:00
var xml , tmp ;
try {
xml = jQuery . parseXML ( "<p>A <b>well-formed</b> xml string</p>" ) ;
tmp = xml . getElementsByTagName ( "p" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! ! tmp , "<p> present in document" ) ;
2011-07-23 01:26:36 +00:00
tmp = tmp . getElementsByTagName ( "b" ) [ 0 ] ;
2015-08-16 03:45:28 +00:00
assert . ok ( ! ! tmp , "<b> present in document" ) ;
assert . strictEqual ( tmp . childNodes [ 0 ] . nodeValue , "well-formed" , "<b> text is as expected" ) ;
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . strictEqual ( e , undefined , "unexpected error" ) ;
2011-07-23 01:26:36 +00:00
}
try {
xml = jQuery . parseXML ( "<p>Not a <<b>well-formed</b> xml string</p>" ) ;
2020-12-08 10:22:21 +00:00
assert . ok ( false , "invalid XML not detected" ) ;
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2020-12-08 10:22:21 +00:00
assert . ok ( e . message . indexOf ( "Invalid XML:" ) === 0 , "invalid XML detected" ) ;
2011-07-23 01:26:36 +00:00
}
2012-03-07 16:37:14 +00:00
try {
xml = jQuery . parseXML ( "" ) ;
2015-08-16 03:45:28 +00:00
assert . strictEqual ( xml , null , "empty string => null document" ) ;
2012-03-07 16:37:14 +00:00
xml = jQuery . parseXML ( ) ;
2015-08-16 03:45:28 +00:00
assert . strictEqual ( xml , null , "undefined string => null document" ) ;
2012-03-07 16:37:14 +00:00
xml = jQuery . parseXML ( null ) ;
2015-08-16 03:45:28 +00:00
assert . strictEqual ( xml , null , "null string => null document" ) ;
2012-03-07 16:37:14 +00:00
xml = jQuery . parseXML ( true ) ;
2015-08-16 03:45:28 +00:00
assert . strictEqual ( xml , null , "non-string => null document" ) ;
2015-08-16 06:59:58 +00:00
} catch ( e ) {
2015-08-16 03:45:28 +00:00
assert . ok ( false , "empty input throws exception" ) ;
2012-03-07 16:37:14 +00:00
}
2015-08-16 06:59:58 +00:00
} ) ;
2011-07-23 01:26:36 +00:00
2020-12-08 10:22:21 +00:00
// Support: IE 11+
// IE throws an error when parsing invalid XML instead of reporting the error
// in a `parsererror` element, skip the test there.
QUnit . testUnlessIE ( "jQuery.parseXML - error reporting" , function ( assert ) {
assert . expect ( 2 ) ;
var errorArg , lineMatch , line , columnMatch , column ;
2023-09-20 00:31:35 +00:00
this . sandbox . stub ( jQuery , "error" ) ;
2020-12-08 10:22:21 +00:00
jQuery . parseXML ( "<p>Not a <<b>well-formed</b> xml string</p>" ) ;
errorArg = jQuery . error . firstCall . lastArg . toLowerCase ( ) ;
console . log ( "errorArg" , errorArg ) ;
lineMatch = errorArg . match ( /line\s*(?:number)?\s*(\d+)/ ) ;
line = lineMatch && lineMatch [ 1 ] ;
columnMatch = errorArg . match ( /column\s*(\d+)/ ) ;
column = columnMatch && columnMatch [ 1 ] ;
assert . strictEqual ( line , "1" , "reports error line" ) ;
2022-10-03 20:53:39 +00:00
assert . strictEqual ( column , "11" , "reports error column" ) ;
2020-12-08 10:22:21 +00:00
} ) ;
2016-04-10 19:42:44 +00:00
testIframe (
2022-01-04 15:27:18 +00:00
"document ready when jQuery loaded asynchronously (trac-13655)" ,
2019-04-29 20:56:09 +00:00
"core/dynamic_ready.html" ,
function ( assert , jQuery , window , document , ready ) {
assert . expect ( 1 ) ;
assert . equal ( true , ready , "document ready correctly fired when jQuery is loaded after DOMContentLoaded" ) ;
2015-08-16 03:45:28 +00:00
}
) ;
2013-08-15 18:15:49 +00:00
2016-04-10 19:42:44 +00:00
testIframe (
2022-01-04 15:27:18 +00:00
"Tolerating alias-masked DOM properties (trac-14074)" ,
2015-08-16 03:45:28 +00:00
"core/aliased.html" ,
2016-04-10 19:42:44 +00:00
function ( assert , jQuery , window , document , errors ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 1 ) ;
assert . deepEqual ( errors , [ ] , "jQuery loaded" ) ;
2013-09-18 13:41:07 +00:00
}
) ;
2014-03-04 03:04:23 +00:00
2016-04-10 19:42:44 +00:00
testIframe (
2022-01-04 15:27:18 +00:00
"Don't call window.onready (trac-14802)" ,
2015-08-16 03:45:28 +00:00
"core/onready.html" ,
2016-04-10 19:42:44 +00:00
function ( assert , jQuery , window , document , error ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 1 ) ;
assert . equal ( error , false , "no call to user-defined onready" ) ;
2014-03-04 03:04:23 +00:00
}
) ;
2015-06-01 21:25:38 +00:00
2015-08-16 03:45:28 +00:00
QUnit . test ( "Iterability of jQuery objects (gh-1693)" , function ( assert ) {
assert . expect ( 1 ) ;
2015-06-01 21:25:38 +00:00
var i , elem , result ;
if ( typeof Symbol === "function" ) {
elem = jQuery ( "<div></div><span></span><a></a>" ) ;
result = "" ;
try {
eval ( "for ( i of elem ) { result += i.nodeName; }" ) ;
} catch ( e ) { }
2015-08-16 03:45:28 +00:00
assert . equal ( result , "DIVSPANA" , "for-of works on jQuery objects" ) ;
2015-06-01 21:25:38 +00:00
} else {
2015-08-16 03:45:28 +00:00
assert . ok ( true , "The browser doesn't support Symbols" ) ;
2015-06-01 21:25:38 +00:00
}
} ) ;
2016-06-29 12:19:04 +00:00
2019-03-04 17:30:51 +00:00
testIframe (
"Iterability of jQuery objects with Symbol polyfill (gh-1693)" ,
"core/jquery-iterability-transpiled.html" ,
function ( assert , jQuery , window , document , testString ) {
assert . expect ( 1 ) ;
assert . strictEqual ( testString , "DIVSPANA" ,
"for-of works on jQuery objects with Symbol polyfilled" ) ;
}
) ;
2022-06-28 10:39:01 +00:00
QUnit [ includesModule ( "deferred" ) ? "test" : "skip" ] ( "jQuery.readyException (original)" , function ( assert ) {
2016-06-29 12:19:04 +00:00
assert . expect ( 1 ) ;
var message ;
2019-04-04 14:53:38 +00:00
this . sandbox . stub ( window , "setTimeout" ) . callsFake ( function ( fn ) {
2016-06-29 12:19:04 +00:00
try {
fn ( ) ;
} catch ( error ) {
message = error . message ;
}
} ) ;
jQuery ( function ( ) {
throw new Error ( "Error in jQuery ready" ) ;
} ) ;
assert . strictEqual (
message ,
"Error in jQuery ready" ,
"The error should have been thrown in a timeout"
) ;
} ) ;
2022-06-28 10:39:01 +00:00
QUnit [ includesModule ( "deferred" ) ? "test" : "skip" ] ( "jQuery.readyException (custom)" , function ( assert ) {
2016-06-29 12:19:04 +00:00
assert . expect ( 1 ) ;
var done = assert . async ( ) ;
2019-04-04 14:53:38 +00:00
this . sandbox . stub ( jQuery , "readyException" ) . callsFake ( function ( error ) {
2016-06-29 12:19:04 +00:00
assert . strictEqual (
error . message ,
"Error in jQuery ready" ,
"The custom jQuery.readyException should have been called"
) ;
done ( ) ;
} ) ;
jQuery ( function ( ) {
throw new Error ( "Error in jQuery ready" ) ;
} ) ;
} ) ;
2022-12-12 21:27:59 +00:00
QUnit . test ( "jQuery.contains" , function ( assert ) {
assert . expect ( 16 ) ;
var container = document . getElementById ( "nonnodes" ) ,
element = container . firstChild ,
text = element . nextSibling ,
nonContained = container . nextSibling ,
detached = document . createElement ( "a" ) ;
assert . ok ( element && element . nodeType === 1 , "preliminary: found element" ) ;
assert . ok ( text && text . nodeType === 3 , "preliminary: found text" ) ;
assert . ok ( nonContained , "preliminary: found non-descendant" ) ;
assert . ok ( jQuery . contains ( container , element ) , "child" ) ;
assert . ok ( jQuery . contains ( container . parentNode , element ) , "grandchild" ) ;
assert . ok ( jQuery . contains ( container , text ) , "text child" ) ;
assert . ok ( jQuery . contains ( container . parentNode , text ) , "text grandchild" ) ;
assert . ok ( ! jQuery . contains ( container , container ) , "self" ) ;
assert . ok ( ! jQuery . contains ( element , container ) , "parent" ) ;
assert . ok ( ! jQuery . contains ( container , nonContained ) , "non-descendant" ) ;
assert . ok ( ! jQuery . contains ( container , document ) , "document" ) ;
assert . ok ( ! jQuery . contains ( container , document . documentElement ) , "documentElement (negative)" ) ;
assert . ok ( ! jQuery . contains ( container , null ) , "Passing null does not throw an error" ) ;
assert . ok ( jQuery . contains ( document , document . documentElement ) , "documentElement (positive)" ) ;
assert . ok ( jQuery . contains ( document , element ) , "document container (positive)" ) ;
assert . ok ( ! jQuery . contains ( document , detached ) , "document container (negative)" ) ;
} ) ;
QUnit . test ( "jQuery.contains in SVG (jQuery trac-10832)" , function ( assert ) {
assert . expect ( 4 ) ;
var svg = jQuery (
"<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'>" +
"<g><circle cx='1' cy='1' r='1' /></g>" +
"</svg>"
) . appendTo ( "#qunit-fixture" ) [ 0 ] ;
assert . ok ( jQuery . contains ( svg , svg . firstChild ) , "root child" ) ;
assert . ok ( jQuery . contains ( svg . firstChild , svg . firstChild . firstChild ) , "element child" ) ;
assert . ok ( jQuery . contains ( svg , svg . firstChild . firstChild ) , "root granchild" ) ;
assert . ok ( ! jQuery . contains ( svg . firstChild . firstChild , svg . firstChild ) ,
"parent (negative)" ) ;
} ) ;
QUnit . testUnlessIE ( "jQuery.contains within <template/> doesn't throw (gh-5147)" , function ( assert ) {
assert . expect ( 1 ) ;
var template = jQuery ( "<template><div><div class='a'></div></div></template>" ) ,
a = jQuery ( template [ 0 ] . content ) . find ( ".a" ) ;
template . appendTo ( "#qunit-fixture" ) ;
jQuery . contains ( a [ 0 ] . ownerDocument , a [ 0 ] ) ;
assert . ok ( true , "Didn't throw" ) ;
} ) ;