|
|
@@ -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,25 +2647,24 @@ 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(); |
|
|
appendToolbar(); |
|
|
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"; |
|
|
|