mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
120 lines
3.2 KiB
JavaScript
120 lines
3.2 KiB
JavaScript
describe("Onion Skin Renderer test", function() {
|
||
var BLACK = '#000000';
|
||
var WHITE = '#ffffff';
|
||
var TRANS = Constants.TRANSPARENT_COLOR;
|
||
|
||
beforeEach(function() {});
|
||
afterEach(function() {});
|
||
|
||
it("renders correctly :)", function() {
|
||
var fakeRenderer = createMockRenderer();
|
||
var layer = createMockLayer();
|
||
var piskelController = createMockPiskelController();
|
||
piskelController.currentLayer_ = layer;
|
||
|
||
var onionSkinRenderer = new pskl.rendering.OnionSkinRenderer(fakeRenderer, piskelController);
|
||
// create frame
|
||
var previousFrame = pskl.model.Frame.fromPixelGrid(test.testutils.toFrameGrid([
|
||
[BLACK, TRANS],
|
||
[TRANS, TRANS]
|
||
]));
|
||
|
||
var nextFrame = pskl.model.Frame.fromPixelGrid(test.testutils.toFrameGrid([
|
||
[TRANS, TRANS],
|
||
[TRANS, BLACK]
|
||
]));
|
||
|
||
piskelController.currentFrameIndex_ = 1;
|
||
layer.frames = [previousFrame, {}, nextFrame];
|
||
|
||
// initial state, all counters at 0
|
||
expect(fakeRenderer.clearCounter_).toBe(0);
|
||
expect(fakeRenderer.renderCounter_).toBe(0);
|
||
|
||
// First rendering, should call clear + render
|
||
onionSkinRenderer.render();
|
||
expect(fakeRenderer.clearCounter_).toBe(1);
|
||
expect(fakeRenderer.renderCounter_).toBe(1);
|
||
test.testutils.frameEqualsGrid(fakeRenderer.renderedFrame_, [
|
||
[BLACK, TRANS],
|
||
[TRANS, BLACK]
|
||
]);
|
||
|
||
// Second rendering, nothing changed, should not clear or render
|
||
onionSkinRenderer.render();
|
||
expect(fakeRenderer.clearCounter_).toBe(1);
|
||
expect(fakeRenderer.renderCounter_).toBe(1);
|
||
|
||
// remove one frame
|
||
layer.frames = [previousFrame, {}];
|
||
onionSkinRenderer.render();
|
||
expect(fakeRenderer.clearCounter_).toBe(2);
|
||
expect(fakeRenderer.renderCounter_).toBe(2);
|
||
test.testutils.frameEqualsGrid(fakeRenderer.renderedFrame_, [
|
||
[BLACK, TRANS],
|
||
[TRANS, TRANS]
|
||
]);
|
||
|
||
// remove the other frame
|
||
layer.frames = [{}];
|
||
piskelController.currentFrameIndex_ = 0;
|
||
onionSkinRenderer.render();
|
||
// nothing to render, but the underlying renderer should still be cleared
|
||
expect(fakeRenderer.clearCounter_).toBe(3);
|
||
expect(fakeRenderer.renderCounter_).toBe(2);
|
||
});
|
||
|
||
var createMockLayer = function () {
|
||
return {
|
||
frames : [],
|
||
getFrameAt : function (index) {
|
||
return this.frames[index];
|
||
}
|
||
};
|
||
};
|
||
|
||
var createMockPiskelController = function () {
|
||
return {
|
||
currentFrameIndex_ : 1,
|
||
currentLayer_ : null,
|
||
getLayers : function () {
|
||
return [this.currentLayer_];
|
||
},
|
||
|
||
getCurrentFrameIndex : function () {
|
||
return this.currentFrameIndex_;
|
||
},
|
||
|
||
getCurrentLayer : function () {
|
||
return this.currentLayer_;
|
||
}
|
||
};
|
||
};
|
||
|
||
var createMockRenderer = function () {
|
||
return {
|
||
clearCounter_ : 0,
|
||
clear : function () {
|
||
this.clearCounter_++;
|
||
},
|
||
renderedFrame_ : null,
|
||
renderCounter_ : 0,
|
||
render : function (frame) {
|
||
this.renderCounter_++;
|
||
this.renderedFrame_ = frame;
|
||
},
|
||
getZoom : function () {
|
||
return 1;
|
||
},
|
||
getGridWidth : function () {
|
||
return 0;
|
||
},
|
||
getOffset : function () {
|
||
return {x:0,y:0};
|
||
},
|
||
getDisplaySize : function () {
|
||
return {width:10,height:10};
|
||
}
|
||
};
|
||
};
|
||
}); |