diff options
author | Dave Methvin <dave.methvin@gmail.com> | 2012-07-19 22:02:37 -0400 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-07-19 22:02:37 -0400 |
commit | 30168722204633e49ca9d47ecb6b43d80a4653a4 (patch) | |
tree | 9e18f010ae7979437a5085601e3c6f20cb44cebd /test | |
parent | f70a696598f14917e49dc108271788e2ec2f6587 (diff) | |
download | jquery-30168722204633e49ca9d47ecb6b43d80a4653a4.tar.gz jquery-30168722204633e49ca9d47ecb6b43d80a4653a4.zip |
Let subproject tests use their own test fixture. Closes gh-867.
Diffstat (limited to 'test')
-rw-r--r-- | test/data/testrunner.js | 74 | ||||
-rw-r--r-- | 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 @@ <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 " + |