aboutsummaryrefslogtreecommitdiffstats
path: root/external/qunit/qunit.js
diff options
context:
space:
mode:
Diffstat (limited to 'external/qunit/qunit.js')
-rw-r--r--external/qunit/qunit.js178
1 files changed, 117 insertions, 61 deletions
diff --git a/external/qunit/qunit.js b/external/qunit/qunit.js
index 82020d40d..006ca4747 100644
--- a/external/qunit/qunit.js
+++ b/external/qunit/qunit.js
@@ -1,12 +1,12 @@
/*!
- * QUnit 1.16.0
+ * QUnit 1.17.1
* http://qunitjs.com/
*
- * Copyright 2006, 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2014-12-03T16:32Z
+ * Date: 2015-01-20T19:39Z
*/
(function( window ) {
@@ -103,10 +103,6 @@ config = {
// block until document ready
blocking: true,
- // when enabled, show only failing tests
- // gets persisted through sessionStorage and can be changed in UI via checkbox
- hidepassed: false,
-
// by default, run previously failed tests first
// very useful in combination with "Hide passed tests" checked
reorder: true,
@@ -180,6 +176,10 @@ config.modules.push( config.currentModule );
}
}
+ if ( urlParams.filter === true ) {
+ delete urlParams.filter;
+ }
+
QUnit.urlParams = urlParams;
// String search anywhere in moduleName+testName
@@ -363,24 +363,6 @@ extend( QUnit, {
return undefined;
},
- url: function( params ) {
- params = extend( extend( {}, QUnit.urlParams ), params );
- var key,
- querystring = "?";
-
- for ( key in params ) {
- if ( hasOwn.call( params, key ) ) {
- querystring += encodeURIComponent( key );
- if ( params[ key ] !== true ) {
- querystring += "=" + encodeURIComponent( params[ key ] );
- }
- querystring += "&";
- }
- }
- return location.protocol + "//" + location.host +
- location.pathname + querystring.slice( 0, -1 );
- },
-
extend: extend,
load: function() {
@@ -578,7 +560,7 @@ function process( last ) {
process( last );
}
var start = now();
- config.depth = config.depth ? config.depth + 1 : 1;
+ config.depth = ( config.depth || 0 ) + 1;
while ( config.queue.length && !config.blocking ) {
if ( !defined.setTimeout || config.updateRate <= 0 ||
@@ -1141,7 +1123,7 @@ Test.prototype = {
valid: function() {
var include,
- filter = config.filter && config.filter.toLowerCase(),
+ filter = config.filter,
module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
@@ -1164,7 +1146,7 @@ Test.prototype = {
include = filter.charAt( 0 ) !== "!";
if ( !include ) {
- filter = filter.slice( 1 );
+ filter = filter.toLowerCase().slice( 1 );
}
// If the filter matches, we need to honour include
@@ -1987,12 +1969,15 @@ if ( typeof window !== "undefined" ) {
}
// For nodejs
-if ( typeof module !== "undefined" && module.exports ) {
+if ( typeof module !== "undefined" && module && module.exports ) {
module.exports = QUnit;
+
+ // For consistency with CommonJS environments' exports
+ module.exports.QUnit = QUnit;
}
// For CommonJS with exports, but without module.exports, like Rhino
-if ( typeof exports !== "undefined" ) {
+if ( typeof exports !== "undefined" && exports ) {
exports.QUnit = QUnit;
}
@@ -2340,7 +2325,10 @@ function getUrlConfigHtml() {
escaped = escapeText( val.id );
escapedTooltip = escapeText( val.tooltip );
- config[ val.id ] = QUnit.urlParams[ val.id ];
+ if ( config[ val.id ] === undefined ) {
+ config[ val.id ] = QUnit.urlParams[ val.id ];
+ }
+
if ( !val.value || typeof val.value === "string" ) {
urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
"' name='" + escaped + "' type='checkbox'" +
@@ -2399,7 +2387,7 @@ function toolbarChanged() {
}
params[ field.name ] = value;
- updatedUrl = QUnit.url( params );
+ updatedUrl = setUrl( params );
if ( "hidepassed" === field.name && "replaceState" in window.history ) {
config[ field.name ] = value || false;
@@ -2416,10 +2404,47 @@ function toolbarChanged() {
}
}
+function setUrl( params ) {
+ var key,
+ querystring = "?";
+
+ params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params );
+
+ for ( key in params ) {
+ if ( hasOwn.call( params, key ) ) {
+ if ( params[ key ] === undefined ) {
+ continue;
+ }
+ querystring += encodeURIComponent( key );
+ if ( params[ key ] !== true ) {
+ querystring += "=" + encodeURIComponent( params[ key ] );
+ }
+ querystring += "&";
+ }
+ }
+ return location.protocol + "//" + location.host +
+ location.pathname + querystring.slice( 0, -1 );
+}
+
+function applyUrlParams() {
+ var selectBox = id( "qunit-modulefilter" ),
+ selection = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value ),
+ filter = id( "qunit-filter-input" ).value;
+
+ window.location = setUrl({
+ module: ( selection === "" ) ? undefined : selection,
+ filter: ( filter === "" ) ? undefined : filter,
+
+ // Remove testId filter
+ testId: undefined
+ });
+}
+
function toolbarUrlConfigContainer() {
var urlConfigContainer = document.createElement( "span" );
urlConfigContainer.innerHTML = getUrlConfigHtml();
+ addClass( urlConfigContainer, "qunit-url-config" );
// For oldIE support:
// * Add handlers to the individual elements instead of the container
@@ -2430,6 +2455,40 @@ function toolbarUrlConfigContainer() {
return urlConfigContainer;
}
+function toolbarLooseFilter() {
+ var filter = document.createElement( "form" ),
+ label = document.createElement( "label" ),
+ input = document.createElement( "input" ),
+ button = document.createElement( "button" );
+
+ addClass( filter, "qunit-filter" );
+
+ label.innerHTML = "Filter: ";
+
+ input.type = "text";
+ input.value = config.filter || "";
+ input.name = "filter";
+ input.id = "qunit-filter-input";
+
+ button.innerHTML = "Go";
+
+ label.appendChild( input );
+
+ filter.appendChild( label );
+ filter.appendChild( button );
+ addEvent( filter, "submit", function( ev ) {
+ applyUrlParams();
+
+ if ( ev && ev.preventDefault ) {
+ ev.preventDefault();
+ }
+
+ return false;
+ });
+
+ return filter;
+}
+
function toolbarModuleFilterHtml() {
var i,
moduleFilterHtml = "";
@@ -2463,25 +2522,14 @@ function toolbarModuleFilter() {
moduleFilter = document.createElement( "span" ),
moduleFilterHtml = toolbarModuleFilterHtml();
- if ( !moduleFilterHtml ) {
+ if ( !toolbar || !moduleFilterHtml ) {
return false;
}
moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
moduleFilter.innerHTML = moduleFilterHtml;
- addEvent( moduleFilter.lastChild, "change", function() {
- var selectBox = moduleFilter.getElementsByTagName( "select" )[ 0 ],
- selection = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value );
-
- window.location = QUnit.url({
- module: ( selection === "" ) ? undefined : selection,
-
- // Remove any existing filters
- filter: undefined,
- testId: undefined
- });
- });
+ addEvent( moduleFilter.lastChild, "change", applyUrlParams );
toolbar.appendChild( moduleFilter );
}
@@ -2491,6 +2539,17 @@ function appendToolbar() {
if ( toolbar ) {
toolbar.appendChild( toolbarUrlConfigContainer() );
+ toolbar.appendChild( toolbarLooseFilter() );
+ }
+}
+
+function appendHeader() {
+ var header = id( "qunit-header" );
+
+ if ( header ) {
+ header.innerHTML = "<a href='" +
+ setUrl({ filter: undefined, module: undefined, testId: undefined }) +
+ "'>" + header.innerHTML + "</a> ";
}
}
@@ -2499,9 +2558,6 @@ function appendBanner() {
if ( banner ) {
banner.className = "";
- banner.innerHTML = "<a href='" +
- QUnit.url({ filter: undefined, module: undefined, testId: undefined }) +
- "'>" + banner.innerHTML + "</a> ";
}
}
@@ -2533,7 +2589,8 @@ function storeFixture() {
function appendUserAgent() {
var userAgent = id( "qunit-userAgent" );
if ( userAgent ) {
- userAgent.innerHTML = navigator.userAgent;
+ userAgent.innerHTML = "";
+ userAgent.appendChild( document.createTextNode( navigator.userAgent ) );
}
}
@@ -2568,7 +2625,7 @@ function appendTest( name, testId, moduleName ) {
rerunTrigger = document.createElement( "a" );
rerunTrigger.innerHTML = "Rerun";
- rerunTrigger.href = QUnit.url({ testId: testId });
+ rerunTrigger.href = setUrl({ testId: testId });
testBlock = document.createElement( "li" );
testBlock.appendChild( title );
@@ -2590,17 +2647,16 @@ QUnit.begin(function( details ) {
// Fixture is the only one necessary to run without the #qunit element
storeFixture();
- if ( !qunit ) {
- return;
+ if ( qunit ) {
+ qunit.innerHTML =
+ "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+ "<h2 id='qunit-banner'></h2>" +
+ "<div id='qunit-testrunner-toolbar'></div>" +
+ "<h2 id='qunit-userAgent'></h2>" +
+ "<ol id='qunit-tests'></ol>";
}
- qunit.innerHTML =
- "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
- "<h2 id='qunit-banner'></h2>" +
- "<div id='qunit-testrunner-toolbar'></div>" +
- "<h2 id='qunit-userAgent'></h2>" +
- "<ol id='qunit-tests'></ol>";
-
+ appendHeader();
appendBanner();
appendTestResults();
appendUserAgent();
@@ -2608,7 +2664,7 @@ QUnit.begin(function( details ) {
appendTestsList( details.modules );
toolbarModuleFilter();
- if ( config.hidepassed ) {
+ if ( qunit && config.hidepassed ) {
addClass( qunit.lastChild, "hidepass" );
}
});
@@ -2788,7 +2844,7 @@ QUnit.testDone(function( details ) {
details.assertions.length + ")</b>";
if ( details.skipped ) {
- addClass( testItem, "skipped" );
+ testItem.className = "skipped";
skipped = document.createElement( "em" );
skipped.className = "qunit-skipped-label";
skipped.innerHTML = "skipped";