diff --git a/lib/versioned/^4.0.0/log/sync-task.js b/lib/versioned/^4.0.0/log/sync-task.js index 1932e89c..08b78d44 100644 --- a/lib/versioned/^4.0.0/log/sync-task.js +++ b/lib/versioned/^4.0.0/log/sync-task.js @@ -16,6 +16,8 @@ function warn() { return tasks[key]; }).join(', '); + process.exitCode = 1; + log.warn( ansi.red('The following tasks did not complete:'), ansi.cyan(taskNames) diff --git a/test/expected/flags-tasks-json.json b/test/expected/flags-tasks-json.json index a9842b7e..2bbe3f2c 100644 --- a/test/expected/flags-tasks-json.json +++ b/test/expected/flags-tasks-json.json @@ -1 +1 @@ -{"label":"gulp-cli/test/fixtures/gulpfiles","nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test2","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test3","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"described","type":"function","nodes":[]}]}]},{"label":"test4","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"errorFunction","type":"function","nodes":[]},{"label":"anon","type":"function","nodes":[]}]}]},{"label":"test5","nodes":[],"type":"task"},{"label":"test6","nodes":[],"type":"task"},{"label":"default","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test3","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"described","type":"function","nodes":[]}]}]},{"label":"noop","type":"function","nodes":[]}]}]}]} +{"label":"gulp-cli/test/fixtures/gulpfiles","nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test2","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test3","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"described","type":"function","nodes":[]}]}]},{"label":"test4","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"errorFunction","type":"function","nodes":[]},{"label":"anon","type":"function","nodes":[]}]}]},{"label":"test5","nodes":[],"type":"task"},{"label":"test6","nodes":[],"type":"task"},{"label":"test7","nodes":[],"type":"task"},{"label":"test8","nodes":[],"type":"task"},{"label":"default","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"test1","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"noop","type":"function","nodes":[]}]}]},{"label":"test3","type":"task","nodes":[{"label":"","type":"function","branch":true,"nodes":[{"label":"described","type":"function","nodes":[]}]}]},{"label":"noop","type":"function","nodes":[]}]}]}]} diff --git a/test/expected/flags-tasks-simple.txt b/test/expected/flags-tasks-simple.txt index 94ac6fcf..753dbd5d 100644 --- a/test/expected/flags-tasks-simple.txt +++ b/test/expected/flags-tasks-simple.txt @@ -4,4 +4,6 @@ test3 test4 test5 test6 +test7 +test8 default diff --git a/test/expected/flags-tasks.txt b/test/expected/flags-tasks.txt index 2d940b2e..5100075b 100644 --- a/test/expected/flags-tasks.txt +++ b/test/expected/flags-tasks.txt @@ -25,4 +25,6 @@ gulp-cli/test/fixtures/gulpfiles │ ├── errorFunction │ └── anon ├── test5 -└── test6 +├── test6 +├── test7 +└── test8 diff --git a/test/fixtures/gulpfiles/gulpfile.js b/test/fixtures/gulpfiles/gulpfile.js index c4baaf27..24cbbd5b 100644 --- a/test/fixtures/gulpfiles/gulpfile.js +++ b/test/fixtures/gulpfiles/gulpfile.js @@ -20,6 +20,15 @@ function errorFunction() { function anon(cb) { cb(); } + +function notCompleting1() { + // Callback is not called +} + +function notCompleting2() { + // Callback is not called +} + described.description = 'description'; gulp.task('test1', gulp.series(noop)); @@ -28,5 +37,7 @@ gulp.task('test3', gulp.series(described)); gulp.task('test4', gulp.series(errorFunction, anon)); gulp.task('test5', delayed); gulp.task('test6', noop); +gulp.task('test7', notCompleting1); +gulp.task('test8', notCompleting2); gulp.task('default', gulp.series('test1', 'test3', noop)); diff --git a/test/non-completing-tasks.js b/test/non-completing-tasks.js new file mode 100644 index 00000000..afc36337 --- /dev/null +++ b/test/non-completing-tasks.js @@ -0,0 +1,36 @@ +'use strict'; + +var expect = require('expect'); +var eraseTime = require('gulp-test-tools').eraseTime; +var runner = require('gulp-test-tools').gulpRunner; + + +describe('sync-task', function() { + it('should return error code 1 if any tasks did not complete', function(done) { + // The exit code is set to 1 by setting process.exitCode = 1 which is only supported from nodejs 0.11 on + if (process.version.slice(0, 5) === 'v0.10') { + this.skip(); + } + + runner({ verbose: false }) + .chdir('test/fixtures/gulpfiles') + .gulp('test6 test7 test8') + .run(function(err) { + expect(err).toNotEqual(null); + expect(err.code).toEqual(1); + done(); + }); + }); + + it('should log tasks which did not complete', function(done) { + runner({ verbose: false }) + .chdir('test/fixtures/gulpfiles') + .gulp('test6 test7 test8') + .run(function(err, stdout) { + var lines = stdout.split('\n'); + expect(lines.length).toEqual(8); + expect(eraseTime(lines[5])).toEqual('The following tasks did not complete: test7, test8'); + done(); + }); + }); +});