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

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

replied Jul 20, 2012

Oh duh, thanks @Krinkle !

@gibson042

This comment has been minimized.

Copy link
Member

replied Jul 20, 2012

Sorry 'bout that. Fix: #868

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