mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Fix #242, onion skin rendered not cleared if 0 frames
This commit is contained in:
120
test/js/rendering/OnionSkinRendererTest.js
Normal file
120
test/js/rendering/OnionSkinRendererTest.js
Normal file
@@ -0,0 +1,120 @@
|
||||
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};
|
||||
}
|
||||
};
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user