Spaces:
Running
Running
| import { fabric } from 'fabric'; | |
| import Cropzone from '@/extension/cropzone'; | |
| describe('Cropzone', () => { | |
| const options = { | |
| left: 10, | |
| top: 10, | |
| width: 100, | |
| height: 100, | |
| cornerSize: 10, | |
| strokeWidth: 0, | |
| cornerColor: 'black', | |
| fill: 'transparent', | |
| hasRotatingPoint: false, | |
| hasBorders: false, | |
| lockScalingFlip: true, | |
| lockRotation: true, | |
| }; | |
| const canvas = new fabric.Canvas(); | |
| canvas.height = 400; | |
| canvas.width = 300; | |
| it('should return outer&inner rect coordinates(array)', () => { | |
| const cropzone = new Cropzone(canvas, options, {}); | |
| const coords = cropzone._getCoordinates(); | |
| expect(coords).toEqual({ | |
| x: [-60, -50, 50, 240], | |
| y: [-60, -50, 50, 340], | |
| }); | |
| }); | |
| it('should set left and top between 0 and canvas size', () => { | |
| const cropzone = new Cropzone(canvas, options, {}); | |
| jest.spyOn(cropzone.canvas, 'getWidth').mockReturnValue(300); | |
| jest.spyOn(cropzone.canvas, 'getHeight').mockReturnValue(400); | |
| cropzone.left = -1; | |
| cropzone.top = -1; | |
| cropzone._onMoving(); | |
| expect(cropzone).toMatchObject({ top: 0, left: 0 }); | |
| cropzone.left = 1000; | |
| cropzone.top = 1000; | |
| cropzone._onMoving(); | |
| expect(cropzone).toMatchObject({ top: 300, left: 200 }); | |
| }); | |
| it('should return whether the cropzone has real area or not', () => { | |
| const cropzone = new Cropzone(canvas, options, {}); | |
| cropzone.left = -1; | |
| expect(cropzone.isValid()).toBe(false); | |
| cropzone.left = 1; | |
| expect(cropzone.isValid()).toBe(true); | |
| cropzone.height = -1; | |
| expect(cropzone.isValid()).toBe(false); | |
| cropzone.height = 1; | |
| expect(cropzone.isValid()).toBe(true); | |
| }); | |
| it('should give the expected value at run', () => { | |
| const cropzone = new Cropzone(canvas, options, {}); | |
| let resizedCropzone = cropzone._resizeCropZone({ x: 30, y: 40 }, 'tl'); | |
| expect(resizedCropzone).toEqual({ | |
| left: 30, | |
| top: 40, | |
| width: 80, | |
| height: 70, | |
| }); | |
| resizedCropzone = cropzone._resizeCropZone({ x: 80, y: 50 }, 'tr'); | |
| expect(resizedCropzone).toEqual({ | |
| left: 10, | |
| top: 50, | |
| width: 70, | |
| height: 60, | |
| }); | |
| resizedCropzone = cropzone._resizeCropZone({ x: 30, y: 40 }, 'bl'); | |
| expect(resizedCropzone).toEqual({ | |
| left: 30, | |
| top: 10, | |
| width: 80, | |
| height: 30, | |
| }); | |
| resizedCropzone = cropzone._resizeCropZone({ x: 30, y: 40 }, 'br'); | |
| expect(resizedCropzone).toEqual({ | |
| left: 10, | |
| top: 10, | |
| width: 20, | |
| height: 30, | |
| }); | |
| }); | |
| it('should yield the result of maintaining the ratio at running the resize function at a fixed rate', () => { | |
| const presetRatio = 5 / 4; | |
| const cropzone = new Cropzone(canvas, { ...options, width: 50, height: 40, presetRatio }, {}); | |
| ['tl', 'tr', 'mt', 'ml', 'mr', 'mb', 'bl', 'br'].forEach((cornerType) => { | |
| const { width, height } = cropzone._resizeCropZone({ x: 20, y: 20 }, cornerType); | |
| expect(width / height).toEqual(presetRatio); | |
| }); | |
| }); | |
| }); | |