'use strict'; 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'); const defined = Cesium.defined; const argv = yargs.argv; // Add third-party node module binaries to the system path // since some tasks need to call them directly. const environmentSeparator = process.platform === 'win32' ? ';' : ':'; const nodeBinaries = path.join(__dirname, 'node_modules', '.bin'); process.env.PATH += environmentSeparator + nodeBinaries; const specFiles = ['**/*.js', '!node_modules/**', '!coverage/**', '!doc/**', '!bin/**']; module.exports = { test: test, 'test-watch': testWatch, coverage: coverage, cloc: cloc }; function test(done) { const jasmine = new Jasmine(); 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); }); } function testWatch() { return gulp.watch(specFiles).on('change', function () { // We can't simply depend on the test task because Jasmine // does not like being run multiple times in the same process. 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.'); } }); } async function coverage() { fsExtra.removeSync('coverage/server'); child_process.execSync('nyc' + ' --all' + ' --reporter=lcov' + ' --dir coverage' + ' -x "specs/**" -x "coverage/**" -x "doc/**" -x "bin/**" -x "index.js" -x "gulpfile.js"' + ' node_modules/jasmine/bin/jasmine.js' + ' JASMINE_CONFIG_PATH=specs/jasmine.json', { stdio: [process.stdin, process.stdout, process.stderr] }); open('coverage/lcov-report/index.html'); } function cloc() { let cmdLine; const clocPath = path.join('node_modules', 'cloc', 'lib', 'cloc'); //Run cloc on primary Source files only const source = new Promise(function(resolve, reject) { cmdLine = 'perl ' + clocPath + ' --quiet --progress-rate=0' + ' lib/ bin/'; 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(); }); }); }); }