Files
markdown-converter/tests/unit/main/updater/crash-writer.test.js
T

57 lines
1.9 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const os = require('os');
const { CrashWriter } = require('../../../../src/main/updater/crash-writer');
function tmpDir() {
return fs.mkdtempSync(path.join(os.tmpdir(), 'crash-test-'));
}
describe('CrashWriter', () => {
test('writes a JSON dump for an uncaught exception', () => {
const dir = tmpDir();
const writer = new CrashWriter(dir);
const err = new Error('boom');
err.stack = 'Error: boom\n at test.js:1:1';
writer.handleUncaught(err, 'uncaughtException');
const files = fs.readdirSync(dir);
expect(files.length).toBe(1);
const data = JSON.parse(fs.readFileSync(path.join(dir, files[0]), 'utf-8'));
expect(data.kind).toBe('uncaughtException');
expect(data.message).toBe('boom');
expect(data.stack).toContain('test.js:1:1');
fs.rmSync(dir, { recursive: true });
});
test('caps at 20 dumps, pruning oldest', () => {
const dir = tmpDir();
const writer = new CrashWriter(dir);
for (let i = 0; i < 25; i++) {
writer.handleUncaught(new Error(`e${i}`), 'unhandledRejection');
}
const files = fs.readdirSync(dir);
expect(files.length).toBe(20);
fs.rmSync(dir, { recursive: true });
});
test('returns the list of dumps', () => {
const dir = tmpDir();
const writer = new CrashWriter(dir);
writer.handleUncaught(new Error('a'), 'uncaughtException');
writer.handleUncaught(new Error('b'), 'uncaughtException');
const list = writer.list();
expect(list.length).toBe(2);
fs.rmSync(dir, { recursive: true });
});
test('deletes a dump by filename', () => {
const dir = tmpDir();
const writer = new CrashWriter(dir);
writer.handleUncaught(new Error('x'), 'uncaughtException');
const list = writer.list();
writer.delete(list[0].filename);
expect(writer.list().length).toBe(0);
fs.rmSync(dir, { recursive: true });
});
});