2020-10-30 20:34:04 +00:00
|
|
|
// Copyright 2020 Signal Messenger, LLC
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2020-09-28 18:40:26 +00:00
|
|
|
import * as fs from 'fs';
|
|
|
|
import * as path from 'path';
|
|
|
|
import { assert } from 'chai';
|
|
|
|
|
|
|
|
import { getAnimatedPngDataIfExists } from '../../util/getAnimatedPngDataIfExists';
|
|
|
|
|
|
|
|
describe('getAnimatedPngDataIfExists', () => {
|
|
|
|
const fixture = (filename: string): Promise<Buffer> => {
|
|
|
|
const fixturePath = path.join(
|
|
|
|
__dirname,
|
|
|
|
'..',
|
|
|
|
'..',
|
|
|
|
'..',
|
|
|
|
'fixtures',
|
|
|
|
filename
|
|
|
|
);
|
|
|
|
return fs.promises.readFile(fixturePath);
|
|
|
|
};
|
|
|
|
|
|
|
|
it('returns null for empty buffers', () => {
|
|
|
|
assert.isNull(getAnimatedPngDataIfExists(Buffer.alloc(0)));
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns null for non-PNG files', async () => {
|
|
|
|
await Promise.all(
|
|
|
|
[
|
|
|
|
'kitten-1-64-64.jpg',
|
|
|
|
'512x515-thumbs-up-lincoln.webp',
|
|
|
|
'giphy-GVNvOUpeYmI7e.gif',
|
|
|
|
'pixabay-Soap-Bubble-7141.mp4',
|
|
|
|
'lorem-ipsum.txt',
|
|
|
|
].map(async filename => {
|
|
|
|
assert.isNull(getAnimatedPngDataIfExists(await fixture(filename)));
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns null for non-animated PNG files', async () => {
|
|
|
|
assert.isNull(
|
|
|
|
getAnimatedPngDataIfExists(await fixture('20x200-yellow.png'))
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns data for animated PNG files', async () => {
|
|
|
|
assert.deepEqual(
|
|
|
|
getAnimatedPngDataIfExists(
|
|
|
|
await fixture('Animated_PNG_example_bouncing_beach_ball.png')
|
|
|
|
),
|
|
|
|
{ numPlays: Infinity }
|
|
|
|
);
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
getAnimatedPngDataIfExists(await fixture('apng_with_2_plays.png')),
|
|
|
|
{ numPlays: 2 }
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|