piskel/test/js/rendering/OnionSkinRendererTest.js
2014-12-27 15:02:41 +01:00

120 lines
3.2 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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};
}
};
};
});