grunt.loadNpmTasks( 'grunt-banana-checker' );
grunt.loadNpmTasks( 'grunt-jscs' );
grunt.loadNpmTasks( 'grunt-jsonlint' );
+ grunt.loadNpmTasks( 'grunt-karma' );
grunt.file.setBase( __dirname + '/../..' );
+ var wgServer = process.env.MW_SERVER,
+ wgScriptPath = process.env.MW_SCRIPT_PATH;
+
grunt.initConfig( {
pkg: grunt.file.readJSON( __dirname + '/package.json' ),
jshint: {
'.jshintrc'
],
tasks: 'test'
+ },
+ karma: {
+ options: {
+ proxies: ( function () {
+ var obj = {};
+ // Set up a proxy for requests to relative urls inside wgScriptPath. Uses a
+ // property accessor instead of plain obj[wgScriptPath] assignment as throw if
+ // unset. Running grunt normally (e.g. npm test), should not fail over this.
+ // This ensures 'npm test' works out of the box, statically, on a git clone
+ // without MediaWiki fully installed or some environment variables set.
+ Object.defineProperty( obj, wgScriptPath, {
+ enumerable: true,
+ get: function () {
+ if ( !wgServer ) {
+ grunt.fail.fatal( 'MW_SERVER is not set' );
+ }
+ if ( !wgScriptPath ) {
+ grunt.fail.fatal( 'MW_SCRIPT_PATH is not set' );
+ }
+ return wgServer + wgScriptPath;
+ }
+ } );
+ return obj;
+ }() ),
+ files: [ {
+ pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
+ watched: false,
+ included: true,
+ served: false
+ } ],
+ frameworks: [ 'qunit' ],
+ reporters: [ 'dots' ],
+ singleRun: true,
+ autoWatch: false
+ },
+ main: {
+ browsers: [ 'Chrome' ]
+ },
+ more: {
+ browsers: [ 'Chrome', 'Firefox' ]
+ }
}
} );
grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
+ grunt.registerTask( 'qunit', 'karma:main' );
+
grunt.registerTask( 'test', ['lint'] );
- grunt.registerTask( 'default', ['test'] );
+ grunt.registerTask( 'default', 'test' );
};
},
"devDependencies": {
"grunt": "0.4.2",
+ "grunt-banana-checker": "0.2.0",
"grunt-contrib-jshint": "0.10.0",
"grunt-contrib-watch": "0.6.1",
- "grunt-banana-checker": "0.2.0",
"grunt-jscs": "0.8.1",
- "grunt-jsonlint": "1.0.4"
+ "grunt-jsonlint": "1.0.4",
+ "grunt-karma": "0.9.0",
+ "karma": "0.12.28",
+ "karma-chrome-launcher": "0.1.7",
+ "karma-firefox-launcher": "0.1.3",
+ "karma-qunit": "0.1.4",
+ "qunitjs": "1.15.0"
}
}
};
}() );
+ // Extend QUnit.module to provide a fixture element.
+ ( function () {
+ var orgModule = QUnit.module;
+
+ QUnit.module = function ( name, localEnv ) {
+ var fixture;
+ localEnv = localEnv || {};
+ orgModule( name, {
+ setup: function () {
+ fixture = document.createElement( 'div' );
+ fixture.id = 'qunit-fixture';
+ document.body.appendChild( fixture );
+
+ if ( localEnv.setup ) {
+ localEnv.setup.call( this );
+ }
+ },
+ teardown: function () {
+ if ( localEnv.teardown ) {
+ localEnv.teardown.call( this );
+ }
+
+ fixture.parentNode.removeChild( fixture );
+ }
+ } );
+ };
+ }() );
+
// Initiate when enabled
if ( QUnit.urlParams.completenesstest ) {