diff --git a/.gitignore b/.gitignore index 3aee52aa38749dd55900c582fd4a021be20fc2d4..e589a1dee45def37468bdad7b64bbef9989a1d6d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,10 @@ tests/dag-scratch tests/dag-rebuild tests/dag-touch tests/dag-b-and-d +tests/sleep1 +tests/sleep2 +tests/sleep1-sleep2 +tests/sleep2-sleep1 tests/tree-scratch tests/tree-none tests/tree-remove-* diff --git a/tests/concurrent-makefile.js b/tests/concurrent-makefile.js index 1234e98642a4d554f36c57193dd1ee2f58570fe8..1e97bd7c3925adbcf31bf00075d06cfc04fb8a30 100644 --- a/tests/concurrent-makefile.js +++ b/tests/concurrent-makefile.js @@ -2,41 +2,41 @@ module.exports = [ { target: 'sleep1', dependencies: ['sleep1-long', 'sleep1-short', 'sleep1-medium'], - command: ['node', 'sleep.js', '3.1'] + command: ['node', '../sleep.js', '3', 'sleep1'] }, { target: 'sleep1-short', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '1'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '1', 'sleep1-short'] }, { target: 'sleep1-medium', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '3'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '3', 'sleep1-medium'] }, { target: 'sleep1-long', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '5'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '5', 'sleep1-long'] }, { target: 'sleep2', dependencies: ['sleep2-medium', 'sleep2-short', 'sleep2-long'], - command: ['node', 'sleep.js', '1.1'] + command: ['node', '../sleep.js', '1', 'sleep2'] }, { target: 'sleep2-short', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '2'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '2', 'sleep2-short'] }, { target: 'sleep2-medium', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '4'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '4', 'sleep2-medium'] }, { target: 'sleep2-long', - dependencies: ['sleep.js'], - command: ['node', 'sleep.js', '6'] + dependencies: ['../sleep.js'], + command: ['node', '../sleep.js', '6', 'sleep2-long'] } ] diff --git a/tests/sleep.js b/tests/sleep.js index fb13f8c1104b7d5f91bf9b2998f75b5bf3971aa6..ec1bdb69ded5179842742392252c1b43a51f8bf4 100644 --- a/tests/sleep.js +++ b/tests/sleep.js @@ -1,2 +1,7 @@ +const fs = require('fs') + const seconds = Number(process.argv[2]) setTimeout(_ => console.log(`Slept for ${seconds} seconds`), seconds * 1e3) +fs.writeFile(process.argv[3], '', err => { + if (err) throw err +}) diff --git a/tests/test-concurrent.js b/tests/test-concurrent.js index 46c1890bfc8f84a79572b7498b24f3748f468eeb..684329286f5687284e25929c99960f512979ba30 100644 --- a/tests/test-concurrent.js +++ b/tests/test-concurrent.js @@ -1,22 +1,41 @@ +const fs = require('fs').promises +const path = require('path') const test = require('ava') const {execFilePromise, matchOutput} = require('./util') process.chdir(__dirname) -async function make(...targets) { +async function make(dir, ...targets) { + try { await fs.rmdir(dir, {recursive: true}) } + catch {} + await fs.mkdir(dir) + const {stdout} = await execFilePromise( - 'node', ['../make.js', 'concurrent-makefile.js', ...targets] + 'node', ['../../make.js', '../concurrent-makefile.js', ...targets], + {cwd: path.join(__dirname, dir)} ) return stdout } test('make sleep1', async t => { // Test that the 3 sleeps happen at the same time - const output = await make('sleep1') + const output = await make('sleep1', 'sleep1') matchOutput(output, [ - {target: 'start-sleep-short', dependencies: [], lines: ['node sleep.js 1']}, - {target: 'start-sleep-medium', dependencies: [], lines: ['node sleep.js 3']}, - {target: 'start-sleep-long', dependencies: [], lines: ['node sleep.js 5']}, + { + target: 'start-sleep-short', + dependencies: [], + lines: ['node ../sleep.js 1 sleep1-short'] + }, + { + target: 'start-sleep-medium', + dependencies: [], + lines: ['node ../sleep.js 3 sleep1-medium'] + }, + { + target: 'start-sleep-long', + dependencies: [], + lines: ['node ../sleep.js 5 sleep1-long'] + }, { target: 'finish-sleep-short', dependencies: ['start-sleep-short', 'start-sleep-medium', 'start-sleep-long'], @@ -32,22 +51,38 @@ test('make sleep1', async t => { dependencies: ['finish-sleep-medium'], lines: ['Slept for 5 seconds'] }, - {target: 'start-sleep1', dependencies: ['finish-sleep-long'], lines: ['node sleep.js 3.1']}, + { + target: 'start-sleep1', + dependencies: ['finish-sleep-long'], + lines: ['node ../sleep.js 3 sleep1'] + }, { target: 'finish-sleep1', dependencies: ['start-sleep1'], - lines: ['Slept for 3.1 seconds'] + lines: ['Slept for 3 seconds'] } ]) t.pass() }) test('make sleep2', async t => { // Test that the 3 sleeps happen at the same time - const output = await make('sleep2') + const output = await make('sleep2', 'sleep2') matchOutput(output, [ - {target: 'start-sleep-short', dependencies: [], lines: ['node sleep.js 2']}, - {target: 'start-sleep-medium', dependencies: [], lines: ['node sleep.js 4']}, - {target: 'start-sleep-long', dependencies: [], lines: ['node sleep.js 6']}, + { + target: 'start-sleep-short', + dependencies: [], + lines: ['node ../sleep.js 2 sleep2-short'] + }, + { + target: 'start-sleep-medium', + dependencies: [], + lines: ['node ../sleep.js 4 sleep2-medium'] + }, + { + target: 'start-sleep-long', + dependencies: [], + lines: ['node ../sleep.js 6 sleep2-long'] + }, { target: 'finish-sleep-short', dependencies: ['start-sleep-short', 'start-sleep-medium', 'start-sleep-long'], @@ -63,11 +98,15 @@ test('make sleep2', async t => { dependencies: ['finish-sleep-medium'], lines: ['Slept for 6 seconds'] }, - {target: 'start-sleep2', dependencies: ['finish-sleep-long'], lines: ['node sleep.js 1.1']}, + { + target: 'start-sleep2', + dependencies: ['finish-sleep-long'], + lines: ['node ../sleep.js 1 sleep2'] + }, { target: 'finish-sleep2', dependencies: ['start-sleep2'], - lines: ['Slept for 1.1 seconds'] + lines: ['Slept for 1 seconds'] } ]) t.pass() @@ -75,14 +114,38 @@ test('make sleep2', async t => { for (const targets of [['sleep1', 'sleep2'], ['sleep2', 'sleep1']]) { test(`make ${targets.join(' ')}`, async t => { // Test that both targets are built at the same time - const output = await make(...targets) + const output = await make(targets.join('-'), ...targets) matchOutput(output, [ - {target: 'start-sleep1-short', dependencies: [], lines: ['node sleep.js 1']}, - {target: 'start-sleep2-short', dependencies: [], lines: ['node sleep.js 2']}, - {target: 'start-sleep1-medium', dependencies: [], lines: ['node sleep.js 3']}, - {target: 'start-sleep2-medium', dependencies: [], lines: ['node sleep.js 4']}, - {target: 'start-sleep1-long', dependencies: [], lines: ['node sleep.js 5']}, - {target: 'start-sleep2-long', dependencies: [], lines: ['node sleep.js 6']}, + { + target: 'start-sleep1-short', + dependencies: [], + lines: ['node ../sleep.js 1 sleep1-short'] + }, + { + target: 'start-sleep2-short', + dependencies: [], + lines: ['node ../sleep.js 2 sleep2-short'] + }, + { + target: 'start-sleep1-medium', + dependencies: [], + lines: ['node ../sleep.js 3 sleep1-medium'] + }, + { + target: 'start-sleep2-medium', + dependencies: [], + lines: ['node ../sleep.js 4 sleep2-medium'] + }, + { + target: 'start-sleep1-long', + dependencies: [], + lines: ['node ../sleep.js 5 sleep1-long'] + }, + { + target: 'start-sleep2-long', + dependencies: [], + lines: ['node ../sleep.js 6 sleep2-long'] + }, { target: 'finish-sleep1-short', dependencies: [ @@ -115,22 +178,30 @@ for (const targets of [['sleep1', 'sleep2'], ['sleep2', 'sleep1']]) { dependencies: ['finish-sleep2-medium'], lines: ['Slept for 5 seconds'] }, - {target: 'start-sleep1', dependencies: ['finish-sleep1-long'], lines: ['node sleep.js 3.1']}, + { + target: 'start-sleep1', + dependencies: ['finish-sleep1-long'], + lines: ['node ../sleep.js 3 sleep1'] + }, { target: 'finish-sleep2-long', dependencies: ['start-sleep1'], lines: ['Slept for 6 seconds'] }, - {target: 'start-sleep2', dependencies: ['finish-sleep2-long'], lines: ['node sleep.js 1.1']}, + { + target: 'start-sleep2', + dependencies: ['finish-sleep2-long'], + lines: ['node ../sleep.js 1 sleep2'] + }, { target: 'finish-sleep2', dependencies: ['start-sleep2'], - lines: ['Slept for 1.1 seconds'] + lines: ['Slept for 1 seconds'] }, { target: 'finish-sleep1', dependencies: ['finish-sleep2'], - lines: ['Slept for 3.1 seconds'] + lines: ['Slept for 3 seconds'] } ]) t.pass()