Skip to content
Permalink
Browse files

Let subproject tests use their own test fixture. Closes gh-867.

  • Loading branch information
dmethvin committed Jul 20, 2012
1 parent f70a696 commit 30168722204633e49ca9d47ecb6b43d80a4653a4
Showing with 79 additions and 2 deletions.
  1. +74 −0 test/data/testrunner.js
  2. +5 −2 test/index.html
@@ -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
*/
@@ -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>
@@ -54,6 +52,11 @@
<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 " +

3 comments on commit 3016872

@Krinkle

This comment has been minimized.

Copy link
Member

@Krinkle Krinkle replied Jul 20, 2012

You need to remove "selector" from the tests list in the testswarm task in grunt.js as well, because there is now no longer a "selector" qunit module in the main jQuery test suite.

Either that, or figure out a way to have it still run on index.html?module=selector.

Or, update grunt.js otherwise to not break testswarm (e.g. by replacing "selector" with "Subproject: xxx" or something in the module list).

@dmethvin

This comment has been minimized.

Copy link
Member Author

@dmethvin dmethvin replied Jul 20, 2012

Oh duh, thanks @Krinkle !

@gibson042

This comment has been minimized.

Copy link
Member

@gibson042 gibson042 replied Jul 20, 2012

Sorry 'bout that. Fix: #868

Please sign in to comment.
You can’t perform that action at this time.