From 9da7a84c727185efba988322bd0116a4b128b572 Mon Sep 17 00:00:00 2001 From: Joe Lapp Date: Sun, 21 Jul 2019 10:30:45 -0500 Subject: [PATCH] Added test for partial frame rendering. Test fails prior to pull #18. --- test/fixtures/rnaples-bad.png | Bin 0 -> 5525 bytes test/fixtures/rnaples-check.png | Bin 0 -> 5525 bytes test/fixtures/rnaples-frame-10.png | Bin 0 -> 36393 bytes test/lib/tools.js | 35 ++++++++++++++++++++++++++--- test/test_decoding.js | 23 +++++++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/rnaples-bad.png create mode 100644 test/fixtures/rnaples-check.png create mode 100644 test/fixtures/rnaples-frame-10.png diff --git a/test/fixtures/rnaples-bad.png b/test/fixtures/rnaples-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d28b0764a39d992a7c397b8e65f16e61ef9647 GIT binary patch literal 5525 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 { + new Jimp(imagePath, (err, jimp) => { + if (err) return reject(err); + resolve(new BitmapImage(jimp.bitmap)); + }); + }); +}; + +exports.saveBitmapImage = function (bitmapImage, path) { + let jimp = new Jimp(1, 1, 0); + jimp.bitmap = bitmapImage.bitmap; + return new Promise((resolve, reject) => { + jimp.write(path, (err) => { + if (err) return reject(err); + resolve(); + }); + }); +}; + exports.verifyFrameInfo = function (actual, expected, frameIndex=0, note='') { expected = Object.assign({}, expected); // don't munge caller if (expected.xOffset !== undefined) { diff --git a/test/test_decoding.js b/test/test_decoding.js index 0be922a..d004e42 100644 --- a/test/test_decoding.js +++ b/test/test_decoding.js @@ -200,6 +200,29 @@ describe("multiframe decoding", () => { }); }); +describe("partial frame decoding", () => { + + it("renders partial frames properly onto full frames", () => { + return GifUtil.read(Tools.getGifPath('rnaples-offsets-public')) + .then(actualGif => { + const actualBitmapImage = actualGif.frames[10]; + return Tools.saveBitmapImage(actualBitmapImage, Tools.getImagePath('rnaples-check.png')) + .then(() => { + return Tools.loadBitmapImage(Tools.getImagePath('rnaples-frame-10.png')); + }) + .then(expectedBitmapImage => { + const expectedBitmap = expectedBitmapImage.bitmap; + Tools.checkBitmap( + actualBitmapImage.bitmap, + expectedBitmap.width, + expectedBitmap.height, + expectedBitmap.data + ); + }); + }); + }); +}); + function _compareGifToSeries(actualGif, expectedSeries, options) { assert.strictEqual(actualGif.width, expectedSeries[0].width);