Doesn't seem to add anything, except complexity. This has the benefit of matching more closely the way the README recommends running individual tests. Also add a check for 'chromedriver' before running it. Normally the -e and pipefail would suffice, but because it runs in the background, the error can be buried, hard to find, or even not cause exit code to be set properly. Thus, do a simple 'hash' check that will print a useful command and exit cleanly. Before: > $ something & > [1] 57922 > -bash: something: command not found > [1]+ Exit 127 something > $ echo $? > 0 After: > $ hash something > -bash: hash: something: not found > (exit: 1) $ echo $? > 1 Change-Id: Id95f18927b5443defe679a77a82c5cbdd127c716
127 lines
3.3 KiB
JavaScript
127 lines
3.3 KiB
JavaScript
/* eslint-env node */
|
|
|
|
module.exports = function ( grunt ) {
|
|
|
|
var wgServer = process.env.MW_SERVER,
|
|
wgScriptPath = process.env.MW_SCRIPT_PATH,
|
|
karmaProxy = {};
|
|
|
|
grunt.loadNpmTasks( 'grunt-banana-checker' );
|
|
grunt.loadNpmTasks( 'grunt-contrib-copy' );
|
|
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
|
grunt.loadNpmTasks( 'grunt-eslint' );
|
|
grunt.loadNpmTasks( 'grunt-jsonlint' );
|
|
grunt.loadNpmTasks( 'grunt-karma' );
|
|
grunt.loadNpmTasks( 'grunt-stylelint' );
|
|
|
|
karmaProxy[ wgScriptPath ] = {
|
|
target: wgServer + wgScriptPath,
|
|
changeOrigin: true
|
|
};
|
|
|
|
grunt.initConfig( {
|
|
eslint: {
|
|
all: [
|
|
'**/*.js',
|
|
'!docs/**',
|
|
'!node_modules/**',
|
|
'!resources/lib/**',
|
|
'!resources/src/jquery.tipsy/**',
|
|
'!resources/src/jquery/jquery.farbtastic.js',
|
|
'!resources/src/mediawiki.libs/**',
|
|
// Third-party code of PHPUnit coverage report
|
|
'!tests/coverage/**',
|
|
'!vendor/**',
|
|
// Explicitly say "**/*.js" here in case of symlinks
|
|
'!extensions/**/*.js',
|
|
'!skins/**/*.js',
|
|
// Skip functions aren't even parseable
|
|
'!resources/src/mediawiki.hidpi-skip.js'
|
|
]
|
|
},
|
|
jsonlint: {
|
|
all: [
|
|
'**/*.json',
|
|
'!{docs/js,extensions,node_modules,skins,vendor}/**'
|
|
]
|
|
},
|
|
banana: {
|
|
options: {
|
|
disallowBlankTranslations: false
|
|
},
|
|
core: 'languages/i18n/',
|
|
api: 'includes/api/i18n/',
|
|
installer: 'includes/installer/i18n/'
|
|
},
|
|
stylelint: {
|
|
src: '{resources/src,mw-config}/**/*.{css,less}'
|
|
},
|
|
watch: {
|
|
files: [
|
|
'.{stylelintrc,eslintrc.json}',
|
|
'**/*',
|
|
'!{docs,extensions,node_modules,skins,vendor}/**'
|
|
],
|
|
tasks: 'test'
|
|
},
|
|
karma: {
|
|
options: {
|
|
proxies: karmaProxy,
|
|
files: [ {
|
|
pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
|
|
watched: false,
|
|
included: true,
|
|
served: false
|
|
} ],
|
|
logLevel: 'DEBUG',
|
|
frameworks: [ 'qunit' ],
|
|
reporters: [ 'mocha' ],
|
|
singleRun: true,
|
|
autoWatch: false,
|
|
// Some tests in extensions don't yield for more than the default 10s (T89075)
|
|
browserNoActivityTimeout: 60 * 1000,
|
|
// Karma requires Same-Origin (or CORS) by default since v1.1.1
|
|
// for better stacktraces. But we load the first request from wgServer
|
|
crossOriginAttribute: false
|
|
},
|
|
main: {
|
|
browsers: [ 'Chrome' ]
|
|
},
|
|
chromium: {
|
|
browsers: [ 'Chromium' ]
|
|
},
|
|
firefox: {
|
|
browsers: [ 'Firefox' ]
|
|
}
|
|
},
|
|
copy: {
|
|
jsduck: {
|
|
src: 'resources/**/*',
|
|
dest: 'docs/js/modules',
|
|
expand: true,
|
|
rename: function ( dest, src ) {
|
|
return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
|
|
}
|
|
}
|
|
}
|
|
} );
|
|
|
|
grunt.registerTask( 'assert-mw-env', function () {
|
|
if ( !process.env.MW_SERVER ) {
|
|
grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
|
|
'Set this like $wgServer, e.g. "http://localhost"'
|
|
);
|
|
}
|
|
if ( !process.env.MW_SCRIPT_PATH ) {
|
|
grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
|
|
'Set this like $wgScriptPath, e.g. "/w"' );
|
|
}
|
|
return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
|
|
} );
|
|
|
|
grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
|
|
grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
|
|
|
|
grunt.registerTask( 'test', [ 'lint' ] );
|
|
grunt.registerTask( 'default', 'test' );
|
|
};
|