Skip to content

Commit

Permalink
test: fix test-watch-mode
Browse files Browse the repository at this point in the history
Refs: #44898
PR-URL: #45585
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Erick Wendel <erick.workspace@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
StefanStojanovic authored and targos committed Dec 12, 2022
1 parent cd36250 commit 7647250
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions test/sequential/test-watch-mode.mjs
Expand Up @@ -15,11 +15,16 @@ if (common.isIBMi)
common.skip('IBMi does not support `fs.watch()`');

const supportsRecursive = common.isOSX || common.isWindows;
let disableRestart = false;

function restart(file) {
// To avoid flakiness, we save the file repeatedly until test is done
writeFileSync(file, readFileSync(file));
const timer = setInterval(() => writeFileSync(file, readFileSync(file)), 1000);
const timer = setInterval(() => {
if (!disableRestart) {
writeFileSync(file, readFileSync(file));
}
}, common.platformTimeout(1000));
return () => clearInterval(timer);
}

Expand All @@ -38,11 +43,15 @@ async function spawnWithRestarts({
let stdout = '';
let cancelRestarts;

disableRestart = true;
const child = spawn(execPath, ['--watch', '--no-warnings', ...args], { encoding: 'utf8' });
child.stderr.on('data', (data) => {
stderr += data;
});
child.stdout.on('data', async (data) => {
if (data.toString().includes('Restarting')) {
disableRestart = true;
}
stdout += data;
const restartsCount = stdout.match(new RegExp(`Restarting ${printedArgs.replace(/\\/g, '\\\\')}`, 'g'))?.length ?? 0;
if (restarts === 0 || !isReady(data.toString())) {
Expand All @@ -54,6 +63,9 @@ async function spawnWithRestarts({
return;
}
cancelRestarts ??= restart(watchedFile);
if (isReady(data.toString())) {
disableRestart = false;
}
});

await once(child, 'exit');
Expand Down Expand Up @@ -97,9 +109,9 @@ async function failWriteSucceed({ file, watchedFile }) {

tmpdir.refresh();

// Warning: this suite can run safely with concurrency: true
// only if tests do not watch/depend on the same files
describe('watch mode', { concurrency: true, timeout: 60_000 }, () => {
// Warning: this suite cannot run safely with concurrency: true
// because of the disableRestart flag used for controlling restarts
describe('watch mode', { concurrency: false, timeout: 60_000 }, () => {
it('should watch changes to a file - event loop ended', async () => {
const file = createTmpFile();
const { stderr, stdout } = await spawnWithRestarts({ file });
Expand Down

0 comments on commit 7647250

Please sign in to comment.