import * as assert from "assert"; import { dirname } from "node:path"; import { fileURLToPath } from "node:url"; import { getFileInfo } from "../src/misc/get-file-info.js"; import { async } from "./utils.js"; const _filename = fileURLToPath(import.meta.url); const _dirname = dirname(_filename); describe("Get file info", () => { it("Empty file", async(async () => { const path = `${_dirname}/resources/emptyfile`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 0, md5: "d41d8cd98f00b204e9800998ecf8427e", type: { mime: "application/octet-stream", ext: null, }, width: undefined, height: undefined, orientation: undefined, }); })); it("Generic JPEG", async(async () => { const path = `${_dirname}/resources/Lenna.jpg`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 25360, md5: "091b3f259662aa31e2ffef4519951168", type: { mime: "image/jpeg", ext: "jpg", }, width: 512, height: 512, orientation: undefined, }); })); it("Generic APNG", async(async () => { const path = `${_dirname}/resources/anime.png`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 1868, md5: "08189c607bea3b952704676bb3c979e0", type: { mime: "image/apng", ext: "apng", }, width: 256, height: 256, orientation: undefined, }); })); it("Generic AGIF", async(async () => { const path = `${_dirname}/resources/anime.gif`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 2248, md5: "32c47a11555675d9267aee1a86571e7e", type: { mime: "image/gif", ext: "gif", }, width: 256, height: 256, orientation: undefined, }); })); it("PNG with alpha", async(async () => { const path = `${_dirname}/resources/with-alpha.png`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 3772, md5: "f73535c3e1e27508885b69b10cf6e991", type: { mime: "image/png", ext: "png", }, width: 256, height: 256, orientation: undefined, }); })); it("Generic SVG", async(async () => { const path = `${_dirname}/resources/image.svg`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 505, md5: "b6f52b4b021e7b92cdd04509c7267965", type: { mime: "image/svg+xml", ext: "svg", }, width: 256, height: 256, orientation: undefined, }); })); it("SVG with XML definition", async(async () => { // https://github.com/misskey-dev/misskey/issues/4413 const path = `${_dirname}/resources/with-xml-def.svg`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 544, md5: "4b7a346cde9ccbeb267e812567e33397", type: { mime: "image/svg+xml", ext: "svg", }, width: 256, height: 256, orientation: undefined, }); })); it("Dimension limit", async(async () => { const path = `${_dirname}/resources/25000x25000.png`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 75933, md5: "268c5dde99e17cf8fe09f1ab3f97df56", type: { mime: "application/octet-stream", // do not treat as image ext: null, }, width: 25000, height: 25000, orientation: undefined, }); })); it("Rotate JPEG", async(async () => { const path = `${_dirname}/resources/rotate.jpg`; const info = (await getFileInfo(path, { skipSensitiveDetection: true, })) as any; delete info.warnings; delete info.blurhash; delete info.sensitive; delete info.porn; assert.deepStrictEqual(info, { size: 12624, md5: "68d5b2d8d1d1acbbce99203e3ec3857e", type: { mime: "image/jpeg", ext: "jpg", }, width: 512, height: 256, orientation: 8, }); })); });