@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
65 lines • 2.36 kB
JavaScript
import { EventEmitter } from 'events';
import { testInjector } from '@stryker-mutator/test-helpers';
import sinon from 'sinon';
import { expect } from 'chai';
import { coreTokens } from '../../src/di/index.js';
import { UnexpectedExitHandler } from '../../src/unexpected-exit-handler.js';
class ProcessMock extends EventEmitter {
constructor() {
super(...arguments);
this.exit = sinon.stub();
}
}
const signals = Object.freeze(['SIGABRT', 'SIGINT', 'SIGHUP', 'SIGTERM']);
describe(UnexpectedExitHandler.name, () => {
let processMock;
beforeEach(() => {
processMock = new ProcessMock();
});
function createSut() {
return testInjector.injector
.provideValue(coreTokens.process, processMock)
.injectClass(UnexpectedExitHandler);
}
describe('constructor', () => {
it('should register an exit handler', () => {
createSut();
expect(processMock.listenerCount('exit')).eq(1);
});
signals.forEach((signal) => {
it(`should register a "${signal}" signal handler`, () => {
createSut();
expect(processMock.listenerCount(signal)).eq(1);
});
});
});
describe('dispose', () => {
it('should remove the "exit" handler', () => {
createSut().dispose();
expect(processMock.listenerCount('exit')).eq(0);
});
signals.forEach((signal) => {
it(`should remove the "${signal}" signal handler`, () => {
createSut().dispose();
expect(processMock.listenerCount(signal)).eq(0);
});
});
});
signals.forEach((signal) => {
it(`should call process.exit on "${signal}" signal`, () => {
createSut();
processMock.emit(signal, signal, 4);
expect(processMock.exit).calledWith(132);
});
});
describe(UnexpectedExitHandler.prototype.registerHandler.name, () => {
it('should call the provided handler on exit', () => {
const exitHandler = sinon.stub();
const sut = createSut();
sut.registerHandler(exitHandler);
processMock.emit('exit');
expect(exitHandler).called;
});
});
});
//# sourceMappingURL=unexpected-exit-handler.spec.js.map