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 3016872
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 2 deletions.
@@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh duh, thanks @Krinkle !

@gibson042
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry 'bout that. Fix: #868

Please sign in to comment.