|  | "use strict"; | 
|  |  | 
|  | module.exports = function( grunt ) { | 
|  | grunt.registerTask( "testswarm", function( commit, configFile, projectName, browserSets, | 
|  | timeout, testMode ) { | 
|  | var jobName, config, tests, | 
|  | testswarm = require( "testswarm" ), | 
|  | runs = {}, | 
|  | done = this.async(), | 
|  | pull = /PR-(\d+)/.exec( commit ); | 
|  |  | 
|  | projectName = projectName || "jquery"; | 
|  | config = grunt.file.readJSON( configFile )[ projectName ]; | 
|  | browserSets = browserSets || config.browserSets; | 
|  | if ( browserSets[ 0 ] === "[" ) { | 
|  |  | 
|  | // We got an array, parse it | 
|  | browserSets = JSON.parse( browserSets ); | 
|  | } | 
|  | timeout = timeout || 1000 * 60 * 15; | 
|  | tests = grunt.config( [ this.name, "tests" ] ); | 
|  |  | 
|  | if ( pull ) { | 
|  | jobName = "Pull <a href='https://github.com/jquery/jquery/pull/" + | 
|  | pull[ 1 ] + "'>#" + pull[ 1 ] + "</a>"; | 
|  | } else { | 
|  | jobName = "Commit <a href='https://github.com/jquery/jquery/commit/" + | 
|  | commit + "'>" + commit.substr( 0, 10 ) + "</a>"; | 
|  | } | 
|  |  | 
|  | if ( testMode === "basic" ) { | 
|  | runs.basic = config.testUrl + commit + "/test/index.html?module=basic"; | 
|  | } else { | 
|  | tests.forEach( function( test ) { | 
|  | runs[ test ] = config.testUrl + commit + "/test/index.html?module=" + test; | 
|  | } ); | 
|  | } | 
|  |  | 
|  | testswarm.createClient( { | 
|  | url: config.swarmUrl | 
|  | } ) | 
|  | .addReporter( testswarm.reporters.cli ) | 
|  | .auth( { | 
|  | id: config.authUsername, | 
|  | token: config.authToken | 
|  | } ) | 
|  | .addjob( | 
|  | { | 
|  | name: jobName, | 
|  | runs: runs, | 
|  | runMax: config.runMax, | 
|  | browserSets: browserSets, | 
|  | timeout: timeout | 
|  | }, function( err, passed ) { | 
|  | if ( err ) { | 
|  | grunt.log.error( err ); | 
|  | } | 
|  | done( passed ); | 
|  | } | 
|  | ); | 
|  | } ); | 
|  | }; |