From 9703ba53405b2f355c6e0317f714d82ff3d4dee3 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Sun, 12 Jan 2020 16:40:58 +0900 Subject: ファイルと画像認識処理の改善 (#5690) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * dimensions制限とリファクタ * comment * 不要な変更削除 * use fromFile など * Add probe-image-size.d.ts * えーCRLFで作るなよ… * Update src/@types/probe-image-size.d.ts Co-Authored-By: Acid Chicken (硫酸鶏) * fix d.ts * Update src/@types/probe-image-size.d.ts Co-Authored-By: Acid Chicken (硫酸鶏) * Update src/@types/probe-image-size.d.ts Co-Authored-By: Acid Chicken (硫酸鶏) * fix Co-authored-by: Acid Chicken (硫酸鶏) --- test/get-file-info.ts | 152 ++++++++++++++++++++++++++++++++++++++++ test/resources/25000x25000.png | Bin 0 -> 75933 bytes test/resources/anime.gif | Bin 0 -> 2248 bytes test/resources/anime.png | Bin 0 -> 1868 bytes test/resources/emptyfile | 0 test/resources/with-alpha.png | Bin 0 -> 3772 bytes test/resources/with-xml-def.svg | 2 + 7 files changed, 154 insertions(+) create mode 100644 test/get-file-info.ts create mode 100644 test/resources/25000x25000.png create mode 100644 test/resources/anime.gif create mode 100644 test/resources/anime.png create mode 100644 test/resources/emptyfile create mode 100644 test/resources/with-alpha.png create mode 100644 test/resources/with-xml-def.svg (limited to 'test') diff --git a/test/get-file-info.ts b/test/get-file-info.ts new file mode 100644 index 0000000000..920df07382 --- /dev/null +++ b/test/get-file-info.ts @@ -0,0 +1,152 @@ +/* + * Tests for detection of file information + * + * How to run the tests: + * > TS_NODE_FILES=true npx mocha test/get-file-info.ts --require ts-node/register + * + * To specify test: + * > TS_NODE_FILES=true npx mocha test/get-file-info.ts --require ts-node/register -g 'test name' + */ + +import * as assert from 'assert'; +import { async } from './utils'; +import { getFileInfo } from '../src/misc/get-file-info'; + +describe('Get file info', () => { + it('Empty file', async (async () => { + const path = `${__dirname}/resources/emptyfile`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 0, + md5: 'd41d8cd98f00b204e9800998ecf8427e', + type: { + mime: 'application/octet-stream', + ext: null + }, + width: undefined, + height: undefined, + avgColor: undefined + }); + })); + + it('Generic JPEG', async (async () => { + const path = `${__dirname}/resources/Lenna.jpg`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 25360, + md5: '091b3f259662aa31e2ffef4519951168', + type: { + mime: 'image/jpeg', + ext: 'jpg' + }, + width: 512, + height: 512, + avgColor: [ 181, 99, 106 ] + }); + })); + + it('Generic APNG', async (async () => { + const path = `${__dirname}/resources/anime.png`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 1868, + md5: '08189c607bea3b952704676bb3c979e0', + type: { + mime: 'image/apng', + ext: 'apng' + }, + width: 256, + height: 256, + avgColor: [ 249, 253, 250 ] + }); + })); + + it('Generic AGIF', async (async () => { + const path = `${__dirname}/resources/anime.gif`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 2248, + md5: '32c47a11555675d9267aee1a86571e7e', + type: { + mime: 'image/gif', + ext: 'gif' + }, + width: 256, + height: 256, + avgColor: [ 249, 253, 250 ] + }); + })); + + it('PNG with alpha', async (async () => { + const path = `${__dirname}/resources/with-alpha.png`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 3772, + md5: 'f73535c3e1e27508885b69b10cf6e991', + type: { + mime: 'image/png', + ext: 'png' + }, + width: 256, + height: 256, + avgColor: [ 255, 255, 255 ] + }); + })); + + it('Generic SVG', async (async () => { + const path = `${__dirname}/resources/image.svg`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 505, + md5: 'b6f52b4b021e7b92cdd04509c7267965', + type: { + mime: 'image/svg+xml', + ext: 'svg' + }, + width: 256, + height: 256, + avgColor: [ 255, 255, 255 ] + }); + })); + + it('SVG with XML definition', async (async () => { + // https://github.com/syuilo/misskey/issues/4413 + const path = `${__dirname}/resources/with-xml-def.svg`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 544, + md5: '4b7a346cde9ccbeb267e812567e33397', + type: { + mime: 'image/svg+xml', + ext: 'svg' + }, + width: 256, + height: 256, + avgColor: [ 255, 255, 255 ] + }); + })); + + it('Dimension limit', async (async () => { + const path = `${__dirname}/resources/25000x25000.png`; + const info = await getFileInfo(path); + delete info.warnings; + assert.deepStrictEqual(info, { + size: 75933, + md5: '268c5dde99e17cf8fe09f1ab3f97df56', + type: { + mime: 'application/octet-stream', // do not treat as image + ext: null + }, + width: 25000, + height: 25000, + avgColor: undefined + }); + })); +}); diff --git a/test/resources/25000x25000.png b/test/resources/25000x25000.png new file mode 100644 index 0000000000..0ed4666925 Binary files /dev/null and b/test/resources/25000x25000.png differ diff --git a/test/resources/anime.gif b/test/resources/anime.gif new file mode 100644 index 0000000000..256ba495ce Binary files /dev/null and b/test/resources/anime.gif differ diff --git a/test/resources/anime.png b/test/resources/anime.png new file mode 100644 index 0000000000..f13600f7a4 Binary files /dev/null and b/test/resources/anime.png differ diff --git a/test/resources/emptyfile b/test/resources/emptyfile new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/resources/with-alpha.png b/test/resources/with-alpha.png new file mode 100644 index 0000000000..adc8d01805 Binary files /dev/null and b/test/resources/with-alpha.png differ diff --git a/test/resources/with-xml-def.svg b/test/resources/with-xml-def.svg new file mode 100644 index 0000000000..90971215a6 --- /dev/null +++ b/test/resources/with-xml-def.svg @@ -0,0 +1,2 @@ + + -- cgit v1.2.3-freya