Tests: Refactor testIframe() to make it DRYer and more consistent

Ref gh-3040
Closes gh-3049
This commit is contained in:
Dave Methvin 2016-04-10 15:42:44 -04:00
parent 08d73d7f9c
commit e5ffcb0838
42 changed files with 142 additions and 110 deletions

View File

@ -340,24 +340,32 @@ url("data/test.php?foo=bar");
``` ```
### Load tests in an iframe (window.iframeCallback) ### ### Run tests in an iframe ###
Some tests may require a document other than the standard test fixture, and
these can be run in a separate iframe. The actual test code and assertions
remain in jQuery's main test files; only the minimal test fixture markup
and setup code should be placed in the iframe file.
```js ```js
testIframeWithCallback( testName, fileName, testIframe( testName, fileName,
function callback( arg1, arg2, ... assert ) { function testCallback(
assert, jQuery, window, document,
[ additional args ] ) {
... ...
} ); } );
``` ```
Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"` This loads a page, constructing a url with fileName `"./data/" + fileName`.
The iframe page is responsible for determining when `window.parent.iframeCallback` The iframed page determines when the callback occurs in the test by
should be called, for example at document ready or window.onload time. including the "/test/data/iframeTest.js" script and calling
Arguments passed to the callback are the same as the arguments passed `startIframeTest( [ additional args ] )` when appropriate. Often this
to `window.parent.iframeCallback` by the iframe, plus the QUnit `assert` will be after either document ready or `window.onload` fires.
object from the `QUnit.test()` that this wrapper sets up for you.
The iframe should send any objects needed by the unit test via arguments, for example
its `jQuery`, `window`, and `document` objects from the iframe.
The `testCallback` receives the QUnit `assert` object created by `testIframe`
for this test, followed by the global `jQuery`, `window`, and `document` from
the iframe. If the iframe code passes any arguments to `startIframeTest`,
they follow the `document` argument.
Questions? Questions?

View File

@ -4,6 +4,7 @@
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<title>onunload ajax requests (#14379)</title> <title>onunload ajax requests (#14379)</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<form id="navigate" action="../iframe.html"></form> <form id="navigate" action="../iframe.html"></form>
@ -17,7 +18,7 @@
ajaxStatus = status; ajaxStatus = status;
} }
}); });
parent.iframeCallback( ajaxStatus ); startIframeTest( ajaxStatus );
}); });
jQuery(function() { jQuery(function() {

View File

@ -4,13 +4,14 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Attempt to block tests because of dangling XHR requests (IE)</title> <title>Attempt to block tests because of dangling XHR requests (IE)</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript"> <script type="text/javascript">
window.onunload = function() {}; window.onunload = function() {};
jQuery(function() { jQuery(function() {
setTimeout(function() { setTimeout(function() {
var parent = window.parent; var parent = window.parent;
document.write(""); document.write("");
parent.iframeCallback(); startIframeTest();
}, 200 ); }, 200 );
var number = 50; var number = 50;
while( number-- ) { while( number-- ) {

View File

@ -10,6 +10,7 @@
}; };
</script> </script>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<form> <form>
@ -17,7 +18,7 @@
</form> </form>
<script> <script>
jQuery( function() { jQuery( function() {
window.parent.iframeCallback( errors ); startIframeTest( errors );
} ); } );
</script> </script>
</body> </body>

View File

@ -13,10 +13,11 @@
}; };
</script> </script>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<script> <script>
window.parent.iframeCallback( cc_on, errors, jQuery ); startIframeTest( cc_on, errors );
</script> </script>
</body> </body>
</html> </html>

View File

@ -4,6 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script>var $j = jQuery.noConflict();</script> <script>var $j = jQuery.noConflict();</script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<iframe id="dont_return" src="dont_return.php"></iframe> <iframe id="dont_return" src="dont_return.php"></iframe>
@ -20,14 +21,14 @@
$(function () { $(function () {
clearTimeout( timeoutId ); clearTimeout( timeoutId );
if ( !timeoutFired ) { if ( !timeoutFired ) {
window.parent.iframeCallback( true ); startIframeTest( true );
} }
}); });
}); });
timeoutId = setTimeout(function () { timeoutId = setTimeout(function () {
timeoutFired = true; timeoutFired = true;
window.parent.iframeCallback( false ); startIframeTest( false );
}, 10000); }, 10000);
}); });
</script> </script>

View File

@ -8,6 +8,7 @@
window.onready = function() { error = "Called window.onready"; }; window.onready = function() { error = "Called window.onready"; };
</script> </script>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<form> <form>
@ -16,7 +17,7 @@
<script> <script>
jQuery(function() { jQuery(function() {
setTimeout( function() { setTimeout( function() {
window.parent.iframeCallback( error ); startIframeTest( error );
}); });
}); });
</script> </script>

View File

@ -14,8 +14,9 @@
<body> <body>
<div id="test"></div> <div id="test"></div>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
window.parent.iframeCallback( jQuery( "#test" ).css( 'width' ) ); startIframeTest( jQuery( "#test" ).css( 'width' ) );
</script> </script>
</body> </body>
</html> </html>

View File

@ -4,9 +4,10 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IE11 onpageshow strangeness (#14894)</title> <title>IE11 onpageshow strangeness (#14894)</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
$(function(){ $(function(){
window.parent.iframeCallback( $( "body" ).data().result ); startIframeTest( $( "body" ).data().result );
}); });
</script> </script>
</head> </head>

View File

@ -8,14 +8,13 @@
height: 1000px; height: 1000px;
} }
</style> </style>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<div> <div>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script> <script>
jQuery( function() { jQuery( startIframeTest );
window.parent.iframeCallback( jQuery, window, document );
} );
</script> </script>
</div> </div>
</body> </body>

View File

@ -5,12 +5,13 @@
<title>.focus() (activeElement access #13393)</title> <title>.focus() (activeElement access #13393)</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<a href="#" id="frame-link"></a> <a href="#" id="frame-link"></a>
<script> <script>
jQuery( "#frame-link" ).trigger( "focus" ); jQuery( "#frame-link" ).trigger( "focus" );
window.parent.iframeCallback( true ); startIframeTest( true );
</script> </script>
</body> </body>
</html> </html>

View File

@ -5,13 +5,14 @@
<title>focusin event cross-frame (#14180)</title> <title>focusin event cross-frame (#14180)</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<input type="text" id="frame-input" /> <input type="text" id="frame-input" />
<script> <script>
// Call parent when this frame is fully loaded, it will mess with #frame-input // Call parent when this frame is fully loaded, it will mess with #frame-input
jQuery( window ).one( "load", function() { jQuery( window ).one( "load", function() {
window.parent.iframeCallback( document ); startIframeTest();
}); });
</script> </script>
</body> </body>

View File

@ -4,12 +4,13 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test case for gh-2100</title> <title>Test case for gh-2100</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<script type="text/javascript"> <script type="text/javascript">
jQuery( document ).ready(function () { jQuery( function () {
window.parent.iframeCallback( jQuery("#container").length === 1 ); startIframeTest( jQuery("#container").length === 1 );
} ); } );
</script> </script>

View File

@ -4,10 +4,11 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test case for jQuery ticket #11470</title> <title>Test case for jQuery ticket #11470</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript"> <script type="text/javascript">
jQuery.when( jQuery.ready ).done(function() { jQuery.when( jQuery.ready ).done(function() {
jQuery("body").append("<div>modifying DOM</div>"); jQuery("body").append("<div>modifying DOM</div>");
window.parent.iframeCallback( $("div").text() === "modifying DOM" ); startIframeTest( $("div").text() === "modifying DOM" );
}); });
</script> </script>
</head> </head>

View File

@ -4,12 +4,13 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test case for jQuery ticket #10067</title> <title>Test case for jQuery ticket #10067</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
</head> </head>
<body> <body>
<script type="text/javascript"> <script type="text/javascript">
jQuery( document ).ready(function () { jQuery( document ).ready(function () {
window.parent.iframeCallback( jQuery('#container').length === 1 ); startIframeTest( jQuery('#container').length === 1 );
}); });
</script> </script>

View File

@ -1,6 +1,7 @@
<!doctype html> <!doctype html>
<html> <html>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
var called = false, var called = false,
error = false; error = false;
@ -12,7 +13,7 @@
return "maybe"; return "maybe";
}).on( "load", function( event ) { }).on( "load", function( event ) {
$( window ).triggerHandler( "beforeunload" ); $( window ).triggerHandler( "beforeunload" );
window.parent.iframeCallback( called && !error ); startIframeTest( called && !error );
}); });
</script> </script>
</html> </html>

8
test/data/iframeTest.js Normal file
View File

@ -0,0 +1,8 @@
window.startIframeTest = function() {
var args = Array.prototype.slice.call( arguments );
// Note: jQuery may be undefined if page did not load it
args.unshift( window.jQuery, window, document );
window.parent.iframeCallback.apply( null, args );
};

View File

@ -7,6 +7,7 @@
<body> <body>
<div id="qunit-fixture"></div> <div id="qunit-fixture"></div>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
var script = document.getElementsByTagName( "script" )[ 0 ], var script = document.getElementsByTagName( "script" )[ 0 ],
div = document.createElement( "div" ), div = document.createElement( "div" ),
@ -25,7 +26,7 @@
error = e; error = e;
} }
window.parent.iframeCallback({ startIframeTest({
status: success, status: success,
description: "buildFragment sets the context without throwing an exception" + description: "buildFragment sets the context without throwing an exception" +
( error ? ": " + error : "" ) ( error ? ": " + error : "" )

View File

@ -7,12 +7,9 @@
<body> <body>
<div id="qunit-fixture"></div> <div id="qunit-fixture"></div>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
window.parent.iframeCallback( startIframeTest();
window,
document.body,
"<script>window.scriptTest = true;<\x2fscript>"
);
</script> </script>
</body> </body>
</html> </html>

View File

@ -16,6 +16,7 @@
#positionTest { position: absolute; } #positionTest { position: absolute; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
$(".absolute").click(function() { $(".absolute").click(function() {
@ -24,7 +25,7 @@
$(this).css({ top: pos.top, left: pos.left }); $(this).css({ top: pos.top, left: pos.left });
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -10,13 +10,14 @@
#firstElement { width: 50px; height: 50px; background: green; } #firstElement { width: 50px; height: 50px; background: green; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
$("body").click(function() { $("body").click(function() {
$("marker").css( $(this).offset() ); $("marker").css( $(this).offset() );
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -13,6 +13,7 @@
#marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; } #marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
window.scrollTo(1000,1000); window.scrollTo(1000,1000);
@ -20,7 +21,7 @@
$("#marker").css( $(this).offset() ); $("#marker").css( $(this).offset() );
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -12,6 +12,7 @@
#marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; } #marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
$(".relative").click(function() { $(".relative").click(function() {
@ -20,7 +21,7 @@
$(this).css({ position: 'absolute', top: pos.top, left: pos.left }); $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -15,6 +15,7 @@
#marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; } #marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
window.scrollTo(1000,1000); window.scrollTo(1000,1000);
@ -24,7 +25,7 @@
$("#marker").css( $(this).offset() ); $("#marker").css( $(this).offset() );
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -11,6 +11,7 @@
#marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; } #marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
$(".static").click(function() { $(".static").click(function() {
@ -19,7 +20,7 @@
$(this).css({ position: 'absolute', top: pos.top, left: pos.left }); $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -11,13 +11,14 @@
#marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; } #marker { position: absolute; border: 2px solid #000; width: 50px; height: 50px; background: #ccc; }
</style> </style>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
jQuery(function($) { jQuery(function($) {
$("table, th, td").click(function() { $("table, th, td").click(function() {
$("#marker").css( $(this).offset() ); $("#marker").css( $(this).offset() );
return false; return false;
}); });
window.parent.iframeCallback( jQuery, window, document ); startIframeTest();
}); });
</script> </script>
</head> </head>

View File

@ -5,7 +5,7 @@
<title>jQuery selector - attributes</title> <title>jQuery selector - attributes</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script id="script1" <script id="script1"
defer defer
async></script> async></script>
@ -16,9 +16,7 @@
document.createElement('article'); document.createElement('article');
document.createElement('details'); document.createElement('details');
jQuery( function() { jQuery( startIframeTest );
window.parent.iframeCallback( jQuery, window, document );
} );
</script> </script>
</head> </head>
<body> <body>

View File

@ -5,6 +5,7 @@
<title>jQuery selector - sizzle cache</title> <title>jQuery selector - sizzle cache</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script> <script>
document.write( document.write(
"<script>var $cached = jQuery.noConflict(true);<\x2Fscript>" + "<script>var $cached = jQuery.noConflict(true);<\x2Fscript>" +
@ -18,9 +19,7 @@
<a href="#" id="collision">Worlds collide</a> <a href="#" id="collision">Worlds collide</a>
</div> </div>
<script> <script>
jQuery( function() { jQuery( startIframeTest );
window.parent.iframeCallback( jQuery, window, document );
} );
</script> </script>
</body> </body>
</html> </html>

View File

@ -18,10 +18,11 @@
<body> <body>
<div> <div>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script src="getComputedSupport.js"></script> <script src="getComputedSupport.js"></script>
</div> </div>
<script> <script>
window.parent.iframeCallback( jQuery( "body" ).css( "backgroundColor" ), startIframeTest( jQuery( "body" ).css( "backgroundColor" ),
getComputedSupport( jQuery.support ) ); getComputedSupport( jQuery.support ) );
</script> </script>
</body> </body>

View File

@ -1,3 +1,3 @@
jQuery( function() { jQuery( function() {
parent.iframeCallback( getComputedSupport( jQuery.support ) ); startIframeTest( getComputedSupport( jQuery.support ) );
} ); } );

View File

@ -9,6 +9,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSP Test Page</title> <title>CSP Test Page</title>
<script src="../../jquery.js"></script> <script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script src="csp.js"></script> <script src="csp.js"></script>
<script src="getComputedSupport.js"></script> <script src="getComputedSupport.js"></script>
</head> </head>

View File

@ -232,15 +232,15 @@ this.ajaxTest = function( title, expect, options ) {
} ); } );
}; };
this.testIframeWithCallback = function( title, fileName, func ) { this.testIframe = function( title, fileName, func ) {
QUnit.test( title, 1, function( assert ) { QUnit.test( title, function( assert ) {
var iframe; var iframe;
var done = assert.async(); var done = assert.async();
window.iframeCallback = function() { window.iframeCallback = function() {
var args = Array.prototype.slice.call( arguments ); var args = Array.prototype.slice.call( arguments );
args.push( assert ); args.unshift( assert );
setTimeout( function() { setTimeout( function() {
this.iframeCallback = undefined; this.iframeCallback = undefined;
@ -248,7 +248,6 @@ this.testIframeWithCallback = function( title, fileName, func ) {
func.apply( this, args ); func.apply( this, args );
func = function() {}; func = function() {};
iframe.remove(); iframe.remove();
done(); done();
} ); } );
}; };

View File

@ -28,7 +28,7 @@ QUnit.module( "ajax", {
//----------- jQuery.ajax() //----------- jQuery.ajax()
testIframeWithCallback( testIframe(
"XMLHttpRequest - Attempt to block tests because of dangling XHR requests (IE)", "XMLHttpRequest - Attempt to block tests because of dangling XHR requests (IE)",
"ajax/unreleasedXHR.html", "ajax/unreleasedXHR.html",
function( assert ) { function( assert ) {
@ -1826,10 +1826,10 @@ if ( typeof window.ArrayBuffer === "undefined" || typeof new XMLHttpRequest().re
}; };
} ); } );
testIframeWithCallback( testIframe(
"#14379 - jQuery.ajax() on unload", "#14379 - jQuery.ajax() on unload",
"ajax/onunload.html", "ajax/onunload.html",
function( status, assert ) { function( assert, jQuery, window, document, status ) {
assert.expect( 1 ); assert.expect( 1 );
assert.strictEqual( status, "success", "Request completed" ); assert.strictEqual( status, "success", "Request completed" );
} }

View File

@ -1648,14 +1648,14 @@ QUnit.test( "jQuery.camelCase()", function( assert ) {
} ); } );
} ); } );
testIframeWithCallback( testIframe(
"Conditional compilation compatibility (#13274)", "Conditional compilation compatibility (#13274)",
"core/cc_on.html", "core/cc_on.html",
function( cc_on, errors, $, assert ) { function( assert, jQuery, window, document, cc_on, errors ) {
assert.expect( 3 ); assert.expect( 3 );
assert.ok( true, "JScript conditional compilation " + ( cc_on ? "supported" : "not supported" ) ); assert.ok( true, "JScript conditional compilation " + ( cc_on ? "supported" : "not supported" ) );
assert.deepEqual( errors, [], "No errors" ); assert.deepEqual( errors, [], "No errors" );
assert.ok( $(), "jQuery executes" ); assert.ok( jQuery(), "jQuery executes" );
} }
); );
@ -1663,29 +1663,29 @@ testIframeWithCallback(
// This makes this test fail but it doesn't seem to cause any real-life problems so blacklisting // This makes this test fail but it doesn't seem to cause any real-life problems so blacklisting
// this test there is preferred to complicating the hard-to-test core/ready code further. // this test there is preferred to complicating the hard-to-test core/ready code further.
if ( !/iphone os 7_/i.test( navigator.userAgent ) ) { if ( !/iphone os 7_/i.test( navigator.userAgent ) ) {
testIframeWithCallback( testIframe(
"document ready when jQuery loaded asynchronously (#13655)", "document ready when jQuery loaded asynchronously (#13655)",
"core/dynamic_ready.html", "core/dynamic_ready.html",
function( ready, assert ) { function( assert, jQuery, window, document, ready ) {
assert.expect( 1 ); assert.expect( 1 );
assert.equal( true, ready, "document ready correctly fired when jQuery is loaded after DOMContentLoaded" ); assert.equal( true, ready, "document ready correctly fired when jQuery is loaded after DOMContentLoaded" );
} }
); );
} }
testIframeWithCallback( testIframe(
"Tolerating alias-masked DOM properties (#14074)", "Tolerating alias-masked DOM properties (#14074)",
"core/aliased.html", "core/aliased.html",
function( errors, assert ) { function( assert, jQuery, window, document, errors ) {
assert.expect( 1 ); assert.expect( 1 );
assert.deepEqual( errors, [], "jQuery loaded" ); assert.deepEqual( errors, [], "jQuery loaded" );
} }
); );
testIframeWithCallback( testIframe(
"Don't call window.onready (#14802)", "Don't call window.onready (#14802)",
"core/onready.html", "core/onready.html",
function( error, assert ) { function( assert, jQuery, window, document, error ) {
assert.expect( 1 ); assert.expect( 1 );
assert.equal( error, false, "no call to user-defined onready" ); assert.equal( error, false, "no call to user-defined onready" );
} }

View File

@ -1139,10 +1139,10 @@ QUnit.test( "css('width') and css('height') should respect box-sizing, see #1100
assert.equal( el_dis.css( "height" ), el_dis.css( "height", el_dis.css( "height" ) ).css( "height" ), "css('height') is not respecting box-sizing for disconnected element, see #11004" ); assert.equal( el_dis.css( "height" ), el_dis.css( "height", el_dis.css( "height" ) ).css( "height" ), "css('height') is not respecting box-sizing for disconnected element, see #11004" );
} ); } );
testIframeWithCallback( testIframe(
"css('width') should work correctly before document ready (#14084)", "css('width') should work correctly before document ready (#14084)",
"css/cssWidthBeforeDocReady.html", "css/cssWidthBeforeDocReady.html",
function( cssWidthBeforeDocReady, assert ) { function( assert, jQuery, window, document, cssWidthBeforeDocReady ) {
assert.expect( 1 ); assert.expect( 1 );
assert.strictEqual( cssWidthBeforeDocReady, "100px", "elem.css('width') works correctly before document ready" ); assert.strictEqual( cssWidthBeforeDocReady, "100px", "elem.css('width') works correctly before document ready" );
} }

View File

@ -857,10 +857,10 @@ QUnit.test( "Check proper data removal of non-element descendants nodes (#8335)"
assert.ok( !text.data( "test" ), "Be sure data is not stored in non-element" ); assert.ok( !text.data( "test" ), "Be sure data is not stored in non-element" );
} ); } );
testIframeWithCallback( testIframe(
"enumerate data attrs on body (#14894)", "enumerate data attrs on body (#14894)",
"data/dataAttrs.html", "data/dataAttrs.html",
function( result, assert ) { function( assert, jQuery, window, document, result ) {
assert.expect( 1 ); assert.expect( 1 );
assert.equal( result, "ok", "enumeration of data- attrs on body" ); assert.equal( result, "ok", "enumeration of data- attrs on body" );
} }

View File

@ -469,10 +469,10 @@ QUnit.test( "setters with and without box-sizing:border-box", function( assert )
} ); } );
} ); } );
testIframeWithCallback( testIframe(
"window vs. large document", "window vs. large document",
"dimensions/documentLarge.html", "dimensions/documentLarge.html",
function( jQuery, window, document, assert ) { function( assert, jQuery, window, document ) {
assert.expect( 2 ); assert.expect( 2 );
assert.ok( jQuery( document ).height() > jQuery( window ).height(), "document height is larger than window height" ); assert.ok( jQuery( document ).height() > jQuery( window ).height(), "document height is larger than window height" );

View File

@ -2476,10 +2476,10 @@ QUnit.test( "focusin using non-element targets", function( assert ) {
} ); } );
testIframeWithCallback( testIframe(
"focusin from an iframe", "focusin from an iframe",
"event/focusinCrossFrame.html", "event/focusinCrossFrame.html",
function( frameDoc, assert ) { function( assert, framejQuery, frameWin, frameDoc ) {
assert.expect( 1 ); assert.expect( 1 );
var input = jQuery( frameDoc ).find( "#frame-input" ); var input = jQuery( frameDoc ).find( "#frame-input" );
@ -2507,10 +2507,10 @@ testIframeWithCallback(
} }
); );
testIframeWithCallback( testIframe(
"jQuery.ready promise", "jQuery.ready promise",
"event/promiseReady.html", "event/promiseReady.html",
function( isOk, assert ) { function( assert, jQuery, window, document, isOk ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( isOk, "$.when( $.ready ) works" ); assert.ok( isOk, "$.when( $.ready ) works" );
} }
@ -2518,29 +2518,29 @@ testIframeWithCallback(
// need PHP here to make the incepted IFRAME hang // need PHP here to make the incepted IFRAME hang
if ( hasPHP ) { if ( hasPHP ) {
testIframeWithCallback( testIframe(
"jQuery.ready uses interactive", "jQuery.ready uses interactive",
"event/interactiveReady.html", "event/interactiveReady.html",
function( isOk, assert ) { function( assert, jQuery, window, document, isOk ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( isOk, "jQuery fires ready when the DOM can truly be interacted with" ); assert.ok( isOk, "jQuery fires ready when the DOM can truly be interacted with" );
} }
); );
} }
testIframeWithCallback( testIframe(
"Focusing iframe element", "Focusing iframe element",
"event/focusElem.html", "event/focusElem.html",
function( isOk, assert ) { function( assert, jQuery, window, document, isOk ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( isOk, "Focused an element in an iframe" ); assert.ok( isOk, "Focused an element in an iframe" );
} }
); );
testIframeWithCallback( testIframe(
"triggerHandler(onbeforeunload)", "triggerHandler(onbeforeunload)",
"event/triggerunload.html", "event/triggerunload.html",
function( isOk, assert ) { function( assert, jQuery, window, document, isOk ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( isOk, "Triggered onbeforeunload without an error" ); assert.ok( isOk, "Triggered onbeforeunload without an error" );
} }
@ -2548,10 +2548,10 @@ testIframeWithCallback(
// need PHP here to make the incepted IFRAME hang // need PHP here to make the incepted IFRAME hang
if ( hasPHP ) { if ( hasPHP ) {
testIframeWithCallback( testIframe(
"jQuery.ready synchronous load with long loading subresources", "jQuery.ready synchronous load with long loading subresources",
"event/syncReady.html", "event/syncReady.html",
function( isOk, assert ) { function( assert, jQuery, window, document, isOk ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( isOk, "jQuery loaded synchronously fires ready when the DOM can truly be interacted with" ); assert.ok( isOk, "jQuery loaded synchronously fires ready when the DOM can truly be interacted with" );
} }

View File

@ -2237,21 +2237,21 @@ QUnit.test( "domManip executes scripts containing html comments or CDATA (trac-9
].join( "\n" ) ).appendTo( "#qunit-fixture" ); ].join( "\n" ) ).appendTo( "#qunit-fixture" );
} ); } );
testIframeWithCallback( testIframe(
"domManip tolerates window-valued document[0] in IE9/10 (trac-12266)", "domManip tolerates window-valued document[0] in IE9/10 (trac-12266)",
"manipulation/iframe-denied.html", "manipulation/iframe-denied.html",
function( test, assert ) { function( assert, jQuery, window, document, test ) {
assert.expect( 1 ); assert.expect( 1 );
assert.ok( test.status, test.description ); assert.ok( test.status, test.description );
} }
); );
testIframeWithCallback( testIframe(
"domManip executes scripts in iframes in the iframes' context", "domManip executes scripts in iframes in the iframes' context",
"manipulation/scripts-context.html", "manipulation/scripts-context.html",
function( frameWindow, bodyElement, html, assert ) { function( assert, framejQuery, frameWindow, frameDocument ) {
assert.expect( 2 ); assert.expect( 2 );
jQuery( bodyElement ).append( html ); jQuery( frameDocument.body ).append( "<script>window.scriptTest = true;<\x2fscript>" );
assert.ok( !window.scriptTest, "script executed in iframe context" ); assert.ok( !window.scriptTest, "script executed in iframe context" );
assert.ok( frameWindow.scriptTest, "script executed in iframe context" ); assert.ok( frameWindow.scriptTest, "script executed in iframe context" );
} }

View File

@ -68,7 +68,7 @@ QUnit.test( "hidden (display: none) element", function( assert ) {
assert.equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" ); assert.equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
} ); } );
testIframeWithCallback( "absolute", "offset/absolute.html", function( $, iframe, document, assert ) { testIframe( "absolute", "offset/absolute.html", function( assert, $, iframe ) {
assert.expect( 4 ); assert.expect( 4 );
var doc = iframe.document, var doc = iframe.document,
@ -93,7 +93,7 @@ testIframeWithCallback( "absolute", "offset/absolute.html", function( $, iframe,
} ); } );
} ); } );
testIframeWithCallback( "absolute", "offset/absolute.html", function( $, window, document, assert ) { testIframe( "absolute", "offset/absolute.html", function( assert, $ ) {
assert.expect( 178 ); assert.expect( 178 );
var tests, offset; var tests, offset;
@ -178,7 +178,7 @@ testIframeWithCallback( "absolute", "offset/absolute.html", function( $, window,
} ); } );
} ); } );
testIframeWithCallback( "relative", "offset/relative.html", function( $, window, document, assert ) { testIframe( "relative", "offset/relative.html", function( assert, $ ) {
assert.expect( 64 ); assert.expect( 64 );
// get offset // get offset
@ -236,7 +236,7 @@ testIframeWithCallback( "relative", "offset/relative.html", function( $, window,
} ); } );
} ); } );
testIframeWithCallback( "static", "offset/static.html", function( $, window, document, assert ) { testIframe( "static", "offset/static.html", function( assert, $ ) {
assert.expect( 80 ); assert.expect( 80 );
// get offset // get offset
@ -298,7 +298,7 @@ testIframeWithCallback( "static", "offset/static.html", function( $, window, doc
} ); } );
} ); } );
testIframeWithCallback( "fixed", "offset/fixed.html", function( $, window, document, assert ) { testIframe( "fixed", "offset/fixed.html", function( assert, $, window ) {
assert.expect( 34 ); assert.expect( 34 );
var tests, $noTopLeft; var tests, $noTopLeft;
@ -388,7 +388,7 @@ testIframeWithCallback( "fixed", "offset/fixed.html", function( $, window, docum
} }
} ); } );
testIframeWithCallback( "table", "offset/table.html", function( $, window, document, assert ) { testIframe( "table", "offset/table.html", function( assert, $ ) {
assert.expect( 4 ); assert.expect( 4 );
assert.equal( $( "#table-1" ).offset().top, 6, "jQuery('#table-1').offset().top" ); assert.equal( $( "#table-1" ).offset().top, 6, "jQuery('#table-1').offset().top" );
@ -398,7 +398,7 @@ testIframeWithCallback( "table", "offset/table.html", function( $, window, docum
assert.equal( $( "#th-1" ).offset().left, 10, "jQuery('#th-1').offset().left" ); assert.equal( $( "#th-1" ).offset().left, 10, "jQuery('#th-1').offset().left" );
} ); } );
testIframeWithCallback( "scroll", "offset/scroll.html", function( $, win, doc, assert ) { testIframe( "scroll", "offset/scroll.html", function( assert, $, win ) {
assert.expect( 26 ); assert.expect( 26 );
assert.equal( $( "#scroll-1" ).offset().top, 7, "jQuery('#scroll-1').offset().top" ); assert.equal( $( "#scroll-1" ).offset().top, 7, "jQuery('#scroll-1').offset().top" );
@ -457,7 +457,7 @@ testIframeWithCallback( "scroll", "offset/scroll.html", function( $, win, doc, a
assert.strictEqual( $().scrollLeft(), undefined, "jQuery().scrollLeft() testing getter on empty jquery object" ); assert.strictEqual( $().scrollLeft(), undefined, "jQuery().scrollLeft() testing getter on empty jquery object" );
} ); } );
testIframeWithCallback( "body", "offset/body.html", function( $, window, document, assert ) { testIframe( "body", "offset/body.html", function( assert, $ ) {
assert.expect( 4 ); assert.expect( 4 );
assert.equal( $( "body" ).offset().top, 1, "jQuery('#body').offset().top" ); assert.equal( $( "body" ).offset().top, 1, "jQuery('#body').offset().top" );

View File

@ -289,10 +289,10 @@ QUnit[ jQuery.find.compile ? "test" : "skip" ]( "disconnected nodes", function(
assert.equal( $opt.is( ":selected" ), true, "selected option" ); assert.equal( $opt.is( ":selected" ), true, "selected option" );
} ); } );
testIframeWithCallback( testIframe(
"attributes - jQuery.attr", "attributes - jQuery.attr",
"selector/html5_selector.html", "selector/html5_selector.html",
function( jQuery, window, document, assert ) { function( assert, jQuery, window, document ) {
assert.expect( 38 ); assert.expect( 38 );
/** /**
@ -489,10 +489,10 @@ QUnit.test( "jQuery.uniqueSort", function( assert ) {
assert.strictEqual( jQuery.unique, jQuery.uniqueSort, "jQuery.unique() is an alias for jQuery.uniqueSort()" ); assert.strictEqual( jQuery.unique, jQuery.uniqueSort, "jQuery.unique() is an alias for jQuery.uniqueSort()" );
} ); } );
testIframeWithCallback( testIframe(
"Sizzle cache collides with multiple Sizzles on a page", "Sizzle cache collides with multiple Sizzles on a page",
"selector/sizzle_cache.html", "selector/sizzle_cache.html",
function( jQuery, window, document, assert ) { function( assert, jQuery, window, document ) {
var $cached = window[ "$cached" ]; var $cached = window[ "$cached" ];
assert.expect( 4 ); assert.expect( 4 );

View File

@ -18,10 +18,10 @@ function getComputedSupport( support ) {
} }
if ( jQuery.css ) { if ( jQuery.css ) {
testIframeWithCallback( testIframe(
"body background is not lost if set prior to loading jQuery (#9239)", "body background is not lost if set prior to loading jQuery (#9239)",
"support/bodyBackground.html", "support/bodyBackground.html",
function( color, support, assert ) { function( assert, jQuery, window, document, color, support ) {
assert.expect( 2 ); assert.expect( 2 );
var okValue = { var okValue = {
"#000000": true, "#000000": true,
@ -37,10 +37,10 @@ if ( jQuery.css ) {
// This test checks CSP only for browsers with "Content-Security-Policy" header support // This test checks CSP only for browsers with "Content-Security-Policy" header support
// i.e. no old WebKit or old Firefox // i.e. no old WebKit or old Firefox
testIframeWithCallback( testIframe(
"Check CSP (https://developer.mozilla.org/en-US/docs/Security/CSP) restrictions", "Check CSP (https://developer.mozilla.org/en-US/docs/Security/CSP) restrictions",
"support/csp.php", "support/csp.php",
function( support, assert ) { function( assert, jQuery, window, document, support ) {
var done = assert.async(); var done = assert.async();
assert.expect( 2 ); assert.expect( 2 );