88 lines
2.6 KiB
TypeScript
88 lines
2.6 KiB
TypeScript
import { test, expect, describe, mock } from "bun:test";
|
|
import { convert, properties } from "../../src/converters/deark";
|
|
import type { ExecFileFn } from "../../src/converters/types";
|
|
|
|
describe("deark converter", () => {
|
|
test("properties should have correct structure", () => {
|
|
expect(properties).toBeDefined();
|
|
expect(properties.from).toBeDefined();
|
|
expect(properties.to).toBeDefined();
|
|
expect(properties.outputMode).toBe("archive");
|
|
});
|
|
|
|
test("properties.from should contain supported formats", () => {
|
|
expect(properties.from.files).toBeDefined();
|
|
// Archive formats
|
|
expect(properties.from.files).toContain("zip");
|
|
expect(properties.from.files).toContain("lha");
|
|
expect(properties.from.files).toContain("arc");
|
|
// Image formats
|
|
expect(properties.from.files).toContain("ico");
|
|
expect(properties.from.files).toContain("bmp");
|
|
expect(properties.from.files).toContain("pcx");
|
|
});
|
|
|
|
test("properties.to should have extract option", () => {
|
|
expect(properties.to.files).toBeDefined();
|
|
expect(properties.to.files).toContain("extract");
|
|
});
|
|
|
|
test("convert resolves when execFile succeeds", async () => {
|
|
const mockExecFile = mock(
|
|
(
|
|
cmd: string,
|
|
args: string[],
|
|
callback: (error: Error | null, stdout: string, stderr: string) => void,
|
|
) => {
|
|
// First call is deark, second call is tar
|
|
callback(null, "Success", "");
|
|
},
|
|
);
|
|
|
|
// Mock fs functions would be needed for full test
|
|
// This is a simplified test
|
|
try {
|
|
await convert(
|
|
"/tmp/test.zip",
|
|
"zip",
|
|
"extract",
|
|
"/tmp/output/test",
|
|
{},
|
|
mockExecFile as ExecFileFn,
|
|
);
|
|
} catch (error) {
|
|
// Expected to fail due to fs operations not being mocked
|
|
expect(error).toBeDefined();
|
|
}
|
|
});
|
|
|
|
test("convert rejects when deark fails", async () => {
|
|
const mockExecFile = mock(
|
|
(
|
|
cmd: string,
|
|
args: string[],
|
|
callback: (error: Error | null, stdout: string, stderr: string) => void,
|
|
) => {
|
|
callback(new Error("deark failed"), "", "Unknown or unsupported format");
|
|
},
|
|
);
|
|
|
|
try {
|
|
await convert(
|
|
"/tmp/test.unknown",
|
|
"unknown",
|
|
"extract",
|
|
"/tmp/output/test",
|
|
{},
|
|
mockExecFile as ExecFileFn,
|
|
);
|
|
expect(true).toBe(false); // Should not reach here
|
|
} catch (error) {
|
|
expect(error).toBeDefined();
|
|
expect(String(error)).toContain("不支援此檔案格式");
|
|
}
|
|
});
|
|
});
|
|
|
|
// Skip common tests as deark has different behavior (archive output)
|
|
test.skip("dummy - required to trigger test detection", () => { });
|