const fs = require('fs').promises const path = require('path') const test = require('ava') const {execFilePromise, matchOutput} = require('./util') process.chdir(__dirname) 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], {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', 'sleep1') matchOutput(output, [ { 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'], lines: ['Slept for 1 seconds'] }, { target: 'finish-sleep-medium', dependencies: ['finish-sleep-short'], lines: ['Slept for 3 seconds'] }, { target: 'finish-sleep-long', dependencies: ['finish-sleep-medium'], lines: ['Slept for 5 seconds'] }, { target: 'start-sleep1', dependencies: ['finish-sleep-long'], lines: ['node ../sleep.js 3 sleep1'] }, { target: 'finish-sleep1', dependencies: ['start-sleep1'], 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', 'sleep2') matchOutput(output, [ { 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'], lines: ['Slept for 2 seconds'] }, { target: 'finish-sleep-medium', dependencies: ['finish-sleep-short'], lines: ['Slept for 4 seconds'] }, { target: 'finish-sleep-long', dependencies: ['finish-sleep-medium'], lines: ['Slept for 6 seconds'] }, { target: 'start-sleep2', dependencies: ['finish-sleep-long'], lines: ['node ../sleep.js 1 sleep2'] }, { target: 'finish-sleep2', dependencies: ['start-sleep2'], lines: ['Slept for 1 seconds'] } ]) t.pass() }) 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.join('-'), ...targets) matchOutput(output, [ { 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: [ 'start-sleep1-short', 'start-sleep2-short', 'start-sleep1-medium', 'start-sleep2-medium', 'start-sleep1-long', 'start-sleep2-long' ], lines: ['Slept for 1 seconds'] }, { target: 'finish-sleep2-short', dependencies: ['finish-sleep1-short'], lines: ['Slept for 2 seconds'] }, { target: 'finish-sleep1-medium', dependencies: ['finish-sleep2-short'], lines: ['Slept for 3 seconds'] }, { target: 'finish-sleep2-medium', dependencies: ['finish-sleep1-medium'], lines: ['Slept for 4 seconds'] }, { target: 'finish-sleep1-long', dependencies: ['finish-sleep2-medium'], lines: ['Slept for 5 seconds'] }, { 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 sleep2'] }, { target: 'finish-sleep2', dependencies: ['start-sleep2'], lines: ['Slept for 1 seconds'] }, { target: 'finish-sleep1', dependencies: ['finish-sleep2'], lines: ['Slept for 3 seconds'] } ]) t.pass() }) }