From 26c8326baf298d205d19682388259a666c93f640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mica=C3=ABl=20Mbagira?= Date: Sun, 19 Apr 2020 15:28:50 +0200 Subject: [PATCH] Support parallel runs that do not need to run test files --- lib/reporters/verbose.js | 7 ++++ lib/run-status.js | 9 ++++++ .../{ => less-files-than-ci-total}/2.js | 2 +- .../less-files-than-ci-total/9.js | 5 +++ .../package.json | 0 .../{ => more-files-than-ci-total}/10.js | 2 +- .../more-files-than-ci-total/2.js | 5 +++ .../{ => more-files-than-ci-total}/2a.js | 2 +- .../{ => more-files-than-ci-total}/9.js | 2 +- .../{ => more-files-than-ci-total}/Ab.js | 2 +- .../{ => more-files-than-ci-total}/a.js | 2 +- .../{ => more-files-than-ci-total}/b.js | 2 +- .../{ => more-files-than-ci-total}/c.js | 2 +- .../more-files-than-ci-total/package.json | 5 +++ .../parallel-runs/no-files/package.json | 5 +++ test-tap/integration/parallel-runs.js | 32 +++++++++++++++++-- 16 files changed, 74 insertions(+), 10 deletions(-) rename test-tap/fixture/parallel-runs/{ => less-files-than-ci-total}/2.js (67%) create mode 100644 test-tap/fixture/parallel-runs/less-files-than-ci-total/9.js rename test-tap/fixture/parallel-runs/{ => less-files-than-ci-total}/package.json (100%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/10.js (67%) create mode 100644 test-tap/fixture/parallel-runs/more-files-than-ci-total/2.js rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/2a.js (67%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/9.js (67%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/Ab.js (76%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/a.js (67%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/b.js (67%) rename test-tap/fixture/parallel-runs/{ => more-files-than-ci-total}/c.js (67%) create mode 100644 test-tap/fixture/parallel-runs/more-files-than-ci-total/package.json create mode 100644 test-tap/fixture/parallel-runs/no-files/package.json diff --git a/lib/reporters/verbose.js b/lib/reporters/verbose.js index 9e7158c1b..61828203e 100644 --- a/lib/reporters/verbose.js +++ b/lib/reporters/verbose.js @@ -90,6 +90,7 @@ class VerboseReporter { this.failFastEnabled = plan.failFastEnabled; this.matching = plan.matching; this.previousFailures = plan.previousFailures; + this.emptyParallelRun = plan.status.emptyParallelRun; if (this.watching || plan.files.length > 1) { this.prefixTitle = (testFile, title) => prefixTitle(plan.filePathPrefix, testFile, title); @@ -320,6 +321,12 @@ class VerboseReporter { } endRun() { // eslint-disable-line complexity + if (this.emptyParallelRun) { + this.lineWriter.writeLine('No files tested in this parallel run'); + this.lineWriter.writeLine(); + return; + } + if (!this.stats) { this.lineWriter.writeLine(colors.error(`${figures.cross} Couldn’t find any files to test`)); this.lineWriter.writeLine(); diff --git a/lib/run-status.js b/lib/run-status.js index 855e5c41d..5b4e7bcf7 100644 --- a/lib/run-status.js +++ b/lib/run-status.js @@ -8,6 +8,11 @@ class RunStatus extends Emittery { this.pendingTests = new Map(); + this.emptyParallelRun = parallelRuns && + parallelRuns.currentFileCount === 0 && + parallelRuns.totalRuns > 1 && + files > 0; + this.stats = { byFile: new Map(), declaredTests: 0, @@ -143,6 +148,10 @@ class RunStatus extends Emittery { } suggestExitCode(circumstances) { + if (this.emptyParallelRun) { + return 0; + } + if (circumstances.matching && this.stats.selectedTests === 0) { return 1; } diff --git a/test-tap/fixture/parallel-runs/2.js b/test-tap/fixture/parallel-runs/less-files-than-ci-total/2.js similarity index 67% rename from test-tap/fixture/parallel-runs/2.js rename to test-tap/fixture/parallel-runs/less-files-than-ci-total/2.js index 547547c5e..123fa85d5 100644 --- a/test-tap/fixture/parallel-runs/2.js +++ b/test-tap/fixture/parallel-runs/less-files-than-ci-total/2.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '0'); diff --git a/test-tap/fixture/parallel-runs/less-files-than-ci-total/9.js b/test-tap/fixture/parallel-runs/less-files-than-ci-total/9.js new file mode 100644 index 000000000..7ae3ec275 --- /dev/null +++ b/test-tap/fixture/parallel-runs/less-files-than-ci-total/9.js @@ -0,0 +1,5 @@ +const test = require('../../../..'); + +test('at expected index', t => { + t.is(process.env.CI_NODE_INDEX, '1'); +}); diff --git a/test-tap/fixture/parallel-runs/package.json b/test-tap/fixture/parallel-runs/less-files-than-ci-total/package.json similarity index 100% rename from test-tap/fixture/parallel-runs/package.json rename to test-tap/fixture/parallel-runs/less-files-than-ci-total/package.json diff --git a/test-tap/fixture/parallel-runs/10.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/10.js similarity index 67% rename from test-tap/fixture/parallel-runs/10.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/10.js index c731ff1e0..7ae3ec275 100644 --- a/test-tap/fixture/parallel-runs/10.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/10.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '1'); diff --git a/test-tap/fixture/parallel-runs/more-files-than-ci-total/2.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/2.js new file mode 100644 index 000000000..123fa85d5 --- /dev/null +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/2.js @@ -0,0 +1,5 @@ +const test = require('../../../..'); + +test('at expected index', t => { + t.is(process.env.CI_NODE_INDEX, '0'); +}); diff --git a/test-tap/fixture/parallel-runs/2a.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/2a.js similarity index 67% rename from test-tap/fixture/parallel-runs/2a.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/2a.js index 547547c5e..123fa85d5 100644 --- a/test-tap/fixture/parallel-runs/2a.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/2a.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '0'); diff --git a/test-tap/fixture/parallel-runs/9.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/9.js similarity index 67% rename from test-tap/fixture/parallel-runs/9.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/9.js index 547547c5e..123fa85d5 100644 --- a/test-tap/fixture/parallel-runs/9.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/9.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '0'); diff --git a/test-tap/fixture/parallel-runs/Ab.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/Ab.js similarity index 76% rename from test-tap/fixture/parallel-runs/Ab.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/Ab.js index 40e5fd168..22cf55c83 100644 --- a/test-tap/fixture/parallel-runs/Ab.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/Ab.js @@ -1,5 +1,5 @@ /* eslint-disable unicorn/filename-case */ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '1'); diff --git a/test-tap/fixture/parallel-runs/a.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/a.js similarity index 67% rename from test-tap/fixture/parallel-runs/a.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/a.js index c731ff1e0..7ae3ec275 100644 --- a/test-tap/fixture/parallel-runs/a.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/a.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '1'); diff --git a/test-tap/fixture/parallel-runs/b.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/b.js similarity index 67% rename from test-tap/fixture/parallel-runs/b.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/b.js index f56d373ec..d8604e130 100644 --- a/test-tap/fixture/parallel-runs/b.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/b.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '2'); diff --git a/test-tap/fixture/parallel-runs/c.js b/test-tap/fixture/parallel-runs/more-files-than-ci-total/c.js similarity index 67% rename from test-tap/fixture/parallel-runs/c.js rename to test-tap/fixture/parallel-runs/more-files-than-ci-total/c.js index f56d373ec..d8604e130 100644 --- a/test-tap/fixture/parallel-runs/c.js +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/c.js @@ -1,4 +1,4 @@ -const test = require('../../..'); +const test = require('../../../..'); test('at expected index', t => { t.is(process.env.CI_NODE_INDEX, '2'); diff --git a/test-tap/fixture/parallel-runs/more-files-than-ci-total/package.json b/test-tap/fixture/parallel-runs/more-files-than-ci-total/package.json new file mode 100644 index 000000000..0a8129b18 --- /dev/null +++ b/test-tap/fixture/parallel-runs/more-files-than-ci-total/package.json @@ -0,0 +1,5 @@ +{ + "ava": { + "files": ["*.js"] + } +} diff --git a/test-tap/fixture/parallel-runs/no-files/package.json b/test-tap/fixture/parallel-runs/no-files/package.json new file mode 100644 index 000000000..0a8129b18 --- /dev/null +++ b/test-tap/fixture/parallel-runs/no-files/package.json @@ -0,0 +1,5 @@ +{ + "ava": { + "files": ["*.js"] + } +} diff --git a/test-tap/integration/parallel-runs.js b/test-tap/integration/parallel-runs.js index 31fcc8083..bb049179f 100644 --- a/test-tap/integration/parallel-runs.js +++ b/test-tap/integration/parallel-runs.js @@ -2,11 +2,11 @@ const {test} = require('tap'); const {execCli} = require('../helper/cli'); -test('correctly distributes the test files', t => { +test('correctly distributes more test files than CI_NODE_TOTAL', t => { t.plan(3); for (let i = 0; i < 3; i++) { execCli([], { - dirname: 'fixture/parallel-runs', + dirname: 'fixture/parallel-runs/more-files-than-ci-total', env: { AVA_FORCE_CI: 'ci', CI_NODE_INDEX: String(i), @@ -15,3 +15,31 @@ test('correctly distributes the test files', t => { }, err => t.ifError(err)); } }); + +test('correctly distributes less test files than CI_NODE_TOTAL', t => { + t.plan(3); + for (let i = 0; i < 3; i++) { + execCli([], { + dirname: 'fixture/parallel-runs/less-files-than-ci-total', + env: { + AVA_FORCE_CI: 'ci', + CI_NODE_INDEX: String(i), + CI_NODE_TOTAL: '3' + } + }, err => t.ifError(err)); + } +}); + +test('fail when there are no files', t => { + t.plan(3); + for (let i = 0; i < 3; i++) { + execCli([], { + dirname: 'fixture/parallel-runs/no-files', + env: { + AVA_FORCE_CI: 'ci', + CI_NODE_INDEX: String(i), + CI_NODE_TOTAL: '3' + } + }, err => t.ok(err)); + } +});