diff --git a/tests/integration/converters/ffmpeg.test.ts b/tests/integration/converters/ffmpeg.test.ts new file mode 100644 index 00000000..4314bb10 --- /dev/null +++ b/tests/integration/converters/ffmpeg.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/ffmpeg"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected JPEG bytes", () => + runGoldenConversion("ffmpeg", convert, "jpg")); diff --git a/tests/integration/converters/golden.ts b/tests/integration/converters/golden.ts new file mode 100644 index 00000000..3c0c3b4d --- /dev/null +++ b/tests/integration/converters/golden.ts @@ -0,0 +1,32 @@ +import { expect } from "bun:test"; +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import path from "node:path"; + +type Converter = ( + filePath: string, + fileType: string, + convertTo: string, + targetPath: string, + options?: unknown, +) => Promise; + +export async function runGoldenConversion( + converterName: string, + convert: Converter, + outputExtension: string, +) { + const outputDirectory = await mkdtemp(path.join(tmpdir(), `convertx-${converterName}-`)); + const outputPath = path.join(outputDirectory, `sample.${outputExtension}`); + const inputPath = path.resolve("tests/integration/converters/inputs/sample.png"); + const expectedPath = path.resolve( + `tests/integration/converters/outputs/${converterName}/sample.${outputExtension}`, + ); + + try { + await convert(inputPath, "png", outputExtension, outputPath); + expect(await Bun.file(outputPath).bytes()).toEqual(await Bun.file(expectedPath).bytes()); + } finally { + await rm(outputDirectory, { recursive: true, force: true }); + } +} diff --git a/tests/integration/converters/graphicsmagick.test.ts b/tests/integration/converters/graphicsmagick.test.ts new file mode 100644 index 00000000..286ae46c --- /dev/null +++ b/tests/integration/converters/graphicsmagick.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/graphicsmagick"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected JPEG bytes", () => + runGoldenConversion("graphicsmagick", convert, "jpg")); diff --git a/tests/integration/converters/imagemagick.test.ts b/tests/integration/converters/imagemagick.test.ts new file mode 100644 index 00000000..1d25aed6 --- /dev/null +++ b/tests/integration/converters/imagemagick.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/imagemagick"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected JPEG bytes", () => + runGoldenConversion("imagemagick", convert, "jpg")); diff --git a/tests/integration/converters/inkscape.test.ts b/tests/integration/converters/inkscape.test.ts new file mode 100644 index 00000000..1ccd1597 --- /dev/null +++ b/tests/integration/converters/inkscape.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/inkscape"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected SVG bytes", () => + runGoldenConversion("inkscape", convert, "svg")); diff --git a/tests/integration/converters/inputs/sample.png b/tests/integration/converters/inputs/sample.png new file mode 100644 index 00000000..4ef84dab Binary files /dev/null and b/tests/integration/converters/inputs/sample.png differ diff --git a/tests/integration/converters/inputs/sample.svg b/tests/integration/converters/inputs/sample.svg new file mode 100644 index 00000000..ff0220a5 --- /dev/null +++ b/tests/integration/converters/inputs/sample.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/integration/converters/libjxl.test.ts b/tests/integration/converters/libjxl.test.ts new file mode 100644 index 00000000..0b134be4 --- /dev/null +++ b/tests/integration/converters/libjxl.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/libjxl"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected JPEG XL bytes", () => + runGoldenConversion("libjxl", convert, "jxl")); diff --git a/tests/integration/converters/outputs/ffmpeg/sample.jpg b/tests/integration/converters/outputs/ffmpeg/sample.jpg new file mode 100644 index 00000000..5652e52e Binary files /dev/null and b/tests/integration/converters/outputs/ffmpeg/sample.jpg differ diff --git a/tests/integration/converters/outputs/graphicsmagick/sample.jpg b/tests/integration/converters/outputs/graphicsmagick/sample.jpg new file mode 100644 index 00000000..a44b580c Binary files /dev/null and b/tests/integration/converters/outputs/graphicsmagick/sample.jpg differ diff --git a/tests/integration/converters/outputs/imagemagick/sample.jpg b/tests/integration/converters/outputs/imagemagick/sample.jpg new file mode 100644 index 00000000..c34b5088 Binary files /dev/null and b/tests/integration/converters/outputs/imagemagick/sample.jpg differ diff --git a/tests/integration/converters/outputs/inkscape/sample.svg b/tests/integration/converters/outputs/inkscape/sample.svg new file mode 100644 index 00000000..3fb9c874 --- /dev/null +++ b/tests/integration/converters/outputs/inkscape/sample.svg @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/tests/integration/converters/outputs/libjxl/sample.jxl b/tests/integration/converters/outputs/libjxl/sample.jxl new file mode 100644 index 00000000..1c4fce82 Binary files /dev/null and b/tests/integration/converters/outputs/libjxl/sample.jxl differ diff --git a/tests/integration/converters/outputs/vips/sample.jpg b/tests/integration/converters/outputs/vips/sample.jpg new file mode 100644 index 00000000..1ed8fea4 Binary files /dev/null and b/tests/integration/converters/outputs/vips/sample.jpg differ diff --git a/tests/integration/converters/outputs/vtracer/sample.svg b/tests/integration/converters/outputs/vtracer/sample.svg new file mode 100644 index 00000000..c42bca3c --- /dev/null +++ b/tests/integration/converters/outputs/vtracer/sample.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/integration/converters/vips.test.ts b/tests/integration/converters/vips.test.ts new file mode 100644 index 00000000..abc38132 --- /dev/null +++ b/tests/integration/converters/vips.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/vips"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected JPEG bytes", () => + runGoldenConversion("vips", convert, "jpg")); diff --git a/tests/integration/converters/vtracer.test.ts b/tests/integration/converters/vtracer.test.ts new file mode 100644 index 00000000..75873f9b --- /dev/null +++ b/tests/integration/converters/vtracer.test.ts @@ -0,0 +1,6 @@ +import { test } from "bun:test"; +import { convert } from "../../../src/converters/vtracer"; +import { runGoldenConversion } from "./golden"; + +test("converts the sample PNG to the expected SVG bytes", () => + runGoldenConversion("vtracer", convert, "svg"));