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