aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/testsuites.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/testsuites.js')
-rw-r--r--tests/unit/testsuites.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/unit/testsuites.js b/tests/unit/testsuites.js
new file mode 100644
index 000000000..ffe2d3cc0
--- /dev/null
+++ b/tests/unit/testsuites.js
@@ -0,0 +1,76 @@
+(function( $, QUnit ) {
+
+$.extend( QUnit, {
+ testSuites: function( suites ) {
+ $.each( suites, function( i, suite ) {
+ asyncTest( suite, function() {
+ runSuite( suite );
+ });
+ });
+ },
+
+ testStart: function( data ) {
+ // update the test status to show which test suite is running
+ $( "#qunit-testresult" ).html( "Running " + data.name + "...<br>&nbsp;" );
+ },
+
+ testDone: function() {
+ // undo the auto-expansion of failed tests
+ $( "#qunit-tests > li.fail" ).each(function() {
+ var test = $( this );
+ // avoid collapsing test results that the user manually opened
+ if ( test.data( "auto-collapsed" ) ) {
+ return;
+ }
+ test.data( "auto-collapsed", true )
+ .children( "ol" ).hide();
+ });
+ }
+});
+
+// generate an iframe to run the test suite and proxy the iframe's QUnit
+// to pass all test info to the main page
+function runSuite( suite ) {
+ var body = $( "body" ),
+ iframe = $( "<iframe>", { src: suite } )
+ .css({
+ width: 1000,
+ height: 1000
+ })
+ .appendTo( body )
+ [0],
+ iframeWin = iframe.contentWindow;
+
+ $( iframeWin ).bind( "load", function() {
+ var module, test,
+ count = 0;
+
+ $.extend( iframeWin.QUnit, {
+ moduleStart: function( data ) {
+ // capture module name for messages
+ module = data.name;
+ },
+
+ testStart: function( data ) {
+ // capture test name for messages
+ test = data.name;
+ },
+
+ log: function( data ) {
+ // pass all test details through to the main page
+ var message = module + ": " + test + ": " + data.message;
+ expect( ++count );
+ QUnit.push( data.result, data.actual, data.expected, message );
+ },
+
+ done: function() {
+ // hide the iframe from the main page once the tests are done
+ // and start the wrapper test from the main page
+ $( iframe ).hide();
+ start();
+ }
+ });
+ });
+}
+
+}( jQuery, QUnit ) );