2016-06-09 13:33:08 -04:00
|
|
|
'use strict';
|
|
|
|
|
2019-02-05 20:59:09 -05:00
|
|
|
const Cesium = require('cesium');
|
|
|
|
const Promise = require('bluebird');
|
|
|
|
const child_process = require('child_process');
|
|
|
|
const fsExtra = require('fs-extra');
|
|
|
|
const gulp = require('gulp');
|
|
|
|
const Jasmine = require('jasmine');
|
|
|
|
const JasmineSpecReporter = require('jasmine-spec-reporter').SpecReporter;
|
|
|
|
const open = require('open');
|
|
|
|
const path = require('path');
|
|
|
|
const yargs = require('yargs');
|
2016-06-09 13:33:08 -04:00
|
|
|
|
2019-02-05 20:59:09 -05:00
|
|
|
const defined = Cesium.defined;
|
|
|
|
const argv = yargs.argv;
|
2016-06-09 13:33:08 -04:00
|
|
|
|
2016-07-08 18:10:18 -04:00
|
|
|
// Add third-party node module binaries to the system path
|
|
|
|
// since some tasks need to call them directly.
|
2019-02-05 20:59:09 -05:00
|
|
|
const environmentSeparator = process.platform === 'win32' ? ';' : ':';
|
|
|
|
const nodeBinaries = path.join(__dirname, 'node_modules', '.bin');
|
2016-07-08 18:10:18 -04:00
|
|
|
process.env.PATH += environmentSeparator + nodeBinaries;
|
2016-06-09 13:33:08 -04:00
|
|
|
|
2019-02-05 20:59:09 -05:00
|
|
|
const specFiles = ['**/*.js', '!node_modules/**', '!coverage/**', '!doc/**', '!bin/**'];
|
2016-07-08 18:10:18 -04:00
|
|
|
|
2018-11-06 12:15:18 -05:00
|
|
|
module.exports = {
|
|
|
|
test: test,
|
|
|
|
'test-watch': testWatch,
|
|
|
|
coverage: coverage,
|
|
|
|
cloc: cloc
|
|
|
|
};
|
|
|
|
|
|
|
|
function test(done) {
|
2019-02-05 20:59:09 -05:00
|
|
|
const jasmine = new Jasmine();
|
2016-07-08 18:10:18 -04:00
|
|
|
jasmine.loadConfigFile('specs/jasmine.json');
|
|
|
|
jasmine.addReporter(new JasmineSpecReporter({
|
|
|
|
displaySuccessfulSpec: !defined(argv.suppressPassed) || !argv.suppressPassed
|
|
|
|
}));
|
|
|
|
jasmine.execute();
|
|
|
|
jasmine.onComplete(function (passed) {
|
|
|
|
done(argv.failTaskOnError && !passed ? 1 : 0);
|
|
|
|
});
|
2018-11-06 12:15:18 -05:00
|
|
|
}
|
2016-06-09 13:33:08 -04:00
|
|
|
|
2018-11-06 12:15:18 -05:00
|
|
|
function testWatch() {
|
2018-11-06 12:38:49 -05:00
|
|
|
return gulp.watch(specFiles).on('change', function () {
|
2017-03-13 15:28:51 -04:00
|
|
|
// We can't simply depend on the test task because Jasmine
|
|
|
|
// does not like being run multiple times in the same process.
|
2016-07-08 18:10:18 -04:00
|
|
|
try {
|
|
|
|
child_process.execSync('jasmine JASMINE_CONFIG_PATH=specs/jasmine.json', {
|
|
|
|
stdio: [process.stdin, process.stdout, process.stderr]
|
|
|
|
});
|
|
|
|
} catch (exception) {
|
|
|
|
console.log('Tests failed to execute.');
|
|
|
|
}
|
2016-06-09 13:33:08 -04:00
|
|
|
});
|
2018-11-06 12:15:18 -05:00
|
|
|
}
|
2016-07-08 18:10:18 -04:00
|
|
|
|
2018-11-06 12:38:49 -05:00
|
|
|
async function coverage() {
|
2016-07-08 18:10:18 -04:00
|
|
|
fsExtra.removeSync('coverage/server');
|
2017-06-20 13:24:03 -04:00
|
|
|
child_process.execSync('nyc' +
|
|
|
|
' --all' +
|
|
|
|
' --reporter=lcov' +
|
2016-07-08 18:10:18 -04:00
|
|
|
' --dir coverage' +
|
2017-03-13 15:28:51 -04:00
|
|
|
' -x "specs/**" -x "coverage/**" -x "doc/**" -x "bin/**" -x "index.js" -x "gulpfile.js"' +
|
2016-07-08 18:10:18 -04:00
|
|
|
' node_modules/jasmine/bin/jasmine.js' +
|
|
|
|
' JASMINE_CONFIG_PATH=specs/jasmine.json', {
|
2018-11-06 12:15:18 -05:00
|
|
|
stdio: [process.stdin, process.stdout, process.stderr]
|
|
|
|
});
|
2018-11-06 12:38:49 -05:00
|
|
|
open('coverage/lcov-report/index.html');
|
2018-11-06 12:15:18 -05:00
|
|
|
}
|
2018-01-29 16:50:56 -05:00
|
|
|
|
2018-11-06 12:15:18 -05:00
|
|
|
function cloc() {
|
2019-02-05 20:59:09 -05:00
|
|
|
let cmdLine;
|
|
|
|
const clocPath = path.join('node_modules', 'cloc', 'lib', 'cloc');
|
2018-01-29 16:50:56 -05:00
|
|
|
|
|
|
|
//Run cloc on primary Source files only
|
2019-02-05 20:59:09 -05:00
|
|
|
const source = new Promise(function(resolve, reject) {
|
2018-01-29 16:50:56 -05:00
|
|
|
cmdLine = 'perl ' + clocPath + ' --quiet --progress-rate=0' +
|
2018-01-30 11:27:03 -05:00
|
|
|
' lib/ bin/';
|
2018-01-29 16:50:56 -05:00
|
|
|
|
|
|
|
child_process.exec(cmdLine, function(error, stdout, stderr) {
|
|
|
|
if (error) {
|
|
|
|
console.log(stderr);
|
|
|
|
return reject(error);
|
|
|
|
}
|
|
|
|
console.log('Source:');
|
|
|
|
console.log(stdout);
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
//If running cloc on source succeeded, also run it on the tests.
|
|
|
|
return source.then(function() {
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
cmdLine = 'perl ' + clocPath + ' --quiet --progress-rate=0' +
|
|
|
|
' specs/lib/';
|
|
|
|
child_process.exec(cmdLine, function(error, stdout, stderr) {
|
|
|
|
if (error) {
|
|
|
|
console.log(stderr);
|
|
|
|
return reject(error);
|
|
|
|
}
|
|
|
|
console.log('Specs:');
|
|
|
|
console.log(stdout);
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2018-11-06 12:15:18 -05:00
|
|
|
}
|