Skip to content

Commit

Permalink
Catch & log ROM header processing exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
emmercm committed Sep 22, 2023
1 parent 2e609e6 commit 22c0f8f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/modules/romHeaderProcessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,13 @@ export default class ROMHeaderProcessor extends Module {
const waitingMessage = `${inputFile.toString()} ...`;
this.progressBar.addWaitingMessage(waitingMessage);

const fileWithHeader = await this.getFileWithHeader(inputFile);
let fileWithHeader: File | undefined;
try {
fileWithHeader = await this.getFileWithHeader(inputFile);
} catch (e) {
this.progressBar.logError(`${inputFile.toString()}: failed to process ROM header: ${e}`);
fileWithHeader = inputFile;
}

this.progressBar.removeWaitingMessage(waitingMessage);
await this.progressBar.incrementDone();
Expand Down
22 changes: 22 additions & 0 deletions test/modules/romHeaderProcessor.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import path from 'node:path';

import Constants from '../../src/constants.js';
import ROMHeaderProcessor from '../../src/modules/romHeaderProcessor.js';
import ROMScanner from '../../src/modules/romScanner.js';
import FsPoly from '../../src/polyfill/fsPoly.js';
import File from '../../src/types/files/file.js';
import Options from '../../src/types/options.js';
import ProgressBarFake from '../console/progressBarFake.js';

Expand All @@ -21,6 +26,19 @@ describe('extension has possible header', () => {
}
});

it('should not throw on non-existent files', async () => {
const tempPath = path.join(Constants.GLOBAL_TEMP_DIR, 'file.nes');
await expect(FsPoly.exists(tempPath)).resolves.toEqual(false);
const inputRomFiles = [await File.fileOf(tempPath)];

const processedRomFiles = await new ROMHeaderProcessor(new Options({
commands: ['copy', 'extract'],
}), new ProgressBarFake()).process(inputRomFiles);

expect(processedRomFiles).toHaveLength(1);
expect(processedRomFiles[0].getFileHeader()).toBeUndefined();
});

it('should process raw headered files', async () => {
const inputRomFiles = await new ROMScanner(new Options({
input: ['./test/fixtures/roms/headered/*{.a78,.lnx,.nes,.fds,.smc}*'],
Expand All @@ -33,6 +51,7 @@ describe('extension has possible header', () => {

expect(processedRomFiles).toHaveLength(inputRomFiles.length);
for (let i = 0; i < processedRomFiles.length; i += 1) {
expect(processedRomFiles[i].getFileHeader()).not.toBeUndefined();
// CRC should have changed
expect(inputRomFiles[i].equals(processedRomFiles[i])).toEqual(false);
}
Expand All @@ -51,6 +70,7 @@ describe('extension has possible header', () => {

expect(processedRomFiles).toHaveLength(inputRomFiles.length);
for (let i = 0; i < processedRomFiles.length; i += 1) {
expect(processedRomFiles[i].getFileHeader()).toBeUndefined();
// CRC should NOT have changed
expect(inputRomFiles[i].equals(processedRomFiles[i])).toEqual(true);
}
Expand All @@ -71,6 +91,7 @@ describe('should read file for header', () => {

expect(processedRomFiles).toHaveLength(inputRomFiles.length);
for (let i = 0; i < processedRomFiles.length; i += 1) {
expect(processedRomFiles[i].getFileHeader()).toBeUndefined();
// CRC should NOT have changed
expect(inputRomFiles[i].equals(processedRomFiles[i])).toEqual(true);
}
Expand All @@ -89,6 +110,7 @@ describe('should read file for header', () => {

expect(processedRomFiles).toHaveLength(inputRomFiles.length);
for (let i = 0; i < processedRomFiles.length; i += 1) {
expect(processedRomFiles[i].getFileHeader()).not.toBeUndefined();
// CRC should have changed
expect(inputRomFiles[i].equals(processedRomFiles[i])).toEqual(false);
}
Expand Down

0 comments on commit 22c0f8f

Please sign in to comment.