]> source.dussan.org Git - jquery.git/commitdiff
Let subproject tests use their own test fixture. Closes gh-867.
authorDave Methvin <dave.methvin@gmail.com>
Fri, 20 Jul 2012 02:02:37 +0000 (22:02 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Fri, 20 Jul 2012 02:02:37 +0000 (22:02 -0400)
test/data/testrunner.js
test/index.html

index fe720cec3ac6517bd5a9e006d542983dac082a36..6d73bea96b316baf46b4347fd52bbd7b3203e0dc 100644 (file)
@@ -7,6 +7,80 @@ jQuery.noConflict();
 // We remove Sizzle's globalization in jQuery
 var Sizzle = Sizzle || jQuery.find;
 
+// Allow subprojects to test against their own fixtures
+var qunitModule = QUnit.module;
+function testSubproject( label, url, risTests ) {
+       module( "Subproject: " + label );
+
+       module = QUnit.module = function( name ) {
+               return qunitModule.apply( this, [ label + ": " + name ].concat( [].slice.call( arguments, 1 ) ) );
+       };
+
+       test( "Copy test fixture", function() {
+               expect(3);
+
+               // Don't let subproject tests jump the gun
+               QUnit.config.reorder = false;
+
+               stop();
+               jQuery.ajax( url, {
+                       dataType: "html",
+                       error: function( jqXHR, status ) {
+                               ok( false, "Retrieved test page: " + status );
+                       },
+                       success: function( data ) {
+                               var page, fixture, fixtureHTML,
+                                       oldFixture = jQuery("#qunit-fixture");
+
+                               ok( data, "Retrieved test page" );
+                               try {
+                                       page = jQuery( jQuery.parseHTML(
+                                               data.replace( /(<\/?)(?:html|head)\b/g, "$1div" ),
+                                               document,
+                                               true
+                                       ) );
+
+                                       // Get the fixture, including content outside of #qunit-fixture
+                                       fixture = page.find("[id='qunit-fixture']");
+                                       fixtureHTML = fixture.html();
+                                       fixture.empty();
+                                       while ( fixture.length && !fixture.prevAll("[id^='qunit-']").length ) {
+                                               fixture = fixture.parent();
+                                       }
+                                       fixture = fixture.add( fixture.nextAll() );
+                                       ok( fixture.html(), "Found test fixture" );
+
+                                       // Replace the current fixture, again including content outside of #qunit-fixture
+                                       while ( oldFixture.length && !oldFixture.prevAll("[id^='qunit-']").length ) {
+                                               oldFixture = oldFixture.parent();
+                                       }
+                                       oldFixture.nextAll().remove();
+                                       oldFixture.replaceWith( fixture );
+
+                                       // WARNING: UNDOCUMENTED INTERFACE
+                                       QUnit.config.fixture = fixtureHTML;
+                                       QUnit.reset();
+                                       equal( jQuery("#qunit-fixture").html(), fixtureHTML, "Copied test fixture" );
+
+                                       // Include subproject tests
+                                       page.find("script[src]").add( page.filter("script[src]") ).filter(function() {
+                                               var src = jQuery( this ).attr("src");
+                                               if ( risTests.test( src ) ) {
+                                                       this.src = url + src;
+                                                       return true;
+                                               }
+                                       }).appendTo("head:first");
+                               } catch ( x ) {
+                                       ok( false, "Failed to copy test fixture: " + ( x.message || x ) );
+                               }
+                       },
+                       complete: function() {
+                               start();
+                       }
+               });
+       });
+}
+
 /**
  * QUnit hooks
  */
index aeb9362d6d249f4e2436d0699f638f90650b704e..7fcc54fca8ec8f62eeb408501c53242dd8139037 100644 (file)
@@ -40,8 +40,6 @@
        <script src="unit/queue.js"></script>
        <script src="unit/attributes.js"></script>
        <script src="unit/event.js"></script>
-       <script src="../src/sizzle/test/unit/selector.js"></script>
-       <script src="../src/sizzle/test/unit/utilities.js"></script>
        <script src="unit/selector.js"></script>
        <script src="unit/traversing.js"></script>
        <script src="unit/manipulation.js"></script>
        <script src="unit/deprecated.js"></script>
        <script src="unit/exports.js"></script>
 
+       <!-- Subproject tests must be last because they replace our test fixture -->
+       <script>
+               testSubproject( "Sizzle", "../src/sizzle/test/", /^unit\/.*\.js$/ );
+       </script>
+
        <script>
                // html5shiv, enabling HTML5 elements to be used with jQuery
                ( "abbr article aside audio bdi canvas data details figcaption figure footer header hgroup " +