From 30168722204633e49ca9d47ecb6b43d80a4653a4 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Thu, 19 Jul 2012 22:02:37 -0400 Subject: [PATCH] Let subproject tests use their own test fixture. Closes gh-867. --- test/data/testrunner.js | 74 +++++++++++++++++++++++++++++++++++++++++ test/index.html | 7 ++-- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/test/data/testrunner.js b/test/data/testrunner.js index fe720cec3..6d73bea96 100644 --- a/test/data/testrunner.js +++ b/test/data/testrunner.js @@ -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 */ diff --git a/test/index.html b/test/index.html index aeb9362d6..7fcc54fca 100644 --- a/test/index.html +++ b/test/index.html @@ -40,8 +40,6 @@ - - @@ -54,6 +52,11 @@ + + +