210 lines
4.8 KiB
TypeScript
210 lines
4.8 KiB
TypeScript
import * as assert from "assert";
|
|
import { fileURLToPath } from "node:url";
|
|
import { dirname } from "node:path";
|
|
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,
|
|
});
|
|
}));
|
|
});
|