UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

834 lines (733 loc) 24.1 kB
import { describe, it, expect } from 'vitest'; import { FabricObject } from './FabricObject'; import { Point } from '../../Point'; describe('ObjectInteractivity', () => { it('isControlVisible', () => { expect(Object, 'Object should exist').toBeTruthy(); const cObj = new FabricObject({}); expect(typeof cObj.isControlVisible, 'isControlVisible should exist').toBe( 'function', ); expect(cObj.isControlVisible('tl'), 'tl control should be visible').toBe( true, ); expect(cObj.isControlVisible('tr'), 'tr control should be visible').toBe( true, ); expect(cObj.isControlVisible('br'), 'br control should be visible').toBe( true, ); expect(cObj.isControlVisible('bl'), 'bl control should be visible').toBe( true, ); expect(cObj.isControlVisible('ml'), 'ml control should be visible').toBe( true, ); expect(cObj.isControlVisible('mt'), 'mt control should be visible').toBe( true, ); expect(cObj.isControlVisible('mr'), 'mr control should be visible').toBe( true, ); expect(cObj.isControlVisible('mb'), 'mb control should be visible').toBe( true, ); expect(cObj.isControlVisible('mtr'), 'mtr control should be visible').toBe( true, ); }); it('setControlVisible', () => { expect(Object, 'Object should exist').toBeTruthy(); const cObj = new FabricObject({}); expect( typeof cObj.setControlVisible, 'setControlVisible should exist', ).toBe('function'); cObj.setControlVisible('tl', false); expect( cObj.isControlVisible('tl'), 'tl control should not be visible', ).toBe(false); cObj.setControlVisible('tl', true); expect( cObj.isControlVisible('tl'), 'tl control should be visible again', ).toBe(true); }); it('setControlVisible is per object', () => { expect(Object, 'Object should exist').toBeTruthy(); const cObj = new FabricObject({}); const cObj2 = new FabricObject({}); cObj.setControlVisible('tl', false); expect( cObj.isControlVisible('tl'), 'setting to false worked for cObj', ).toBe(false); expect( cObj2.isControlVisible('tl'), 'setting to false did not work for cObj2', ).toBe(true); cObj.controls.tl.setVisibility(false); expect( cObj2.isControlVisible('tl'), 'setting directly on controls does not affect other objects', ).toBe(true); cObj.setControlVisible('tl', true); expect(cObj.isControlVisible('tl'), 'object setting takes precedence').toBe( true, ); // restore original visibility cObj.controls.tl.setVisibility(true); }); it('setControlsVisibility', () => { expect(Object, 'Object should exist').toBeTruthy(); const cObj = new FabricObject({}); expect( typeof cObj.setControlsVisibility, 'setControlsVisibility should exist', ).toBe('function'); cObj.setControlsVisibility({ bl: false, br: false, mb: false, ml: false, mr: false, mt: false, tl: false, tr: false, mtr: false, }); expect( cObj.isControlVisible('tl'), 'tl control should not be visible', ).toBe(false); expect( cObj.isControlVisible('tr'), 'tr control should not be visible', ).toBe(false); expect( cObj.isControlVisible('br'), 'br control should not be visible', ).toBe(false); expect( cObj.isControlVisible('bl'), 'bl control should not be visible', ).toBe(false); expect( cObj.isControlVisible('ml'), 'ml control should not be visible', ).toBe(false); expect( cObj.isControlVisible('mt'), 'mt control should not be visible', ).toBe(false); expect( cObj.isControlVisible('mr'), 'mr control should not be visible', ).toBe(false); expect( cObj.isControlVisible('mb'), 'mb control should not be visible', ).toBe(false); expect( cObj.isControlVisible('mtr'), 'mtr control should not be visible', ).toBe(false); cObj.setControlsVisibility({ bl: true, br: true, mb: true, ml: true, mr: true, mt: true, tl: true, tr: true, mtr: true, }); expect( cObj.isControlVisible('tl'), 'tl control should be visible again', ).toBe(true); expect( cObj.isControlVisible('tr'), 'tr control should be visible again', ).toBe(true); expect( cObj.isControlVisible('br'), 'br control should be visible again', ).toBe(true); expect( cObj.isControlVisible('bl'), 'bl control should be visible again', ).toBe(true); expect( cObj.isControlVisible('ml'), 'ml control should be visible again', ).toBe(true); expect( cObj.isControlVisible('mt'), 'mt control should be visible again', ).toBe(true); expect( cObj.isControlVisible('mr'), 'mr control should be visible again', ).toBe(true); expect( cObj.isControlVisible('mb'), 'mb control should be visible again', ).toBe(true); expect( cObj.isControlVisible('mtr'), 'mtr control should be visible again', ).toBe(true); }); it('corner coords', () => { const cObj = new FabricObject({ top: 15, left: 15, width: 10, height: 10, strokeWidth: 0, // @ts-expect-error -- mock canvas canvas: {}, }); cObj.setCoords(); expect(cObj.oCoords.tl.corner.tl.x.toFixed(2), 'tl corner.tl.x').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.tl.y.toFixed(2), 'tl corner.tl.y').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.tr.x.toFixed(2), 'tl corner.tr.x').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.tr.y.toFixed(2), 'tl corner.tr.y').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.bl.x.toFixed(2), 'tl corner.bl.x').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.bl.y.toFixed(2), 'tl corner.bl.y').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.br.x.toFixed(2), 'tl corner.br.x').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.br.y.toFixed(2), 'tl corner.br.y').toBe( '16.50', ); expect(cObj.oCoords.bl.corner.tl.x.toFixed(2), 'bl corner.tl.x').toBe( '3.50', ); expect(cObj.oCoords.bl.corner.tl.y.toFixed(2), 'bl corner.tl.y').toBe( '13.50', ); expect(cObj.oCoords.bl.corner.tr.x.toFixed(2), 'bl corner.tr.x').toBe( '16.50', ); expect(cObj.oCoords.bl.corner.tr.y.toFixed(2), 'bl corner.tr.y').toBe( '13.50', ); expect(cObj.oCoords.bl.corner.bl.x.toFixed(2), 'bl corner.bl.x').toBe( '3.50', ); expect(cObj.oCoords.bl.corner.bl.y.toFixed(2), 'bl corner.bl.y').toBe( '26.50', ); expect(cObj.oCoords.bl.corner.br.x.toFixed(2), 'bl corner.br.x').toBe( '16.50', ); expect(cObj.oCoords.bl.corner.br.y.toFixed(2), 'bl corner.br.y').toBe( '26.50', ); expect(cObj.oCoords.tr.corner.tl.x.toFixed(2), 'tr corner.tl.x').toBe( '13.50', ); expect(cObj.oCoords.tr.corner.tl.y.toFixed(2), 'tr corner.tl.y').toBe( '3.50', ); expect(cObj.oCoords.tr.corner.tr.x.toFixed(2), 'tr corner.tr.x').toBe( '26.50', ); expect(cObj.oCoords.tr.corner.tr.y.toFixed(2), 'tr corner.tr.y').toBe( '3.50', ); expect(cObj.oCoords.tr.corner.bl.x.toFixed(2), 'tr corner.bl.x').toBe( '13.50', ); expect(cObj.oCoords.tr.corner.bl.y.toFixed(2), 'tr corner.bl.y').toBe( '16.50', ); expect(cObj.oCoords.tr.corner.br.x.toFixed(2), 'tr corner.br.x').toBe( '26.50', ); expect(cObj.oCoords.tr.corner.br.y.toFixed(2), 'tr corner.br.y').toBe( '16.50', ); expect(cObj.oCoords.br.corner.tl.x.toFixed(2), 'br corner.tl.x').toBe( '13.50', ); expect(cObj.oCoords.br.corner.tl.y.toFixed(2), 'br corner.tl.y').toBe( '13.50', ); expect(cObj.oCoords.br.corner.tr.x.toFixed(2), 'br corner.tr.x').toBe( '26.50', ); expect(cObj.oCoords.br.corner.tr.y.toFixed(2), 'br corner.tr.y').toBe( '13.50', ); expect(cObj.oCoords.br.corner.bl.x.toFixed(2), 'br corner.bl.x').toBe( '13.50', ); expect(cObj.oCoords.br.corner.bl.y.toFixed(2), 'br corner.bl.y').toBe( '26.50', ); expect(cObj.oCoords.br.corner.br.x.toFixed(2), 'br corner.br.x').toBe( '26.50', ); expect(cObj.oCoords.br.corner.br.y.toFixed(2), 'br corner.br.y').toBe( '26.50', ); expect(cObj.oCoords.mtr.corner.tl.x.toFixed(2), 'mtr corner.tl.x').toBe( '8.50', ); expect(cObj.oCoords.mtr.corner.tl.y.toFixed(2), 'mtr corner.tl.y').toBe( '-36.50', ); expect(cObj.oCoords.mtr.corner.tr.x.toFixed(2), 'mtr corner.tr.x').toBe( '21.50', ); expect(cObj.oCoords.mtr.corner.tr.y.toFixed(2), 'mtr corner.tr.y').toBe( '-36.50', ); expect(cObj.oCoords.mtr.corner.bl.x.toFixed(2), 'mtr corner.bl.x').toBe( '8.50', ); expect(cObj.oCoords.mtr.corner.bl.y.toFixed(2), 'mtr corner.bl.y').toBe( '-23.50', ); expect(cObj.oCoords.mtr.corner.br.x.toFixed(2), 'mtr corner.br.x').toBe( '21.50', ); expect(cObj.oCoords.mtr.corner.br.y.toFixed(2), 'mtr corner.br.y').toBe( '-23.50', ); }); // set size for bottom left corner and have different results for bl than normal setCornerCoords test it('corner coords: custom control size', () => { //set custom corner size const sharedControls = FabricObject.createControls().controls; sharedControls.bl.sizeX = 30; sharedControls.bl.sizeY = 10; const cObj = new FabricObject({ top: 15, left: 15, width: 10, height: 10, strokeWidth: 0, controls: sharedControls, // @ts-expect-error -- mock canvas canvas: {}, }); cObj.setCoords(); expect(cObj.oCoords.tl.corner.tl.x.toFixed(2), 'tl corner.tl.x').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.tl.y.toFixed(2), 'tl corner.tl.y').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.tr.x.toFixed(2), 'tl corner.tr.x').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.tr.y.toFixed(2), 'tl corner.tr.y').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.bl.x.toFixed(2), 'tl corner.bl.x').toBe( '3.50', ); expect(cObj.oCoords.tl.corner.bl.y.toFixed(2), 'tl corner.bl.y').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.br.x.toFixed(2), 'tl corner.br.x').toBe( '16.50', ); expect(cObj.oCoords.tl.corner.br.y.toFixed(2), 'tl corner.br.y').toBe( '16.50', ); expect(cObj.oCoords.bl.corner.tl.x.toFixed(2), 'bl corner.tl.x').toBe( '-5.00', ); expect(cObj.oCoords.bl.corner.tl.y.toFixed(2), 'bl corner.tl.y').toBe( '15.00', ); expect(cObj.oCoords.bl.corner.tr.x.toFixed(2), 'bl corner.tr.x').toBe( '25.00', ); expect(cObj.oCoords.bl.corner.tr.y.toFixed(2), 'bl corner.tr.y').toBe( '15.00', ); expect(cObj.oCoords.bl.corner.bl.x.toFixed(2), 'bl corner.bl.x').toBe( '-5.00', ); expect(cObj.oCoords.bl.corner.bl.y.toFixed(2), 'bl corner.bl.y').toBe( '25.00', ); expect(cObj.oCoords.bl.corner.br.x.toFixed(2), 'bl corner.br.x').toBe( '25.00', ); expect(cObj.oCoords.bl.corner.br.y.toFixed(2), 'bl corner.br.y').toBe( '25.00', ); expect(cObj.oCoords.tr.corner.tl.x.toFixed(2), 'tr corner.tl.x').toBe( '13.50', ); expect(cObj.oCoords.tr.corner.tl.y.toFixed(2), 'tr corner.tl.y').toBe( '3.50', ); expect(cObj.oCoords.tr.corner.tr.x.toFixed(2), 'tr corner.tr.x').toBe( '26.50', ); expect(cObj.oCoords.tr.corner.tr.y.toFixed(2), 'tr corner.tr.y').toBe( '3.50', ); expect(cObj.oCoords.tr.corner.bl.x.toFixed(2), 'tr corner.bl.x').toBe( '13.50', ); expect(cObj.oCoords.tr.corner.bl.y.toFixed(2), 'tr corner.bl.y').toBe( '16.50', ); expect(cObj.oCoords.tr.corner.br.x.toFixed(2), 'tr corner.br.x').toBe( '26.50', ); expect(cObj.oCoords.tr.corner.br.y.toFixed(2), 'tr corner.br.y').toBe( '16.50', ); expect(cObj.oCoords.br.corner.tl.x.toFixed(2), 'br corner.tl.x').toBe( '13.50', ); expect(cObj.oCoords.br.corner.tl.y.toFixed(2), 'br corner.tl.y').toBe( '13.50', ); expect(cObj.oCoords.br.corner.tr.x.toFixed(2), 'br corner.tr.x').toBe( '26.50', ); expect(cObj.oCoords.br.corner.tr.y.toFixed(2), 'br corner.tr.y').toBe( '13.50', ); expect(cObj.oCoords.br.corner.bl.x.toFixed(2), 'br corner.bl.x').toBe( '13.50', ); expect(cObj.oCoords.br.corner.bl.y.toFixed(2), 'br corner.bl.y').toBe( '26.50', ); expect(cObj.oCoords.br.corner.br.x.toFixed(2), 'br corner.br.x').toBe( '26.50', ); expect(cObj.oCoords.br.corner.br.y.toFixed(2), 'br corner.br.y').toBe( '26.50', ); expect(cObj.oCoords.mtr.corner.tl.x.toFixed(2), 'mtr corner.tl.x').toBe( '8.50', ); expect(cObj.oCoords.mtr.corner.tl.y.toFixed(2), 'mtr corner.tl.y').toBe( '-36.50', ); expect(cObj.oCoords.mtr.corner.tr.x.toFixed(2), 'mtr corner.tr.x').toBe( '21.50', ); expect(cObj.oCoords.mtr.corner.tr.y.toFixed(2), 'mtr corner.tr.y').toBe( '-36.50', ); expect(cObj.oCoords.mtr.corner.bl.x.toFixed(2), 'mtr corner.bl.x').toBe( '8.50', ); expect(cObj.oCoords.mtr.corner.bl.y.toFixed(2), 'mtr corner.bl.y').toBe( '-23.50', ); expect(cObj.oCoords.mtr.corner.br.x.toFixed(2), 'mtr corner.br.x').toBe( '21.50', ); expect(cObj.oCoords.mtr.corner.br.y.toFixed(2), 'mtr corner.br.y').toBe( '-23.50', ); // reset sharedControls.bl.sizeX = 0; sharedControls.bl.sizeY = 0; }); it('findControl', () => { const cObj = new FabricObject({ top: 25, left: 25, width: 30, height: 30, strokeWidth: 0, // @ts-expect-error -- mock canvas canvas: {}, }); expect(typeof cObj.findControl, 'findControl should exist').toBe( 'function', ); cObj.setCoords(); // @ts-expect-error -- mock canvas cObj.canvas = { getActiveObject() { return cObj; }, }; expect(cObj.findControl(cObj.oCoords.br), 'br control').toEqual({ key: 'br', control: cObj.controls.br, coord: cObj.oCoords.br, }); expect(cObj.findControl(cObj.oCoords.tl), 'tl control').toEqual({ key: 'tl', control: cObj.controls.tl, coord: cObj.oCoords.tl, }); expect(cObj.findControl(cObj.oCoords.tr), 'tr control').toEqual({ key: 'tr', control: cObj.controls.tr, coord: cObj.oCoords.tr, }); expect(cObj.findControl(cObj.oCoords.bl), 'bl control').toEqual({ key: 'bl', control: cObj.controls.bl, coord: cObj.oCoords.bl, }); expect(cObj.findControl(cObj.oCoords.mr), 'mr control').toEqual({ key: 'mr', control: cObj.controls.mr, coord: cObj.oCoords.mr, }); expect(cObj.findControl(cObj.oCoords.ml), 'ml control').toEqual({ key: 'ml', control: cObj.controls.ml, coord: cObj.oCoords.ml, }); expect(cObj.findControl(cObj.oCoords.mt), 'mt control').toEqual({ key: 'mt', control: cObj.controls.mt, coord: cObj.oCoords.mt, }); expect(cObj.findControl(cObj.oCoords.mb), 'mb control').toEqual({ key: 'mb', control: cObj.controls.mb, coord: cObj.oCoords.mb, }); expect(cObj.findControl(cObj.oCoords.mtr), 'mtr control').toEqual({ key: 'mtr', control: cObj.controls.mtr, coord: cObj.oCoords.mtr, }); expect(cObj.findControl(new Point()), 'empty point').toBeUndefined(); }); it('findControl for touches', () => { const cObj = new FabricObject({ top: 10, left: 10, width: 30, height: 30, strokeWidth: 0, // @ts-expect-error -- mock canvas canvas: {}, }); cObj.setCoords(); // @ts-expect-error -- mock canvas cObj.canvas = { getActiveObject() { return cObj; }, }; const pointNearBr = new Point({ x: cObj.oCoords.br.x + cObj.cornerSize / 3, y: cObj.oCoords.br.y + cObj.cornerSize / 3, }); expect( cObj.findControl(pointNearBr)!.key, 'cornerSize/3 near br returns br', ).toBe('br'); expect( cObj.findControl(pointNearBr, true)!.key, 'touch event cornerSize/3 near br returns br', ).toBe('br'); const pointNearBrTouch = new Point({ x: cObj.oCoords.br.x + cObj.touchCornerSize / 3, y: cObj.oCoords.br.y + cObj.touchCornerSize / 3, }); expect( cObj.findControl(pointNearBrTouch, true)!.key, 'touch event touchCornerSize/3 near br returns br', ).toBe('br'); expect( cObj.findControl(pointNearBrTouch, false), 'not touch event touchCornerSize/3 near br returns undefined', ).toBeUndefined(); }); it('findControl for non active object', () => { const cObj = new FabricObject({ top: 10, left: 10, width: 30, height: 30, strokeWidth: 0, // @ts-expect-error -- mock canvas canvas: {}, }); expect(typeof cObj.findControl, 'findControl should exist').toBe( 'function', ); cObj.setCoords(); // @ts-expect-error -- mock canvas cObj.canvas = { getActiveObject() { return undefined; }, }; expect( cObj.findControl(cObj.oCoords.mtr), 'object is not active', ).toBeUndefined(); }); it('findControl for non visible control', () => { const cObj = new FabricObject({ top: 10, left: 10, width: 30, height: 30, strokeWidth: 0, // @ts-expect-error -- mock canvas canvas: {}, }); expect(typeof cObj.findControl, 'findControl should exist').toBe( 'function', ); cObj.setCoords(); // @ts-expect-error -- mock canvas cObj.canvas = { getActiveObject() { return cObj; }, }; cObj.isControlVisible = () => false; expect( cObj.findControl(cObj.oCoords.mtr), 'control is not visible', ).toBeUndefined(); }); it('_calculateCurrentDimensions', () => { const cObj = new FabricObject({ width: 10, height: 15, strokeWidth: 0 }); expect( typeof cObj._calculateCurrentDimensions, '_calculateCurrentDimensions should exist', ).toBe('function'); let dim = cObj._calculateCurrentDimensions(); expect(dim.x, 'width without transformations').toBe(10); expect(dim.y, 'height without transformations').toBe(15); cObj.strokeWidth = 2; dim = cObj._calculateCurrentDimensions(); expect(dim.x, 'strokeWidth should be added to dimension').toBe(12); expect(dim.y, 'strokeWidth should be added to dimension').toBe(17); cObj.scaleX = 2; dim = cObj._calculateCurrentDimensions(); expect(dim.x, 'width should be doubled').toBe(24); expect(dim.y, 'height should not change').toBe(17); cObj.scaleY = 2; dim = cObj._calculateCurrentDimensions(); expect(dim.x, 'width should not change').toBe(24); expect(dim.y, 'height should be doubled').toBe(34); cObj.angle = 45; dim = cObj._calculateCurrentDimensions(); expect(dim.x, 'width should not change with rotation').toBe(24); expect(dim.y, 'height should not change with rotation').toBe(34); cObj.skewX = 45; dim = cObj._calculateCurrentDimensions(); expect(dim.x.toFixed(0), 'width should change with skewX').toBe('58'); expect(dim.y.toFixed(0), 'height should not change with skewX').toBe('34'); cObj.skewY = 45; dim = cObj._calculateCurrentDimensions(); expect(dim.x.toFixed(0), 'width should not change with skewY').toBe('82'); expect(dim.y.toFixed(0), 'height should change with skewY').toBe('58'); cObj.padding = 10; dim = cObj._calculateCurrentDimensions(); expect(dim.x.toFixed(0), 'width should change with padding').toBe('102'); expect(dim.y.toFixed(0), 'height should change with padding').toBe('78'); }); it('_getTransformedDimensions', () => { const cObj = new FabricObject({ width: 10, height: 15, strokeWidth: 0 }); expect( typeof cObj._getTransformedDimensions, '_getTransformedDimensions should exist', ).toBe('function'); let dim = cObj._getTransformedDimensions(); expect(dim.x, 'width without transformations').toBe(10); expect(dim.y, 'height without transformations').toBe(15); cObj.strokeWidth = 2; dim = cObj._getTransformedDimensions(); expect(dim.x, 'strokeWidth should be added to dimension').toBe(12); expect(dim.y, 'strokeWidth should be added to dimension').toBe(17); cObj.scaleX = 2; dim = cObj._getTransformedDimensions(); expect(dim.x, 'width should be doubled').toBe(24); expect(dim.y, 'height should not change').toBe(17); cObj.scaleY = 2; dim = cObj._getTransformedDimensions(); expect(dim.x, 'width should not change').toBe(24); expect(dim.y, 'height should be doubled').toBe(34); cObj.angle = 45; dim = cObj._getTransformedDimensions(); expect(dim.x, 'width should not change with rotation').toBe(24); expect(dim.y, 'height should not change with rotation').toBe(34); cObj.skewX = 45; dim = cObj._getTransformedDimensions(); expect(dim.x.toFixed(0), 'width should change with skewX').toBe('58'); expect(dim.y.toFixed(0), 'height should not change with skewX').toBe('34'); cObj.skewY = 45; dim = cObj._getTransformedDimensions(); expect(dim.x.toFixed(0), 'width should not change with skewY').toBe('82'); expect(dim.y.toFixed(0), 'height should change with skewY').toBe('58'); cObj.padding = 10; dim = cObj._getTransformedDimensions(); expect(dim.x.toFixed(0), 'width should not change with padding').toBe('82'); expect(dim.y.toFixed(0), 'height should not change with padding').toBe( '58', ); }); it('_getNonTransformedDimensions', () => { const cObj = new FabricObject({ width: 10, height: 15, strokeWidth: 0 }); expect( typeof cObj._getNonTransformedDimensions, '_getNonTransformedDimensions should exist', ).toBe('function'); let dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width without transformations').toBe(10); expect(dim.y, 'height without transformations').toBe(15); cObj.strokeWidth = 2; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'strokeWidth should be added to dimension').toBe(12); expect(dim.y, 'strokeWidth should be added to dimension').toBe(17); cObj.scaleX = 2; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with scale').toBe(12); expect(dim.y, 'height should not change with scale').toBe(17); cObj.scaleY = 2; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with scale').toBe(12); expect(dim.y, 'height should not change with scale').toBe(17); cObj.angle = 45; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with rotation').toBe(12); expect(dim.y, 'height should not change with rotation').toBe(17); cObj.skewX = 45; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with skewX').toBe(12); expect(dim.y, 'height should not change with skewX').toBe(17); cObj.skewY = 45; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with skewY').toBe(12); expect(dim.y, 'height should not change with skewY').toBe(17); cObj.padding = 10; dim = cObj._getNonTransformedDimensions(); expect(dim.x, 'width should not change with padding').toBe(12); expect(dim.y, 'height should not change with padding').toBe(17); }); });