python-archieve-projects/WechatBot/node_modules/gifwrap/test/test_bitmap.js

158 lines
4.9 KiB
JavaScript
Executable File

'use strict';
const assert = require('chai').assert;
const Jimp = require('jimp');
const Tools = require('./lib/tools');
const { BitmapImage, GifUtil } = require('../src/index');
const SAMPLE_PNG_PATH = Tools.getFixturePath('lenna.png');
const SAMPLE_JPG_PATH = Tools.getFixturePath('pelagrina.jpg');
describe("BitmapImage construction behavior", () => {
it("constructs an empty uncolored image", (done) => {
const i = new BitmapImage(10, 5);
Tools.checkBitmap(i.bitmap, 10, 5, 0);
done();
});
it("constructs an empty colored image", (done) => {
const color = 0x01020304;
const i = new BitmapImage(10, 5, color);
Tools.checkBitmap(i.bitmap, 10, 5, color);
done();
});
it("constructs a buffer-sourced image", (done) => {
const buf = new Buffer(10 * 5);
const i = new BitmapImage(10, 5, buf);
Tools.checkBitmap(i.bitmap, 10, 5, buf);
done();
});
it("sourced bitmaps are shared", (done) => {
const b = { width: 5, height: 6, data: new Buffer(5 * 6) };
const j = new BitmapImage(b);
assert.strictEqual(b, j.bitmap);
done();
});
it("sourced images are copied", (done) => {
const color = 0x01020304;
const j1 = new BitmapImage(10, 5, color);
const j2 = new BitmapImage(j1);
assert.notStrictEqual(j1.bitmap, j2.bitmap);
assert.deepStrictEqual(j1.bitmap, j2.bitmap);
done();
});
});
describe("GifFrame bad construction behavior", () => {
it("won't accept garbage", (done) => {
assert.throws(() => {
new BitmapImage();
}, /requires parameters/);
assert.throws(() => {
new BitmapImage(null);
}, /unrecognized/);
assert.throws(() => {
new BitmapImage("string");
}, /unrecognized/);
assert.throws(() => {
new BitmapImage(() => {});
}, /unrecognized/);
assert.throws(() => {
new BitmapImage({});
}, /unrecognized/);
assert.throws(() => {
new BitmapImage(new Buffer(25));
}, /unrecognized/);
done();
});
it("width requires height", (done) => {
assert.throws(() => {
new BitmapImage(5);
}, /unrecognized/);
assert.throws(() => {
new BitmapImage(5, new Buffer(5));
}, /unrecognized/);
assert.throws(() => {
new BitmapImage(5, {});
}, /unrecognized/);
done();
});
});
// TBD: test BitmapImage transformation methods
describe("Jimp compatibility", () => {
it("works when sourced from Jimp", (done) => {
new Jimp(SAMPLE_PNG_PATH, (err, j1) => {
if (err) return done(err);
assert.strictEqual(err, null);
const initialColor = j1.getPixelColor(5, 5);
const i = new BitmapImage(j1.bitmap);
assert.strictEqual(i.getRGBA(5, 5), initialColor);
const newColor = initialColor + 0x01010101;
i.fillRGBA(newColor);
assert.strictEqual(i.getRGBA(5, 5), newColor);
const j2 = GifUtil.shareAsJimp(Jimp, i);
assert.strictEqual(j2.getPixelColor(5, 5), newColor);
done();
});
});
it("works when sourcing Jimp via sharing", (done) => {
const initialColor = 0x12344321;
const i1 = new BitmapImage(10, 5, initialColor);
const j = GifUtil.shareAsJimp(Jimp, i1);
assert.strictEqual(j.getPixelColor(3, 3), initialColor);
const newColor = initialColor + 0x01010101;
j.setPixelColor(newColor, 3, 3);
assert.strictEqual(j.getPixelColor(3, 3), newColor);
const i2 = new BitmapImage(j.bitmap);
assert.strictEqual(i2.getRGBA(3,3), newColor);
done();
});
it("works when sourcing Jimp via copying", (done) => {
const initialColor = 0x12344321;
const i1 = new BitmapImage(10, 5, initialColor);
const j = GifUtil.copyAsJimp(Jimp, i1);
assert.strictEqual(j.getPixelColor(3, 3), initialColor);
const newColor = initialColor + 0x01010101;
j.setPixelColor(newColor, 3, 3);
assert.strictEqual(j.getPixelColor(3, 3), newColor);
const i2 = new BitmapImage(j.bitmap);
assert.strictEqual(i2.getRGBA(3,3), newColor);
done();
});
it("composing with a sprite having transparency", (done) => {
const i1 = new BitmapImage(Tools.getBitmap('singleFrameMonoOpaque'));
const j1 = GifUtil.shareAsJimp(Jimp, i1);
const i2 = new BitmapImage(Tools.getBitmap('sampleSprite'));
const j2 = GifUtil.shareAsJimp(Jimp, i2);
j1.composite(j2, 1, 1);
const result = new BitmapImage(j1.bitmap);
const expected = new BitmapImage(Tools.getBitmap('singleFrameMonoOpaqueSpriteAt1x1'));
assert.deepStrictEqual(result.bitmap, expected.bitmap);
done();
});
});