]> source.dussan.org Git - jquery.git/commitdiff
Tests: Make iframe tests wait after checking isReady
authorDave Methvin <dave.methvin@gmail.com>
Fri, 8 Apr 2016 16:00:17 +0000 (12:00 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Mon, 11 Apr 2016 17:29:11 +0000 (13:29 -0400)
Ref gh-3040

15 files changed:
README.md
test/data/dimensions/documentLarge.html
test/data/offset/absolute.html
test/data/offset/body.html
test/data/offset/fixed.html
test/data/offset/relative.html
test/data/offset/scroll.html
test/data/offset/static.html
test/data/offset/table.html
test/data/selector/html5_selector.html
test/data/selector/sizzle_cache.html
test/data/testinit.js
test/unit/dimensions.js
test/unit/offset.js
test/unit/selector.js

index 404a26885e874cfbaef712f81c75b3c128b5a29a..5c1a90c041f63789b8e9d2c8e59671c42c315301 100644 (file)
--- a/README.md
+++ b/README.md
@@ -340,32 +340,25 @@ url("data/test.php?foo=bar");
 ```
 
 
-### Load tests in an iframe ###
-
-Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
-and fires the given callback on jQuery ready (using the jQuery loading from that page)
-and passes the iFrame's jQuery to the callback.
-
-```js
-testIframe( fileName, testName, callback );
-```
-
-Callback arguments:
+### Load tests in an iframe (window.iframeCallback) ###
 
 ```js
-callback( jQueryFromIFrame, iFrameWindow, iFrameDocument );
+testIframeWithCallback( testName, fileName,
+  function callback( arg1, arg2, ... assert ) {
+       ...
+  } );
 ```
 
-### Load tests in an iframe (window.iframeCallback) ###
-
 Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
-The given callback is fired when window.iframeCallback is called by the page.
-The arguments passed to the callback are the same as the
-arguments passed to window.iframeCallback, whatever that may be.
+The iframe page is responsible for determining when `window.parent.iframeCallback`
+should be called, for example at document ready or window.onload time.
+Arguments passed to the callback are the same as the arguments passed
+to `window.parent.iframeCallback` by the iframe, plus the QUnit `assert`
+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.
+
 
-```js
-testIframeWithCallback( testName, fileName, callback );
-```
 
 Questions?
 ----------
index a6598fcc86b19042548c948bb417f33ac45d632c..c977fac96565ded4c380e2b2ad40bbbb1c10147c 100644 (file)
 <body>
        <div>
                <script src="../../jquery.js"></script>
+               <script>
+                       jQuery( function() {
+                               window.parent.iframeCallback( jQuery, window, document );
+                       } );
+               </script>
        </div>
 </body>
 </html>
index 58f0cbd2a365107b1cfea9c8684cc4ce2b26dc6d..84a9e33de49f854585cdc29dd6eff6a7fe215baa 100644 (file)
@@ -24,6 +24,7 @@
                                        $(this).css({ top: pos.top, left: pos.left });
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index c0de297b72344cff7c94d3e2228da6b43e068090..cada87a156a395638b48e0ceda9ca34ccd63d27e 100644 (file)
@@ -16,6 +16,7 @@
                                        $("marker").css( $(this).offset() );
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index c695ba4ddada26c6c2475ee7b401c681dd1f8f09..e543895963cfed8c2d4a441925b3b42ac30904fb 100644 (file)
@@ -20,6 +20,7 @@
                                        $("#marker").css( $(this).offset() );
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index f88c82ab94610a730e1b8f2d63a69587af605150..b413e05ee348fd6edd52163a2131091a2d249cd2 100644 (file)
@@ -20,6 +20,7 @@
                                        $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index c8c08020fa1f249dbce5edf57d48a74dc157b90c..49304eee70d0631c31ec58c36449f07886f9df9f 100644 (file)
@@ -24,6 +24,7 @@
                                        $("#marker").css( $(this).offset() );
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index f8cafa882858b5ce74fb23415e41c66a3b2fb2f4..125ad740f46fc43b1d45b728cf959ae10f5e5be5 100644 (file)
@@ -19,6 +19,7 @@
                                        $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index ff2b8579e7692a4a6eb44ead04b7c33703728026..1e37957ce49f4c1c48a73d306f6808cffe997ce5 100644 (file)
@@ -17,6 +17,7 @@
                                        $("#marker").css( $(this).offset() );
                                        return false;
                                });
+                               window.parent.iframeCallback( jQuery, window, document );
                        });
                </script>
        </head>
index 30f25c9d5ac8f1777635e90a7b18cccbce413572..bf0e5ba5e1ff2e67a45c082b9679c6e8e89171db 100644 (file)
                document.createElement('audio');
                document.createElement('article');
                document.createElement('details');
+
+               jQuery( function() {
+                       window.parent.iframeCallback( jQuery, window, document );
+               } );
        </script>
 </head>
 <body>
index 1055c75aea03407cb7dacce769a054d636765b09..4320fdcfdb06ba12eaeb92c5dabafdb0d7a8aba7 100644 (file)
        <div class="test">
                <a href="#" id="collision">Worlds collide</a>
        </div>
+       <script>
+               jQuery( function() {
+                       window.parent.iframeCallback( jQuery, window, document );
+               } );
+       </script>
 </body>
 </html>
index dfae73d7cb5db897db244a0242821fba7a4e2d6a..70c9bbd5a4e75422ec1a458588e412cd632f0435 100644 (file)
@@ -232,37 +232,6 @@ this.ajaxTest = function( title, expect, options ) {
        } );
 };
 
-this.testIframe = function( fileName, name, fn ) {
-       QUnit.test( name, function( assert ) {
-               var done = assert.async();
-
-               // load fixture in iframe
-               var iframe = loadFixture(),
-                       win = iframe.contentWindow,
-                       interval = setInterval( function() {
-                               if ( win && win.jQuery && win.jQuery.isReady ) {
-                                       clearInterval( interval );
-
-                                       // call actual tests passing the correct jQuery instance to use
-                                       fn.call( this, win.jQuery, win, win.document, assert );
-                                       done();
-                                       document.body.removeChild( iframe );
-                                       iframe = null;
-                               }
-                       }, 15 );
-       } );
-
-       function loadFixture() {
-               var src = url( "./data/" + fileName + ".html" ),
-                       iframe = jQuery( "<iframe />" ).appendTo( "body" )[ 0 ];
-                       iframe.style.cssText = "width: 500px; height: 500px; position: absolute; " +
-                               "top: -600px; left: -600px; visibility: hidden;";
-
-               iframe.contentWindow.location = src;
-               return iframe;
-       }
-};
-
 this.testIframeWithCallback = function( title, fileName, func ) {
        QUnit.test( title, 1, function( assert ) {
                var iframe;
index 31c5aa48b73b80e7463f4ecee7c9ca7b4308f1cd..1f8ff5007f025577e1207b484b4dfdc170a52819 100644 (file)
@@ -469,9 +469,9 @@ QUnit.test( "setters with and without box-sizing:border-box", function( assert )
        } );
 } );
 
-testIframe(
-       "dimensions/documentLarge",
+testIframeWithCallback(
        "window vs. large document",
+       "dimensions/documentLarge.html",
        function( jQuery, window, document, assert ) {
                assert.expect( 2 );
 
index 52113fb9fc83355aebe3832663099fa7aa49857a..65483107eb3026e6376df0a4fb10d1a16d91852f 100644 (file)
@@ -35,13 +35,6 @@ QUnit.module( "offset", { setup: function() {
        forceScroll.detach();
 }, teardown: moduleTeardown } );
 
-/*
-       Closure-compiler will roll static methods off of the jQuery object and so they will
-       not be passed with the jQuery object across the windows. To differentiate this, the
-       testIframe callbacks use the "$" symbol to refer to the jQuery object passed from
-       the iframe window and the "jQuery" symbol is used to access any static methods.
-*/
-
 QUnit.test( "empty set", function( assert ) {
        assert.expect( 2 );
        assert.strictEqual( jQuery().offset(), undefined, "offset() returns undefined for empty set (#11962)" );
@@ -75,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)" );
 } );
 
-testIframe( "offset/absolute", "absolute", function( $, iframe, document, assert ) {
+testIframeWithCallback( "absolute", "offset/absolute.html", function( $, iframe, document, assert ) {
        assert.expect( 4 );
 
        var doc = iframe.document,
@@ -100,7 +93,7 @@ testIframe( "offset/absolute", "absolute", function( $, iframe, document, assert
        } );
 } );
 
-testIframe( "offset/absolute", "absolute", function( $, window, document, assert ) {
+testIframeWithCallback( "absolute", "offset/absolute.html", function( $, window, document, assert ) {
        assert.expect( 178 );
 
        var tests, offset;
@@ -185,7 +178,7 @@ testIframe( "offset/absolute", "absolute", function( $, window, document, assert
        } );
 } );
 
-testIframe( "offset/relative", "relative", function( $, window, document, assert ) {
+testIframeWithCallback( "relative", "offset/relative.html", function( $, window, document, assert ) {
        assert.expect( 64 );
 
        // get offset
@@ -243,7 +236,7 @@ testIframe( "offset/relative", "relative", function( $, window, document, assert
        } );
 } );
 
-testIframe( "offset/static", "static", function( $, window, document, assert ) {
+testIframeWithCallback( "static", "offset/static.html", function( $, window, document, assert ) {
        assert.expect( 80 );
 
        // get offset
@@ -305,7 +298,7 @@ testIframe( "offset/static", "static", function( $, window, document, assert ) {
        } );
 } );
 
-testIframe( "offset/fixed", "fixed", function( $, window, document, assert ) {
+testIframeWithCallback( "fixed", "offset/fixed.html", function( $, window, document, assert ) {
        assert.expect( 34 );
 
        var tests, $noTopLeft;
@@ -395,7 +388,7 @@ testIframe( "offset/fixed", "fixed", function( $, window, document, assert ) {
        }
 } );
 
-testIframe( "offset/table", "table", function( $, window, document, assert ) {
+testIframeWithCallback( "table", "offset/table.html", function( $, window, document, assert ) {
        assert.expect( 4 );
 
        assert.equal( $( "#table-1" ).offset().top, 6, "jQuery('#table-1').offset().top" );
@@ -405,7 +398,7 @@ testIframe( "offset/table", "table", function( $, window, document, assert ) {
        assert.equal( $( "#th-1" ).offset().left, 10, "jQuery('#th-1').offset().left" );
 } );
 
-testIframe( "offset/scroll", "scroll", function( $, win, doc, assert ) {
+testIframeWithCallback( "scroll", "offset/scroll.html", function( $, win, doc, assert ) {
        assert.expect( 26 );
 
        assert.equal( $( "#scroll-1" ).offset().top, 7, "jQuery('#scroll-1').offset().top" );
@@ -464,7 +457,7 @@ testIframe( "offset/scroll", "scroll", function( $, win, doc, assert ) {
        assert.strictEqual( $().scrollLeft(), undefined, "jQuery().scrollLeft() testing getter on empty jquery object" );
 } );
 
-testIframe( "offset/body", "body", function( $, window, document, assert ) {
+testIframeWithCallback( "body", "offset/body.html", function( $, window, document, assert ) {
        assert.expect( 4 );
 
        assert.equal( $( "body" ).offset().top, 1, "jQuery('#body').offset().top" );
index 1263c7cf6a3e44b5f508c3ee78baead6e46b4352..1b5de13174ca939114cba8bc9125a7f85c11b700 100644 (file)
@@ -289,9 +289,9 @@ QUnit[ jQuery.find.compile ? "test" : "skip" ]( "disconnected nodes", function(
        assert.equal( $opt.is( ":selected" ), true, "selected option" );
 } );
 
-testIframe(
-       "selector/html5_selector",
+testIframeWithCallback(
        "attributes - jQuery.attr",
+       "selector/html5_selector.html",
        function( jQuery, window, document, assert ) {
                assert.expect( 38 );
 
@@ -489,9 +489,9 @@ QUnit.test( "jQuery.uniqueSort", function( assert ) {
        assert.strictEqual( jQuery.unique, jQuery.uniqueSort, "jQuery.unique() is an alias for jQuery.uniqueSort()" );
 } );
 
-testIframe(
-       "selector/sizzle_cache",
+testIframeWithCallback(
        "Sizzle cache collides with multiple Sizzles on a page",
+       "selector/sizzle_cache.html",
        function( jQuery, window, document, assert ) {
                var $cached = window[ "$cached" ];