grunt-exec
Version:
Grunt task for executing shell commands.
204 lines (184 loc) • 6.89 kB
JavaScript
module.exports = function(grunt) {
grunt.initConfig({
exec: {
create_dir: { cmd: 'mkdir "tmp dir"' },
remove_logs: {
command: process.platform === 'win32' ? 'del *.log' : 'rm -f *.log'
, stdout: false
, stderr: false
}
, list_files: {
cmd: process.platform === 'win32' ? 'dir' : 'ls -l **'
}
, list_all_files: process.platform === 'win32' ? 'dir' : 'ls -la'
, echo_grunt_version: {
cmd: function() { return 'echo ' + this.version; }
}
, print_name: {
cmd: function(firstName, lastName) {
var formattedName = [
(lastName || 'grunt').toUpperCase()
, (firstName || 'exec').toUpperCase()
].join(', ');
return 'echo ' + formattedName;
}
}
, test_mysql_ticket: {
cmd: function () {
var DB_USER = "abc";
var DB_PASSWORD = "password";
var DATABASE = "database-with-dashes";
return `echo mysql -u "${DB_USER}" -p"${DB_PASSWORD}" -e "CREATE DATABASE IF NOT EXISTS \'${DATABASE}\';"`;
},
callback: function(err, stdout, stderr) {
console.log('stdout: ' + stdout);
if (process.platform === 'win32') {
if ((stdout + "").trim() !== `mysql -u "abc" -p"password" -e "CREATE DATABASE IF NOT EXISTS 'database-with-dashes';"`) {
grunt.log.error("Unexpected result: " + stdout);
return false;
}
} else {
if ((stdout + "").trim() !== `mysql -u abc -ppassword -e CREATE DATABASE IF NOT EXISTS 'database-with-dashes';`) {
grunt.log.error("Unexpected result: " + stdout);
return false;
}
}
}
}
, test_large_stdout_buffer: {
// maxBuffer has to be equal to count + 1
options: { maxBuffer: 10000001, encoding: 'buffer' },
stdout: false, // suppress the stdout otherwise you get a bunch of garbage being displayed
cmd: function () {
var count = 1000000;
// generates count number of random bytes that are console-friendly (printable ascii 32->126)
return `node -e "var garbage = ''; var count = ${count}; for (var i = 0; i < count; i++) { var c = String.fromCharCode(Math.floor(32 + (Math.random() * 94))); garbage += c; } process.stdout.write(garbage);"`;
},
callback: function(err, stdout, stderr) {
var count = 1000000;
if (err && err.toString() === "Error: stdout maxBuffer exceeded") {
grunt.log.error("Unexpected maxBuffer exceeded");
return false;
}
if (typeof stdout === "string") {
grunt.log.error("Unexpected stdout type (string), expected buffer. String length was " + stdout.length);
return false;
}
var str = stdout.toString();
if (str.length !== count) {
grunt.log.error("Unexpected result: " + str.length + " != " + count.toString());
return false;
}
}
}
// this used to produce an error when using 'exec'
, test_large_stdout_nocallback: {
stdout: false, // suppress the stdout otherwise you get a bunch of garbage being displayed
cmd: function () {
var count = 1000000;
// generates count number of random bytes that are console-friendly (printable ascii 32->126)
return `node -e "var garbage = ''; var count = ${count}; for (var i = 0; i < count; i++) { var c = String.fromCharCode(Math.floor(32 + (Math.random() * 94))); garbage += c; } process.stdout.write(garbage);"`;
},
}
, test_large_stdout_string: {
// maxBuffer has to be equal to count + 1
options: { maxBuffer: 10000001 },
stdout: false, // suppress the stdout otherwise you get a bunch of garbage being displayed
cmd: function () {
var count = 1000000;
// generates count number of random bytes that are console-friendly (printable ascii 32->126)
return `node -e "var garbage = ''; var count = ${count}; for (var i = 0; i < count; i++) { var c = String.fromCharCode(Math.floor(32 + (Math.random() * 94))); garbage += c; } process.stdout.write(garbage);"`;
},
callback: function(err, stdout, stderr) {
var count = 1000000;
if (err && err.toString() === "Error: stdout maxBuffer exceeded") {
grunt.log.error("Unexpected maxBuffer exceeded");
return false;
}
if (typeof stdout !== "string") {
grunt.log.error("Unexpected stdout type (" + (typeof stdout) + "), expected string.");
return false;
}
if (stdout.length !== count) {
grunt.log.error("Unexpected result: " + stdout.length + " != " + count.toString());
return false;
}
}
}
, test_callback: {
cmd : process.platform === 'win32' ? 'dir' : 'ls -h',
callback : function(error, stdout, stderr){
var util = require('util');
console.log(util.inspect(error));
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
},
stdout: 'pipe'
},
test_callback_no_data: {
cmd : process.platform === 'win32' ? 'dir' : 'ls -h',
callback : function(error, stdout, stderr){
var util = require('util');
console.log(util.inspect(error));
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
}
},
npm_outdated_color_test: {
command: 'npm outdated --long --ansi --color',
stdout: 'inherit',
stderr: 'inherit'
},
set_user_input: {
cmd: 'set /p TestCurrentUserName= "Enter your name: "',
stdout: 'inherit',
stderr: 'inherit',
stdin: 'inherit'
},
test_timeout: {
cmd: 'set /p TestCurrentUserName= "Please do not enter your name: "',
stdout: 'inherit',
stderr: 'inherit',
stdin: 'inherit',
timeout: 500
},
test_stdio_inherit: {
cmd: 'npm list',
stdio: 'inherit'
},
test_stdio_ignore: {
cmd: 'npm list',
stdio: 'ignore'
}
}
, jshint: {
options: {
// enforcing options
curly: true
, forin: true
, newcap: true
, noarg: true
, noempty: true
, nonew: true
, quotmark: true
, undef: true
, unused: true
, trailing: true
, maxlen: 80
// relaxing options
, boss: true
, es5: true
, expr: true
, laxcomma: true
// environments
, node: true
}
, tasks: ['tasks/*.js']
, tests: ['test/*.js']
, gruntfile: ['Gruntfile.js']
}
});
grunt.loadTasks('tasks');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.registerTask('lint', 'jshint');
};