From c47c1dd4f462a6cdaebf28a024caaf5a54b2db9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Krzeslak?= Date: Thu, 24 Jul 2025 11:40:11 +0200 Subject: [PATCH] test: add unit test for dvisvgm.ts --- src/converters/dvisvgm.ts | 5 +- tests/converters/assimp.test.ts | 2 +- tests/converters/calibre.test.ts | 2 +- tests/converters/dvisvgm.test.ts | 93 +++++++++++++++++++ .../converters.ts} | 2 +- 5 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 tests/converters/dvisvgm.test.ts rename tests/converters/{convertersHelper.test.ts => helpers/converters.ts} (95%) diff --git a/src/converters/dvisvgm.ts b/src/converters/dvisvgm.ts index a9ce593..76ef5c1 100644 --- a/src/converters/dvisvgm.ts +++ b/src/converters/dvisvgm.ts @@ -1,4 +1,5 @@ -import { execFile } from "node:child_process"; +import { execFile as execFileOriginal } from "node:child_process"; +import { ExecFileFn } from "./types.ts"; export const properties = { from: { @@ -14,8 +15,8 @@ export function convert( fileType: string, convertTo: string, targetPath: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars options?: unknown, + execFile: ExecFileFn = execFileOriginal, // to make it mockable ): Promise { const inputArgs: string[] = []; if (fileType === "eps") { diff --git a/tests/converters/assimp.test.ts b/tests/converters/assimp.test.ts index afbdc97..01ba0ad 100644 --- a/tests/converters/assimp.test.ts +++ b/tests/converters/assimp.test.ts @@ -4,7 +4,7 @@ import { runConvertFailTest, runConvertLogsStderror, runConvertSuccessTest, -} from "./convertersHelper.test.ts"; +} from "./helpers/converters.ts"; test("convert resolves when execFile succeeds", async () => { await runConvertSuccessTest(convert); diff --git a/tests/converters/calibre.test.ts b/tests/converters/calibre.test.ts index c8dbf00..d060097 100644 --- a/tests/converters/calibre.test.ts +++ b/tests/converters/calibre.test.ts @@ -4,7 +4,7 @@ import { runConvertFailTest, runConvertLogsStderror, runConvertSuccessTest, -} from "./convertersHelper.test.ts"; +} from "./helpers/converters.ts"; test("convert resolves when execFile succeeds", async () => { await runConvertSuccessTest(convert); diff --git a/tests/converters/dvisvgm.test.ts b/tests/converters/dvisvgm.test.ts new file mode 100644 index 0000000..977f065 --- /dev/null +++ b/tests/converters/dvisvgm.test.ts @@ -0,0 +1,93 @@ +import type { ExecFileException } from "node:child_process"; +import { expect, test } from "bun:test"; +import { convert } from "../../src/converters/dvisvgm.ts"; +import { ExecFileFn } from "../../src/converters/types.ts"; +import { + runConvertFailTest, + runConvertLogsStderror, + runConvertSuccessTest, +} from "./helpers/converters.ts"; + +test("convert resolves when execFile succeeds", async () => { + await runConvertSuccessTest(convert); +}); + +test("convert rejects when execFile fails", async () => { + await runConvertFailTest(convert); +}); + +test("convert logs stderr when present", async () => { + await runConvertLogsStderror(convert); +}); + +test("convert respects eps filetype", async () => { + const originalConsoleLog = console.log; + + let loggedMessage = ""; + console.log = (msg) => { + loggedMessage = msg; + }; + + const mockExecFile: ExecFileFn = ( + _cmd: string, + _args: string[], + callback: (err: ExecFileException | null, stdout: string, stderr: string) => void, + ) => { + callback(null, "Fake stdout", ""); + }; + + const result = await convert("input.obj", "eps", "stl", "output.stl", undefined, mockExecFile); + + console.log = originalConsoleLog; + + expect(result).toBe("Done"); + expect(loggedMessage).toBe("stdout: Fake stdout"); +}); + +test("convert respects pdf filetype", async () => { + const originalConsoleLog = console.log; + + let loggedMessage = ""; + console.log = (msg) => { + loggedMessage = msg; + }; + + const mockExecFile: ExecFileFn = ( + _cmd: string, + _args: string[], + callback: (err: ExecFileException | null, stdout: string, stderr: string) => void, + ) => { + callback(null, "Fake stdout", ""); + }; + + const result = await convert("input.obj", "pdf", "stl", "output.stl", undefined, mockExecFile); + + console.log = originalConsoleLog; + + expect(result).toBe("Done"); + expect(loggedMessage).toBe("stdout: Fake stdout"); +}); + +test("convert respects svgz conversion target type", async () => { + const originalConsoleLog = console.log; + + let loggedMessage = ""; + console.log = (msg) => { + loggedMessage = msg; + }; + + const mockExecFile: ExecFileFn = ( + _cmd: string, + _args: string[], + callback: (err: ExecFileException | null, stdout: string, stderr: string) => void, + ) => { + callback(null, "Fake stdout", ""); + }; + + const result = await convert("input.obj", "eps", "svgz", "output.stl", undefined, mockExecFile); + + console.log = originalConsoleLog; + + expect(result).toBe("Done"); + expect(loggedMessage).toBe("stdout: Fake stdout"); +}); diff --git a/tests/converters/convertersHelper.test.ts b/tests/converters/helpers/converters.ts similarity index 95% rename from tests/converters/convertersHelper.test.ts rename to tests/converters/helpers/converters.ts index f533d8a..fe04d7e 100644 --- a/tests/converters/convertersHelper.test.ts +++ b/tests/converters/helpers/converters.ts @@ -1,6 +1,6 @@ import type { ExecFileException } from "node:child_process"; import { expect } from "bun:test"; -import { ConvertFnWithExecFile, ExecFileFn } from "../../src/converters/types.ts"; +import { ConvertFnWithExecFile, ExecFileFn } from "../../../src/converters/types.ts"; export async function runConvertSuccessTest(convertFn: ConvertFnWithExecFile) { const originalConsoleLog = console.log;