import {platform} from 'node:process';
import {test, withFixture} from './helpers/watch.js';
test('prints results and instructions', withFixture('basic'), async (t, fixture) => {
await fixture.watch({
async else({process}) {
process.send('abort-watcher');
const {stdout} = await process;
t.regex(stdout, /\d+ tests? passed/);
t.regex(stdout, /Type `r` and press enter to rerun tests/);
t.regex(stdout, /Type `u` and press enter to update snapshots/);
this.done();
},
});
});
test('ctrl+c interrupts', withFixture('basic'), async (t, fixture) => {
await fixture.watch({
async else({process}) {
this.done();
process.kill('SIGINT');
const {stdout} = await t.throwsAsync(process);
const result = await t.try(tt => {
tt.regex(stdout, /Exiting due to SIGINT/);
});
if (platform === 'win32' && !result.passed) {
result.discard();
t.pass('Most likely on Windows we did not capture stdout when the process was killed');
} else {
result.commit();
}
},
});
});
test('can rerun tests', withFixture('basic'), async (t, fixture) => {
await fixture.watch({
async 1(result) {
result.process.stdin.write('r\n');
const {selectedTestCount, passed} = result.stats;
return {selectedTestCount, passed};
},
async 2(result, statsSubset) {
result.process.stdin.write('R\n');
t.like(result.stats, statsSubset);
return statsSubset;
},
async 3(result, statsSubset) {
t.like(result.stats, statsSubset);
this.done();
},
});
});
test('can update snapshots', withFixture('basic'), async (t, fixture) => {
await fixture.watch({
async 1({process}) {
process.stdin.write('u\n');
const {mtimeMs} = await this.stat('test.js.snap');
return mtimeMs;
},
async 2({process}, previousMtimeMs) {
process.stdin.write('U\n');
const {mtimeMs} = await this.stat('test.js.snap');
t.true(mtimeMs > previousMtimeMs);
return mtimeMs;
},
async 3(_, previousMtimeMs) {
const {mtimeMs} = await this.stat('test.js.snap');
t.true(mtimeMs > previousMtimeMs);
this.done();
},
});
});