Spaces:
Running
Running
| import { fabric } from 'fabric'; | |
| import Graphics from '@/graphics'; | |
| import Icon from '@/component/icon'; | |
| describe('Icon', () => { | |
| let canvas, graphics, mockImage, icon; | |
| beforeAll(() => { | |
| graphics = new Graphics(document.createElement('canvas')); | |
| canvas = graphics.getCanvas(); | |
| icon = new Icon(graphics); | |
| }); | |
| beforeEach(() => { | |
| mockImage = new fabric.Image(); | |
| graphics.setCanvasImage('mockImage', mockImage); | |
| }); | |
| afterEach(() => { | |
| canvas.forEachObject((obj) => { | |
| canvas.remove(obj); | |
| }); | |
| }); | |
| describe('_onFabricMouseMove()', () => { | |
| let iconObj, fEvent; | |
| beforeEach(async () => { | |
| fEvent = { e: {} }; | |
| icon._startPoint = { x: 300, y: 300 }; | |
| await icon.add('arrow', { left: icon._startPoint.x, top: icon._startPoint.y, color: '#000' }); | |
| [iconObj] = canvas.getObjects(); | |
| iconObj.set({ width: 10, height: 10 }); | |
| }); | |
| it('should increase when dragging to the right-down from the starting point', () => { | |
| jest.spyOn(canvas, 'getPointer').mockReturnValue({ x: 500, y: 500 }); | |
| icon._onFabricMouseMove(fEvent); | |
| expect(iconObj).toMatchObject({ scaleX: 40, scaleY: 40 }); | |
| }); | |
| it('should increase when dragging to the left-up from the starting point', () => { | |
| jest.spyOn(canvas, 'getPointer').mockReturnValue({ x: 100, y: 100 }); | |
| icon._onFabricMouseMove(fEvent); | |
| expect(iconObj).toMatchObject({ scaleX: 40, scaleY: 40 }); | |
| }); | |
| }); | |
| it('should insert the activated icon object on canvas', () => { | |
| icon.add('arrow'); | |
| const activeObj = canvas.getActiveObject(); | |
| expect(activeObj).not.toBeNull(); | |
| }); | |
| it('should insert the icon object on center of canvas image', () => { | |
| const centerPos = icon.getCanvasImage().getCenterPoint(); | |
| icon.add('arrow'); | |
| const { left, top, strokeWidth } = canvas.getActiveObject(); | |
| const halfStrokeWidth = strokeWidth / 2; | |
| expect({ x: left + halfStrokeWidth, y: top + halfStrokeWidth }).toEqual(centerPos); | |
| }); | |
| it('should create the arrow icon when parameter value is arrow', () => { | |
| const path = icon._pathMap.arrow; | |
| const createIconSpy = jest.spyOn(icon, '_createIcon').mockReturnValue(new fabric.Object({})); | |
| icon.add('arrow'); | |
| expect(createIconSpy).toHaveBeenCalledWith(path); | |
| }); | |
| it('should create the cancel icon when parameter value is cancel', () => { | |
| const path = icon._pathMap.cancel; | |
| const createIconSpy = jest.spyOn(icon, '_createIcon').mockReturnValue(new fabric.Object({})); | |
| icon.add('cancel'); | |
| expect(createIconSpy).toHaveBeenCalledWith(path); | |
| }); | |
| it('should change color of next inserted icon', () => { | |
| const color = '#ffffff'; | |
| icon.add('arrow'); | |
| expect(canvas.getActiveObject().fill).not.toBe(color); | |
| icon.setColor(color); | |
| icon.add('cancel'); | |
| expect(canvas.getActiveObject().fill).toBe(color); | |
| }); | |
| }); | |